<?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>233395</bug_id>
          
          <creation_ts>2021-11-20 00:09:31 -0800</creation_ts>
          <short_desc>[JSC] Move RepatchXXX from jit to bytecode</short_desc>
          <delta_ts>2021-11-20 00:36:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1817094</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-20 00:09:31 -0800</bug_when>
    <thetext>[JSC] Move RepatchXXX from jit to bytecode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817095</commentid>
    <comment_count>1</comment_count>
      <attachid>444888</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-20 00:10:05 -0800</bug_when>
    <thetext>Created attachment 444888
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817098</commentid>
    <comment_count>2</comment_count>
      <attachid>444888</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-11-20 00:21:26 -0800</bug_when>
    <thetext>Comment on attachment 444888
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817099</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-20 00:33:27 -0800</bug_when>
    <thetext>OK, it is built. So landing (since there are no file changes).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817100</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-11-20 00:35:20 -0800</bug_when>
    <thetext>Committed r286095 (244482@main): &lt;https://commits.webkit.org/244482@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817101</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-20 00:36:22 -0800</bug_when>
    <thetext>&lt;rdar://problem/85631243&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444888</attachid>
            <date>2021-11-20 00:10:05 -0800</date>
            <delta_ts>2021-11-20 00:21:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233395-20211120001004.patch</filename>
            <type>text/plain</type>
            <size>230842</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MDkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
NTI5YmZiOWMyMjQwNzIyOGY3MmNiOWNhYWE1ZDEzMzY0ZmNmMTNlLi45M2Y0ZTBhMDRhOWYyMTIz
NWM3YmQ3MTIwZjJhYWM0YzZhNWEzNzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOCBAQAorMjAyMS0xMS0yMCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIE1vdmUgUmVwYXRjaFhYWCBmcm9tIGppdCB0byBieXRlY29kZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMzMzk1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhleSBhcmUg
YWxzbyB1c2VkIGJ5IG5vbiBKSVQgY29kZSB0b28uCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAg
ICAgICAqIGJ5dGVjb2RlL1JlcGF0Y2guY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmNwcC4KKyAgICAgICAgKiBieXRlY29kZS9SZXBhdGNoLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaC4KKyAgICAgICAg
KiBieXRlY29kZS9SZXBhdGNoSW5saW5lcy5oOiBSZW5hbWVkIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoSW5saW5lcy5oLgorCiAyMDIxLTExLTE5ICBBc3VtdSBUYWtpa2F3
YSAgPGFzdW11QGlnYWxpYS5jb20+CiAKICAgICAgICAgRml4IFdlYkFzc2VtYmx5IG1lbW9yeS5m
aWxsIG91dCBvZiBib3VuZHMgZXJyb3IgbWVzc2FnZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCAyMTFkYTcyYzg2OTcwYWQyNWMxZDBlODA0NDEzZGMwMDMzMzM5NzUzLi44YTMyMjlh
OTc1OGQyYTA1ZDlkYzg1N2VlYjc5ZTRlNGM4OWE1MzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMTkyMCw4ICsxOTIwLDYgQEAKIAkJRTM3NTBDQzgyNTAyRTg3RTAwNkEwQUFC
IC8qIEludGxEYXRlVGltZUZvcm1hdElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzNzUwQ0M3MjUwMkU4N0UwMDZBMEFBQiAvKiBJbnRsRGF0
ZVRpbWVGb3JtYXRJbmxpbmVzLmggKi87IH07CiAJCUUzNzhEQzhEMjcyNzYyOTQwMDQyN0IwQiAv
KiBJbnRsTnVtYmVyRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEExRDc5MkY2MUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9ybWF0
LmNwcCAqLzsgfTsKIAkJRTM3OTRFNzYxQjc3RUI5NzAwNTU0M0FFIC8qIE1vZHVsZUFuYWx5emVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzc5NEU3
NDFCNzdFQjk3MDA1NTQzQUUgLyogTW9kdWxlQW5hbHl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlFMzdFMjBFMzI3M0Y1NzUzMDBGNzA3NTcg
LyogUmVwYXRjaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTM3RTIwRTAyNzNGNTc1MzAwRjcwNzU3IC8qIFJlcGF0Y2guaCAqLzsgfTsKLQkJRTM3RTIw
RTUyNzNGNTc1MzAwRjcwNzU3IC8qIFJlcGF0Y2hJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzdFMjBFMjI3M0Y1NzUzMDBGNzA3NTcgLyog
UmVwYXRjaElubGluZXMuaCAqLzsgfTsKIAkJRTM4MzUwMEEyMzkwRDkzQjAwMzYzMTZEIC8qIFdh
c21HbG9iYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUzODM1MDA5MjM5MEQ5MzcwMDM2MzE2RCAvKiBXYXNtR2xvYmFsLmggKi87IH07CiAJCUUzODUw
QjE1MjI2RUQ2NDEwMDlBQkY5QyAvKiBERkdNaW5pZmllZElESW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM4NTBCMTQyMjZFRDYzRTAwOUFC
RjlDIC8qIERGR01pbmlmaWVkSURJbmxpbmVzLmggKi87IH07CiAJCUUzODY1MkUzMjM3Q0EwQzkw
MEUxRDVFRSAvKiBCbG9ja0RpcmVjdG9yeUJpdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzODY1MkUyMjM3Q0EwQzgwMEUxRDVFRSAvKiBCbG9ja0Rp
cmVjdG9yeUJpdHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMTk0MSw2ICsxOTM5LDggQEAKIAkJRTM5REExREEyNkRCNUU0QzAwMTAwNDM3IC8q
IFRlbXBvcmFsQ2FsZW5kYXJQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFM0M0NjMwNjI2REI1REU5MDA4OTYzMzYgLyogVGVtcG9y
YWxDYWxlbmRhclByb3RvdHlwZS5sdXQuaCAqLzsgfTsKIAkJRTM5REExREIyNkRCNUU1MTAwMTAw
NDM3IC8qIFRlbXBvcmFsQ2FsZW5kYXJDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzQzQ2MzA1MjZEQjVERTkwMDg5NjMzNiAv
KiBUZW1wb3JhbENhbGVuZGFyQ29uc3RydWN0b3IubHV0LmggKi87IH07CiAJCUUzOURBNEE3MUI3
RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM5REE0QTUxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9k
dWxlUmVjb3JkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJRTM5RTQ0OTEyNzQ4RTNGODAwRUREMkE1IC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzOUU0NDhFMjc0OEUzRjgwMEVERDJB
NSAvKiBSZXBhdGNoLmggKi87IH07CisJCUUzOUU0NDkzMjc0OEUzRjgwMEVERDJBNSAvKiBSZXBh
dGNoSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTM5RTQ0OTAyNzQ4RTNGODAwRUREMkE1IC8qIFJlcGF0Y2hJbmxpbmVzLmggKi87IH07CiAJ
CUUzOUVFQUYzMjI4MTI0NTAwMDg0NzRGNCAvKiBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2
ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUzOUVFQUYyMjI4MTI0NEMwMDg0NzRGNCAvKiBDYWNoZWRTcGVjaWFsUHJv
cGVydHlBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgfTsKIAkJRTM5RkVCRTMyMzM5
QzVEOTAwQjQwQUIwIC8qIEpTQXN5bmNHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzOUZFQkUyMjMzOUM1RDQwMEI0MEFCMCAvKiBKU0Fz
eW5jR2VuZXJhdG9yLmggKi87IH07CiAJCUUzQTA1MzFBMjEzNDJCNjgwMDIyRUMxNCAvKiBXYXNt
U3RyZWFtaW5nUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFM0EwNTMxNjIxMzQyQjY2MDAyMkVDMTQgLyogV2FzbVN0cmVhbWluZ1BhcnNlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01MjQ3
LDkgKzUyNDcsNiBAQAogCQlFMzc5NEU3MzFCNzdFQjk3MDA1NTQzQUUgLyogTW9kdWxlQW5hbHl6
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9kdWxlQW5hbHl6
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzc5NEU3NDFCNzdFQjk3MDA1
NTQzQUUgLyogTW9kdWxlQW5hbHl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTW9kdWxlQW5hbHl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM3Q0ZC
MkQyMkYyN0M1NzAwOUE3QjM4IC8qIFdhc21Db21waWxhdGlvbk1vZGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2FzbUNvbXBpbGF0aW9uTW9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUUzN0UyMEUwMjczRjU3NTMwMEY3MDc1NyAvKiBSZXBhdGNoLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlcGF0Y2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRTM3RTIwRTEyNzNGNTc1MzAwRjcwNzU3IC8qIFJlcGF0Y2guY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVwYXRjaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUUzN0UyMEUyMjczRjU3NTMwMEY3MDc1NyAvKiBSZXBhdGNoSW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXBhdGNoSW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzgwQTc2QjFEQ0Q3MTk1MDAwRjg5RTYgLyogTWFj
cm9Bc3NlbWJsZXJIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1h
Y3JvQXNzZW1ibGVySGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzgw
RDY2QjFGMTkyNDlEMDBBNTkwOTUgLyogQnVpbHRpbk5hbWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ1aWx0aW5OYW1lcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUUzODM1MDA4MjM5MEQ5MzcwMDM2MzE2RCAvKiBXYXNtR2xvYmFsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21HbG9iYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNTI3OSw2ICs1Mjc2LDkgQEAKIAkJRTM5REE0QTQxQjdFOEI3QzAwODRGMzNBIC8q
IEpTTW9kdWxlUmVjb3JkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTTW9kdWxlUmVjb3JkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM5REE0
QTUxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTTW9kdWxlUmVjb3JkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUzOUUwMzBEMjJEOUVBM0UwMDQwOEMxOCAvKiBXZWJBc3NlbWJseS5qcyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2
YXNjcmlwdDsgcGF0aCA9IFdlYkFzc2VtYmx5LmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlFMzlFNDQ4RTI3NDhFM0Y4MDBFREQyQTUgLyogUmVwYXRjaC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZXBhdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUUzOUU0NDhGMjc0OEUzRjgwMEVERDJBNSAvKiBSZXBhdGNoLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlcGF0Y2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlFMzlFNDQ5MDI3NDhFM0Y4MDBFREQyQTUgLyogUmVwYXRjaElubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVwYXRjaElubGluZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM5RUVBRjEyMjgxMjQ0QzAwODQ3NEY0IC8qIENhY2hl
ZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDYWNoZWRTcGVjaWFsUHJvcGVydHlBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9p
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzlFRUFGMjIyODEyNDRDMDA4
NDc0RjQgLyogQ2FjaGVkU3BlY2lhbFByb3BlcnR5QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFNwZWNpYWxQcm9wZXJ0eUFkYXB0aXZlU3RydWN0dXJl
V2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzlGRUJFMTIzMzlD
NUQ0MDBCNDBBQjAgLyogSlNBc3luY0dlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0FzeW5jR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY0NjIs
OSArNjQ2Miw2IEBACiAJCQkJNjIzQTM3RUIxQjg3QTdCRDAwNzU0MjA5IC8qIFJlZ2lzdGVyTWFw
LmggKi8sCiAJCQkJMEZDMzE0MTQxODE0NkQ3MDAwMDMzMjMyIC8qIFJlZ2lzdGVyU2V0LmNwcCAq
LywKIAkJCQkwRkMzMTQxMDE4MTQ1NTkxMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuaCAqLywKLQkJ
CQlFMzdFMjBFMTI3M0Y1NzUzMDBGNzA3NTcgLyogUmVwYXRjaC5jcHAgKi8sCi0JCQkJRTM3RTIw
RTAyNzNGNTc1MzAwRjcwNzU3IC8qIFJlcGF0Y2guaCAqLywKLQkJCQlFMzdFMjBFMjI3M0Y1NzUz
MDBGNzA3NTcgLyogUmVwYXRjaElubGluZXMuaCAqLywKIAkJCQkwRkE3QThFRDE4Q0U0RkQ4MDA1
MjM3MUQgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcCAqLywKIAkJCQkwRjI0RTU0QjE3
RUUyNzQ5MDBBQkIyMTcgLyogU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggKi8sCiAJCQkJMEZF
RTk4NDIxQTg5MjI3NTAwNzU0RTkzIC8qIFNldHVwVmFyYXJnc0ZyYW1lLmNwcCAqLywKQEAgLTg4
NjgsNiArODg2NSw5IEBACiAJCQkJMEY0NEE3QUEyMEJGNjg1RTAwMjJCMTcxIC8qIFJlY29yZGVk
U3RhdHVzZXMuaCAqLywKIAkJCQkwRkY2MEFCRjE2NzQwRjgxMDAwMjk3NzkgLyogUmVkdWNlV2hp
dGVzcGFjZS5jcHAgKi8sCiAJCQkJMEZGNjBBQzAxNjc0MEY4MTAwMDI5Nzc5IC8qIFJlZHVjZVdo
aXRlc3BhY2UuaCAqLywKKwkJCQlFMzlFNDQ4RjI3NDhFM0Y4MDBFREQyQTUgLyogUmVwYXRjaC5j
cHAgKi8sCisJCQkJRTM5RTQ0OEUyNzQ4RTNGODAwRUREMkE1IC8qIFJlcGF0Y2guaCAqLywKKwkJ
CQlFMzlFNDQ5MDI3NDhFM0Y4MDBFREQyQTUgLyogUmVwYXRjaElubGluZXMuaCAqLywKIAkJCQk4
NjVEQTBDOTI1Qjg5NjJBMDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmNwcCAqLywK
IAkJCQk4NjVEQTBDNzI1Qjg5NjBDMDA4NzU3NzIgLyogU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmgg
Ki8sCiAJCQkJODY1REEwQzYyNUI4OTU5RTAwODc1NzcyIC8qIFNldFByaXZhdGVCcmFuZFZhcmlh
bnQuY3BwICovLApAQCAtMTA2NzYsMTIgKzEwNjc2LDEyIEBACiAJCQkJMTQ3MzQxRDQxREMwMkU2
RDAwQUEyOUJBIC8qIFByb2dyYW1FeGVjdXRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQz
RTQwRTFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3RkI2MTAwMTA0MEMzOEIwMDE3QTI4NiAvKiBQcm9wZXJ0eURlc2NyaXB0b3IuaCBp
biBIZWFkZXJzICovLAotCQkJCUJDOTU0MzdEMEVCQTcwRkQwMDcyQjZEMyAvKiBQcm9wZXJ0eVRh
YmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjE1OEFCMzE1NUM4QjQwMDBCNDVDOUMgLyogUHJv
cGVydHlOYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1NDBFMTZGNUNEMDBCMzQ0NjAg
LyogUHJvcGVydHlOYW1lQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcxNjhDMTVBM0Iy
MzUwMDhGNURBQSAvKiBQcm9wZXJ0eU9mZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
NTUwRTE2RjVDRDAwQjM0NDYwIC8qIFByb3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQkM5NTQzN0QwRUJBNzBGRDAwNzJCNkQzIC8qIFByb3BlcnR5VGFibGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDNDU2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm90ZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRTFENkQ3NTIzNjI2NDlGMDA3QTVDMjYgLyogUHJvdG9DYWxsRnJh
bWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc0QjkzQjFGODk2MTQ4MDBCOTM1RDMg
LyogUHJvdG90eXBlS2V5LmggaW4gSGVhZGVycyAqLywKQEAgLTEwNzMyLDggKzEwNzMyLDggQEAK
IAkJCQlBNUJBMTVFODE4MjM0MEIzMDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNUJBMTVFQTE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9y
Q29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTJGNTZCNzFFNEU4NEIyMDAzNTk1M0Ig
LyogUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTM3
RTIwRTMyNzNGNTc1MzAwRjcwNzU3IC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJzICovLAotCQkJCUUz
N0UyMEU1MjczRjU3NTMwMEY3MDc1NyAvKiBSZXBhdGNoSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRTM5RTQ0OTEyNzQ4RTNGODAwRUREMkE1IC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJzICov
LAorCQkJCUUzOUU0NDkzMjc0OEUzRjgwMEVERDJBNSAvKiBSZXBhdGNoSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkU5RjNGQjkyNjEzQzc4OTAwNjlFODlGIC8qIFJlc291cmNlRXhoYXVz
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY5RUJDQjcwRThDNkQ0QTAwODcyMkNDIC8qIFJl
c3VsdFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFM0I2NDJGMjVENkZCNEQwMDFBRERCNCAv
KiBSb290TWFya1JlYXNvbi5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQKaW5kZXggNzkzZjQ2ZjdiYzU4ZTUwOGNkYTZjYjkwMTVhYTA5MmU4Yzk4NjBkOS4uYjY5NTU1
N2FmZTYwZjE0NzUxMDA5YjFiNTA1ZjU1MTMzNDA1YjkwMCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dApAQCAtMjczLDYgKzI3Myw3IEBAIGJ5dGVjb2RlL1B1dEJ5U3RhdHVzLmNwcAogYnl0
ZWNvZGUvUHV0QnlWYXJpYW50LmNwcAogYnl0ZWNvZGUvUmVjb3JkZWRTdGF0dXNlcy5jcHAKIGJ5
dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuY3BwCitieXRlY29kZS9SZXBhdGNoLmNwcAogYnl0ZWNv
ZGUvU2V0UHJpdmF0ZUJyYW5kU3RhdHVzLmNwcAogYnl0ZWNvZGUvU2V0UHJpdmF0ZUJyYW5kVmFy
aWFudC5jcHAKIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcApAQCAtNjc2LDcgKzY3Nyw2IEBA
IGppdC9SZWcuY3BwCiBqaXQvUmVnaXN0ZXJBdE9mZnNldC5jcHAKIGppdC9SZWdpc3RlckF0T2Zm
c2V0TGlzdC5jcHAKIGppdC9SZWdpc3RlclNldC5jcHAKLWppdC9SZXBhdGNoLmNwcAogaml0L1Nj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5jcHAKIGppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAKIGpp
dC9TbG93UGF0aENhbGwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUmVwYXRjaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRj
aC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMDJkZDdmNTA1NWZkN2I2MmI4NzUzMDJmODliMTFjZWNlNjY5Yjc5
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBh
dGNoLmNwcApAQCAtMCwwICsxLDIwNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVw
YXRjaC5oIgorCisjaW5jbHVkZSAiQmluYXJ5U3dpdGNoLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxw
ZXJzLmgiCisjaW5jbHVkZSAiQ2FjaGVhYmxlSWRlbnRpZmllcklubGluZXMuaCIKKyNpbmNsdWRl
ICJDYWxsRnJhbWVTaHVmZmxlci5oIgorI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKKyNpbmNs
dWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgorI2luY2x1ZGUgIkRPTUpJVEdldHRlclNldHRlci5o
IgorI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkV4ZWN1dGFibGVCYXNl
SW5saW5lcy5oIgorI2luY2x1ZGUgIkZUTFRodW5rcy5oIgorI2luY2x1ZGUgIkZ1bGxDb2RlT3Jp
Z2luLmgiCisjaW5jbHVkZSAiRnVuY3Rpb25Db2RlQmxvY2suaCIKKyNpbmNsdWRlICJHQ0F3YXJl
SklUU3R1YlJvdXRpbmUuaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJH
ZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmgiCisjaW5jbHVkZSAiSUNTdGF0cy5oIgorI2luY2x1ZGUg
IklubGluZUFjY2Vzcy5oIgorI2luY2x1ZGUgIkluc3RhbmNlT2ZBY2Nlc3NDYXNlLmgiCisjaW5j
bHVkZSAiSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZS5oIgorI2luY2x1ZGUgIkpJVC5oIgorI2lu
Y2x1ZGUgIkpJVElubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5LmgiCisj
aW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIK
KyNpbmNsdWRlICJNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlLmgiCisjaW5jbHVkZSAiUG9seW1v
cnBoaWNBY2Nlc3MuaCIKKyNpbmNsdWRlICJTY29wZWRBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgor
I2luY2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5o
IgorI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgorI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5o
IgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvQ29tbWFQ
cmludGVyLmg+CisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisjaW5jbHVkZSA8d3RmL1N0cmlu
Z1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMgdm9pZCBsaW5rU2xv
d1BhdGhUbyhWTSYsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IGNvZGVSZWYpCit7CisgICAgY2FsbExpbmtJbmZv
LnNldFNsb3dQYXRoQ2FsbERlc3RpbmF0aW9uKGNvZGVSZWYuY29kZSgpLnRlbXBsYXRlIHJldGFn
Z2VkPEpTRW50cnlQdHJUYWc+KCkpOworfQorCisjaWYgRU5BQkxFKEpJVCkKK3N0YXRpYyB2b2lk
IGxpbmtTbG93UGF0aFRvKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIFRodW5r
R2VuZXJhdG9yIGdlbmVyYXRvcikKK3sKKyAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJ
bmZvLCB2bS5nZXRDVElTdHViKGdlbmVyYXRvcikucmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJU
YWc+KCkpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGxpbmtTbG93Rm9yKFZNJiB2bSwgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8pCit7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2bS5nZXRDVElWaXJ0dWFsQ2FsbChj
YWxsTGlua0luZm8uY2FsbE1vZGUoKSk7CisgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5r
SW5mbywgdmlydHVhbFRodW5rKTsKK30KKworc3RhdGljIEpTQ2VsbCogd2ViQXNzZW1ibHlPd25l
cihKU0NlbGwqIGNhbGxlZSkKK3sKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgLy8gRWFj
aCBXZWJBc3NlbWJseS5JbnN0YW5jZSBzaGFyZXMgdGhlIHN0dWJzIGZyb20gdGhlaXIgV2ViQXNz
ZW1ibHkuTW9kdWxlLCB3aGljaCBhcmUgdGhlcmVmb3JlIHRoZSBhcHByb3ByaWF0ZSBvd25lci4K
KyAgICByZXR1cm4ganNDYXN0PEpTV2ViQXNzZW1ibHlNb2R1bGUqPihjYWxsZWUpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0oY2FsbGVlKTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBudWxscHRyOworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
K30KKwordm9pZCBsaW5rTW9ub21vcnBoaWNDYWxsKAorICAgIFZNJiB2bSwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNv
ZGVCbG9jaywKKyAgICBKU09iamVjdCogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNF
bnRyeVB0clRhZz4gY29kZVB0cikKK3sKKyAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKCkp
OworCisgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUo
KTsKKyAgICAvLyBPdXIgY2FsbGVyIG11c3QgaGF2ZSBhIGNlbGwgZm9yIGEgY2FsbGVlLiBXaGVu
IGNhbGxpbmcKKyAgICAvLyB0aGlzIGZyb20gV2FzbSwgd2UgZW5zdXJlIHRoZSBjYWxsZWUgaXMg
YSBjZWxsLgorICAgIEFTU0VSVChjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuaXNDZWxsKCkpOworCisg
ICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7
CisKKyAgICAvLyBXZWJBc3NlbWJseSAtPiBKUyBzdHVicyBkb24ndCBoYXZlIGEgdmFsaWQgQ29k
ZUJsb2NrLgorICAgIEpTQ2VsbCogb3duZXIgPSBpc1dlYkFzc2VtYmx5TW9kdWxlKGNhbGxlckZy
YW1lLT5jYWxsZWUoKS5hc0NlbGwoKSkgPyB3ZWJBc3NlbWJseU93bmVyKGNhbGxlckZyYW1lLT5j
YWxsZWUoKS5hc0NlbGwoKSkgOiBjYWxsZXJDb2RlQmxvY2s7CisgICAgQVNTRVJUKG93bmVyKTsK
KworICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOworICAgIGNhbGxMaW5rSW5m
by5zZXRNb25vbW9ycGhpY0NhbGxlZSh2bSwgb3duZXIsIGNhbGxlZSwgY29kZVB0cik7CisgICAg
Y2FsbExpbmtJbmZvLnNldExhc3RTZWVuQ2FsbGVlKHZtLCBvd25lciwgY2FsbGVlKTsKKworICAg
IGlmIChzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSkKKyAgICAgICAg
ZGF0YUxvZygiTGlua2luZyBjYWxsIGluICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9j
aywgY2FsbExpbmtJbmZvLmNvZGVPcmlnaW4oKSksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVl
Q29kZUJsb2NrKSwgIiwgZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKKworICAgIGlm
IChjYWxsZWVDb2RlQmxvY2spCisgICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5n
Q2FsbChjYWxsZXJGcmFtZSwgJmNhbGxMaW5rSW5mbyk7CisKKyNpZiBFTkFCTEUoSklUKQorICAg
IGlmIChjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29kZUZvckNhbGwgJiYg
Y2FsbExpbmtJbmZvLmFsbG93U3R1YnMoKSkgeworICAgICAgICBsaW5rU2xvd1BhdGhUbyh2bSwg
Y2FsbExpbmtJbmZvLCBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpOworICAgICAg
ICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgCisgICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxM
aW5rSW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkIHJldmVydENhbGwoVk0mIHZtLCBDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPiBjb2RlUmVmKQoreworICAgIGlmIChjYWxsTGlua0luZm8uaXNEaXJlY3QoKSkgeworI2lm
IEVOQUJMRShKSVQpCisgICAgICAgIGNhbGxMaW5rSW5mby5jbGVhckNvZGVCbG9jaygpOworICAg
ICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKQorICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLmluaXRpYWxpemVEaXJlY3RDYWxsKCk7CisjZW5kaWYKKyAgICB9IGVsc2Ug
eworICAgICAgICBpZiAoIWNhbGxMaW5rSW5mby5jbGVhcmVkQnlKZXR0aXNvbigpKSB7CisgICAg
ICAgICAgICBsaW5rU2xvd1BhdGhUbyh2bSwgY2FsbExpbmtJbmZvLCBjb2RlUmVmKTsKKworICAg
ICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5zdHViKCkpCisgICAgICAgICAgICAgICAgY2FsbExp
bmtJbmZvLnJldmVydENhbGxUb1N0dWIoKTsKKyAgICAgICAgfQorICAgICAgICBjYWxsTGlua0lu
Zm8uY2xlYXJDYWxsZWUoKTsgLy8gVGhpcyBhbHNvIGNsZWFycyB0aGUgaW5saW5lIGNhY2hlIGJv
dGggZm9yIGRhdGEgYW5kIGNvZGUtYmFzZWQgY2FjaGVzLgorICAgIH0KKyAgICBjYWxsTGlua0lu
Zm8uY2xlYXJTZWVuKCk7CisgICAgY2FsbExpbmtJbmZvLmNsZWFyU3R1YigpOworICAgIGlmIChj
YWxsTGlua0luZm8uaXNPbkxpc3QoKSkKKyAgICAgICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOwor
fQorCit2b2lkIHVubGlua0NhbGwoVk0mIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykK
K3sKKyAgICBkYXRhTG9nTG5JZihPcHRpb25zOjpkdW1wRGlzYXNzZW1ibHkoKSwgIlVubGlua2lu
ZyBDYWxsTGlua0luZm86ICIsIFJhd1BvaW50ZXIoJmNhbGxMaW5rSW5mbykpOworICAgIAorICAg
IHJldmVydENhbGwodm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0Q1RJTGlua0NhbGwoKS5yZXRhZ2dl
ZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBqc1RvV2FzbUlDQ29kZVB0cihWTSYgdm0sIENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCwgSlNPYmplY3QqIGNhbGxlZSkKK3sKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CisgICAgaWYgKCFjYWxsZWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChraW5k
ICE9IENvZGVGb3JDYWxsKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoYXV0byog
d2FzbUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4odm0sIGNh
bGxlZSkpCisgICAgICAgIHJldHVybiB3YXNtRnVuY3Rpb24tPmpzQ2FsbEVudHJ5cG9pbnQoKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBVTlVTRURfUEFSQU0oa2luZCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGNhbGxlZSk7CisjZW5kaWYKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KworI2lmIEVOQUJMRShKSVQpCisKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IHJldGFnT3BlcmF0aW9uV2l0aFZhbGlkYXRpb24oRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
PiBvcGVyYXRpb24pCit7CisgICAgSlNDX1JFVFVSTl9SRVRBR0dFRF9PUEVSQVRJT05fV0lUSF9W
QUxJREFUSU9OKG9wZXJhdGlvbik7Cit9CisKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+IHJldGFnQ2FsbFRhcmdldFdpdGhWYWxpZGF0aW9uKENvZGVMb2NhdGlvbkNhbGw8SlNJ
bnRlcm5hbFB0clRhZz4gY2FsbCkKK3sKKyAgICBKU0NfUkVUVVJOX1JFVEFHR0VEX0NBTExfVEFS
R0VUX1dJVEhfVkFMSURBVElPTihjYWxsKTsKK30KKworc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5j
dGlvblB0clRhZz4gcmVhZFB1dElDQ2FsbFRhcmdldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJ
QygpKQorICAgICAgICByZXR1cm4gcmV0YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlvbihzdHViSW5m
by5tX3Nsb3dPcGVyYXRpb24pOworICAgIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4gY2FsbCA9IHN0dWJJbmZvLm1fc2xvd1BhdGhDYWxsTG9jYXRpb247CisjaWYgRU5BQkxFKEZU
TF9KSVQpCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkZUTEpJVCkg
eworICAgICAgICBGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4gdGFyZ2V0ID0gTWFjcm9Bc3Nl
bWJsZXI6OnJlYWRDYWxsVGFyZ2V0PEpJVFRodW5rUHRyVGFnPihjYWxsKTsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiB0aHVuayA9IE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJn
ZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgIHJldHVybiByZXRhZ09wZXJhdGlvbldp
dGhWYWxpZGF0aW9uKGNvZGVCbG9jay0+dm0oKS5mdGxUaHVua3MtPmtleUZvclNsb3dQYXRoQ2Fs
bFRodW5rKHRodW5rKS5jYWxsVGFyZ2V0KCkpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKGNvZGVCbG9jayk7CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisgICAgcmV0dXJuIHJl
dGFnQ2FsbFRhcmdldFdpdGhWYWxpZGF0aW9uKGNhbGwpOworfQorCit2b2lkIGZ0bFRodW5rQXdh
cmVSZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUxvY2F0aW9uQ2FsbDxKU0lu
dGVybmFsUHRyVGFnPiBjYWxsLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxl
ZUZ1bmN0aW9uKQoreworI2lmIEVOQUJMRShGVExfSklUKQorICAgIGlmIChjb2RlQmxvY2stPmpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpGVExKSVQpIHsKKyAgICAgICAgVk0mIHZtID0gY29kZUJsb2Nr
LT52bSgpOworICAgICAgICBGVEw6OlRodW5rcyYgdGh1bmtzID0gKnZtLmZ0bFRodW5rczsKKyAg
ICAgICAgRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+IHRhcmdldCA9IE1hY3JvQXNzZW1ibGVy
OjpyZWFkQ2FsbFRhcmdldDxKSVRUaHVua1B0clRhZz4oY2FsbCk7CisgICAgICAgIGF1dG8gc2xv
d1BhdGhUaHVuayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz46OmNyZWF0
ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJnZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAg
ICAgIEZUTDo6U2xvd1BhdGhDYWxsS2V5IGtleSA9IHRodW5rcy5rZXlGb3JTbG93UGF0aENhbGxU
aHVuayhzbG93UGF0aFRodW5rKTsKKyAgICAgICAga2V5ID0ga2V5LndpdGhDYWxsVGFyZ2V0KG5l
d0NhbGxlZUZ1bmN0aW9uKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNh
bGwsIEZ1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPih0aHVua3MuZ2V0U2xvd1BhdGhDYWxsVGh1
bmsodm0sIGtleSkuY29kZSgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZWxzZSAvLyBF
TkFCTEUoRlRMX0pJVCkKKyAgICBVTlVTRURfUEFSQU0oY29kZUJsb2NrKTsKKyNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoY2FsbCwgbmV3
Q2FsbGVlRnVuY3Rpb24ucmV0YWdnZWQ8T3BlcmF0aW9uUHRyVGFnPigpKTsKK30KKworc3RhdGlj
IHZvaWQgcmVwYXRjaFNsb3dQYXRoQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvLCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxl
ZUZ1bmN0aW9uKQoreworICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKSB7CisgICAgICAg
IHN0dWJJbmZvLm1fc2xvd09wZXJhdGlvbiA9IG5ld0NhbGxlZUZ1bmN0aW9uLnJldGFnZ2VkPE9w
ZXJhdGlvblB0clRhZz4oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmdGxUaHVua0F3
YXJlUmVwYXRjaENhbGwoY29kZUJsb2NrLCBzdHViSW5mby5tX3Nsb3dQYXRoQ2FsbExvY2F0aW9u
LCBuZXdDYWxsZWVGdW5jdGlvbik7Cit9CisKK2VudW0gSW5saW5lQ2FjaGVBY3Rpb24geworICAg
IEdpdmVVcE9uQ2FjaGUsCisgICAgUmV0cnlDYWNoZUxhdGVyLAorICAgIEF0dGVtcHRUb0NhY2hl
Cit9OworCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uRm9yQ2VsbChWTSYgdm0sIEpT
Q2VsbCogY2VsbCkKK3sKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVy
ZSh2bSk7CisKKyAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IHN0cnVjdHVyZS0+dHlwZUluZm8oKTsK
KyAgICBpZiAodHlwZUluZm8ucHJvaGliaXRzUHJvcGVydHlDYWNoaW5nKCkpCisgICAgICAgIHJl
dHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURp
Y3Rpb25hcnkoKSkgeworICAgICAgICBpZiAoc3RydWN0dXJlLT5oYXNCZWVuRmxhdHRlbmVkQmVm
b3JlKCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgLy8gRmxh
dHRlbmluZyBjb3VsZCBoYXZlIGNoYW5nZWQgdGhlIG9mZnNldCwgc28gcmV0dXJuIGVhcmx5IGZv
ciBhbm90aGVyIHRyeS4KKyAgICAgICAgYXNPYmplY3QoY2VsbCktPmZsYXR0ZW5EaWN0aW9uYXJ5
T2JqZWN0KHZtKTsKKyAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICB9CisgICAg
CisgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICByZXR1cm4gQXR0ZW1wdFRvQ2FjaGU7
Cit9CisKK3N0YXRpYyBib29sIGZvcmNlSUNGYWlsdXJlKEpTR2xvYmFsT2JqZWN0KikKK3sKKyAg
ICByZXR1cm4gT3B0aW9uczo6Zm9yY2VJQ0ZhaWx1cmUoKTsKK30KKworQUxXQVlTX0lOTElORSBz
dGF0aWMgdm9pZCBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZChWTSYgdm0sIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEFjY2Vzc0dl
bmVyYXRpb25SZXN1bHQmIHJlc3VsdCkKK3sKKyAgICBpZiAocmVzdWx0LnNob3VsZFJlc2V0U3R1
YkFuZEZpcmVXYXRjaHBvaW50cygpKSB7CisgICAgICAgIHJlc3VsdC5maXJlV2F0Y2hwb2ludHMo
dm0pOworCisgICAgICAgIHsKKyAgICAgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKKyAgICAgICAgICAgIHN0dWJJbmZvLnJlc2V0
KGxvY2tlciwgY29kZUJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KK30KKworaW5saW5lIEZ1bmN0
aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlv
bihHZXRCeUtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEdldEJ5
S2luZDo6QnlJZDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZTsKKyAg
ICBjYXNlIEdldEJ5S2luZDo6QnlJZFdpdGhUaGlzOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9u
R2V0QnlJZFdpdGhUaGlzT3B0aW1pemU7CisgICAgY2FzZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6Cisg
ICAgICAgIHJldHVybiBvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemU7CisgICAgY2FzZSBHZXRC
eUtpbmQ6OkJ5SWREaXJlY3Q6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkRGlyZWN0
T3B0aW1pemU7CisgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uR2V0QnlWYWxPcHRpbWl6ZTsKKyAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6
CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplOworICAgIGNh
c2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25H
ZXRQcml2YXRlTmFtZUJ5SWRPcHRpbWl6ZTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworaW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBw
cm9wcmlhdGVHZXRCeUZ1bmN0aW9uKEdldEJ5S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2lu
ZCkgeworICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9u
R2V0QnlJZDsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZFdpdGhUaGlzOgorICAgICAgICByZXR1
cm4gb3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzOworICAgIGNhc2UgR2V0QnlLaW5kOjpUcnlCeUlk
OgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uVHJ5R2V0QnlJZDsKKyAgICBjYXNlIEdldEJ5S2lu
ZDo6QnlJZERpcmVjdDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWREaXJlY3Q7Cisg
ICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlW
YWxHZW5lcmljOworICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZToKKyAgICAgICAgcmV0
dXJuIG9wZXJhdGlvbkdldFByaXZhdGVOYW1lOworICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRl
TmFtZUJ5SWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRQcml2YXRlTmFtZUJ5SWQ7Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0YXRpYyBJbmxp
bmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2luZCkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisKKyAgICB7
CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2ssIGdsb2JhbE9iamVjdC0+dm0oKSk7CisKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGds
b2JhbE9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAg
CisgICAgICAgIC8vIEZJWE1FOiBDYWNoZSBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGltbWVkaWF0ZXMu
CisgICAgICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisgICAgICAgIEpTQ2VsbCogYmFzZUNlbGwgPSBiYXNlVmFsdWUuYXNDZWxs
KCk7CisgICAgICAgIGNvbnN0IGJvb2wgaXNQcml2YXRlID0ga2luZCA9PSBHZXRCeUtpbmQ6OlBy
aXZhdGVOYW1lIHx8IGtpbmQgPT0gR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ7CisKKyAgICAg
ICAgUmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CisKKyAgICAgICAgaWYgKHByb3BlcnR5TmFt
ZSA9PSB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChpc0pTQXJy
YXkoYmFzZUNlbGwpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgp
ID09IENhY2hlVHlwZTo6VW5zZXQKKyAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFz
ZSgpID09IGJhc2VDZWxsCisgICAgICAgICAgICAgICAgICAgICYmIElubGluZUFjY2Vzczo6aXND
YWNoZWFibGVBcnJheUxlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvLCBqc0Nhc3Q8SlNBcnJheSo+
KGJhc2VDZWxsKSkpIHsKKworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJ
bmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlQXJyYXlMZW5ndGgoY29kZUJsb2NrLCBzdHVi
SW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRj
aFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdH
ZXRCeUZ1bmN0aW9uKGtpbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLmlu
aXRBcnJheUxlbmd0aChsb2NrZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJl
dHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVC
bG9jaywgQWNjZXNzQ2FzZTo6QXJyYXlMZW5ndGgsIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKGlzSlNTdHJpbmcoYmFzZUNlbGwpKSB7CisgICAgICAgICAgICAgICAgaWYg
KHN0dWJJbmZvLmNhY2hlVHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKKyAgICAgICAgICAgICAg
ICAgICAgJiYgSW5saW5lQWNjZXNzOjppc0NhY2hlYWJsZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ss
IHN0dWJJbmZvKSkgeworICAgICAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxp
bmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU3RyaW5nTGVuZ3RoKGNvZGVCbG9jaywgc3R1Yklu
Zm8pOworICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJ
bmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRTdHJpbmdMZW5ndGgobG9ja2VyKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0g
QWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlN0cmluZ0xlbmd0
aCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoRGlyZWN0QXJndW1lbnRz
KiBhcmd1bWVudHMgPSBqc0R5bmFtaWNDYXN0PERpcmVjdEFyZ3VtZW50cyo+KHZtLCBiYXNlQ2Vs
bCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSB3ZXJlIG92ZXJyaWRlcywgdGhlbiB3
ZSBjYW4gaGFuZGxlIHRoaXMgYXMgYSBub3JtYWwgcHJvcGVydHkgbG9hZCEgR3VhcmRpbmcKKyAg
ICAgICAgICAgICAgICAvLyB0aGlzIHdpdGggc3VjaCBhIGNoZWNrIGVuYWJsZXMgdXMgdG8gYWRk
IGFuIElDIGNhc2UgZm9yIHRoYXQgbG9hZCBpZiBuZWVkZWQuCisgICAgICAgICAgICAgICAgaWYg
KCFhcmd1bWVudHMtPm92ZXJyb2RlVGhpbmdzKCkpCisgICAgICAgICAgICAgICAgICAgIG5ld0Nh
c2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6RGlyZWN0
QXJndW1lbnRzTGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChT
Y29wZWRBcmd1bWVudHMqIGFyZ3VtZW50cyA9IGpzRHluYW1pY0Nhc3Q8U2NvcGVkQXJndW1lbnRz
Kj4odm0sIGJhc2VDZWxsKSkgeworICAgICAgICAgICAgICAgIC8vIERpdHRvLgorICAgICAgICAg
ICAgICAgIGlmICghYXJndW1lbnRzLT5vdmVycm9kZVRoaW5ncygpKQorICAgICAgICAgICAgICAg
ICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nh
c2U6OlNjb3BlZEFyZ3VtZW50c0xlbmd0aCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmICghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkgJiYgYmFz
ZUNlbGwtPmluaGVyaXRzPEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0Pih2bSkgJiYgIXNsb3QuaXNV
bnNldCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBtb2R1bGVOYW1lc3BhY2VTbG90ID0gc2xv
dC5tb2R1bGVOYW1lc3BhY2VTbG90KCkpCisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IE1vZHVs
ZU5hbWVzcGFjZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBwcm9wZXJ0eU5hbWUs
IGpzQ2FzdDxKU01vZHVsZU5hbWVzcGFjZU9iamVjdCo+KGJhc2VDZWxsKSwgbW9kdWxlTmFtZXNw
YWNlU2xvdC0+ZW52aXJvbm1lbnQsIFNjb3BlT2Zmc2V0KG1vZHVsZU5hbWVzcGFjZVNsb3QtPnNj
b3BlT2Zmc2V0KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbmV3Q2FzZSkg
eworICAgICAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkgJiYgIXNsb3QuaXNVbnNldCgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CisgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pOworCisgICAgICAgICAg
ICBib29sIGxvYWRUYXJnZXRGcm9tUHJveHkgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChiYXNl
Q2VsbC0+dHlwZSgpID09IFB1cmVGb3J3YXJkaW5nUHJveHlUeXBlKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGlzUHJpdmF0ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2Fj
aGU7CisgICAgICAgICAgICAgICAgYmFzZVZhbHVlID0ganNDYXN0PEpTUHJveHkqPihiYXNlQ2Vs
bCktPnRhcmdldCgpOworICAgICAgICAgICAgICAgIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2Vs
bCgpOworICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0p
OworICAgICAgICAgICAgICAgIGxvYWRUYXJnZXRGcm9tUHJveHkgPSB0cnVlOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JD
ZWxsKHZtLCBiYXNlQ2VsbCk7CisgICAgICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRUb0Nh
Y2hlKQorICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb247CisKKyAgICAgICAgICAgIC8vIE9w
dGltaXplIHNlbGYgYWNjZXNzLgorICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hlVHlwZSgp
ID09IENhY2hlVHlwZTo6VW5zZXQKKyAgICAgICAgICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxl
VmFsdWUoKQorICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUK
KyAgICAgICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKKyAgICAgICAgICAgICAg
ICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICAgICAg
ICAgICAgICAmJiAhbG9hZFRhcmdldEZyb21Qcm94eSkgeworICAgICAgICAgICAgICAgIGJvb2wg
Z2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmUHJvcGVydHlB
Y2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKKyAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkgeworICAgICAgICAg
ICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBz
bG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIHN0cnVj
dHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hl
ZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9uKGtpbmQp
KTsKKyAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmKGxvY2tlciwg
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNj
ZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluOworCisgICAgICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzbG90LmlzVW5zZXQoKSA/IGludmFsaWRPZmZzZXQgOiBzbG90LmNhY2hl
ZE9mZnNldCgpOworCisgICAgICAgICAgICBpZiAoc2xvdC5pc0N1c3RvbSgpICYmIHNsb3Quc2xv
dEJhc2UoKSA9PSBiYXNlVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAvLyBUbyBjYWNoZSBzZWxm
IGN1c3RvbXMsIHdlIG11c3QgZGlzYWxsb3cgZGljdGlvbmFyaWVzIGJlY2F1c2Ugd2UKKyAgICAg
ICAgICAgICAgICAvLyBuZWVkIHRvIGJlIGluZm9ybWVkIGlmIHRoZSBjdXN0b20gZ29lcyBhd2F5
IHNpbmNlIHdlIGNhY2hlIHRoZQorICAgICAgICAgICAgICAgIC8vIGNvbnN0YW50IGZ1bmN0aW9u
IHBvaW50ZXIuCisKKyAgICAgICAgICAgICAgICBpZiAoIXByZXBhcmVDaGFpbkZvckNhY2hpbmco
Z2xvYmFsT2JqZWN0LCBzbG90LnNsb3RCYXNlKCksIHNsb3Quc2xvdEJhc2UoKSkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0KCkgfHwgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1
ZSkgeworICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkucHJvaGliaXRz
UHJvcGVydHlDYWNoaW5nKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOworCisgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9y
ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUodm0s
IGpzQ2FzdDxKU09iamVjdCo+KGJhc2VDZWxsKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBSZXRyeUNhY2hlTGF0ZXI7IC8vIFdlIG1heSBoYXZlIGNoYW5nZWQgcHJvcGVydHkgb2Zmc2V0
cy4KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc1Vuc2V0
KCkgJiYgc3RydWN0dXJlLT50eXBlSW5mbygpLmdldE93blByb3BlcnR5U2xvdElzSW1wdXJlRm9y
UHJvcGVydHlBYnNlbmNlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOworCisgICAgICAgICAgICAgICAgLy8gSWYgYSBraW5kIGlzIEdldEJ5S2luZDo6QnlJZERp
cmVjdCBvciBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lLCB3ZSBkbyBub3QgbmVlZCB0byBpbnZlc3Rp
Z2F0ZSBwcm90b3R5cGUgY2hhaW5zIGZ1cnRoZXIuCisgICAgICAgICAgICAgICAgLy8gQ2FjaGVh
YmlsaXR5IGp1c3QgZGVwZW5kcyBvbiB0aGUgaGVhZCBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAg
ICAgaWYgKGtpbmQgIT0gR2V0QnlLaW5kOjpCeUlkRGlyZWN0ICYmICFpc1ByaXZhdGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hp
bmcoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghY2FjaGVTdGF0dXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERp
Y3Rpb25hcnkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb3BlcnR5IG9mZnNldHMg
bWF5IGhhdmUgY2hhbmdlZCBkdWUgdG8gZmxhdHRlbmluZy4gV2UnbGwgY2FjaGUgbGF0ZXIuCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2Vz
UG9seVByb3RvKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFp
biA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2Vs
bCwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0No
YWluKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1
c3RvbSgpIHx8IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZSh2bSwgc3Ry
dWN0dXJlKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpID09IG9mZnNldCk7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB1c2Ug
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgaW5zdGVhZCBmb3IgZmFzdGVyIGFjY2Vzc2VzLgor
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOwor
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogTWF5YmUgdGhpcyBgaWZgIHNob3Vs
ZCBiZSBpbnNpZGUgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlCbGFoLgorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE4NTIxNQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRp
b25zRm9yUHJvcGVydHlNaXNzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwg
Y29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLnVpZCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xv
dC5zbG90QmFzZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5h
bWUudWlkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFj
b25kaXRpb25TZXQuaXNWYWxpZCgpIHx8IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigp
Lm9mZnNldCgpID09IG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0
aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgc2xvdC5z
bG90QmFzZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUu
dWlkKCksIHNsb3QuYXR0cmlidXRlcygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBKU0Z1bmN0aW9uKiBnZXR0ZXIgPSBudWxscHRyOworICAgICAgICAgICAgaWYgKHNsb3Qu
aXNDYWNoZWFibGVHZXR0ZXIoKSkKKyAgICAgICAgICAgICAgICBnZXR0ZXIgPSBqc0R5bmFtaWND
YXN0PEpTRnVuY3Rpb24qPih2bSwgc2xvdC5nZXR0ZXJTZXR0ZXIoKS0+Z2V0dGVyKCkpOworCisg
ICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPERPTUF0dHJpYnV0ZUFubm90YXRpb24+IGRvbUF0dHJp
YnV0ZTsKKyAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgc2xvdC5k
b21BdHRyaWJ1dGUoKSkKKyAgICAgICAgICAgICAgICBkb21BdHRyaWJ1dGUgPSBzbG90LmRvbUF0
dHJpYnV0ZSgpOworCisgICAgICAgICAgICBpZiAoa2luZCA9PSBHZXRCeUtpbmQ6OlRyeUJ5SWQp
IHsKKyAgICAgICAgICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGU7CisgICAgICAg
ICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQorICAgICAgICAgICAgICAgICAg
ICB0eXBlID0gQWNjZXNzQ2FzZTo6TG9hZDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzbG90
LmlzVW5zZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6Ok1pc3M7
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQorICAg
ICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6R2V0R2V0dGVyOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKworICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpj
cmVhdGUodm0sIGNvZGVCbG9jaywgdHlwZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVy
ZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRTZXQo
KSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOworICAgICAgICAgICAgfSBlbHNlIGlm
ICghbG9hZFRhcmdldEZyb21Qcm94eSAmJiBnZXR0ZXIgJiYgSW50cmluc2ljR2V0dGVyQWNjZXNz
Q2FzZTo6Y2FuRW1pdEludHJpbnNpY0dldHRlcihzdHViSW5mbywgZ2V0dGVyLCBzdHJ1Y3R1cmUp
KQorICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBJbnRyaW5zaWNHZXR0ZXJBY2Nlc3NDYXNlOjpj
cmVhdGUodm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBz
dHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgZ2V0dGVyLCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0No
YWluKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNQcml2YXRl
KSB7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFzbG90LmlzVW5zZXQoKSk7
CisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGlzUHJveHkgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgbmV3
Q2FzZSA9IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3ND
YXNlOjpMb2FkLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgc3RydWN0dXJlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgY29uZGl0aW9uU2V0LCBpc1Byb3h5LCBzbG90LndhdGNocG9pbnRTZXQoKSwg
V1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOworICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkgfHwgc2xvdC5pc1Vuc2V0KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJsZUFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29k
ZUJsb2NrLCBzbG90LmlzVW5zZXQoKSA/IEFjY2Vzc0Nhc2U6Ok1pc3MgOiBBY2Nlc3NDYXNlOjpM
b2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVj
dHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVByb3h5LCBzbG90LndhdGNocG9pbnRT
ZXQoKSwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgdHlwZTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpHZXR0ZXI7CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHNsb3QuYXR0cmlidXRlcygpICYgUHJvcGVydHlBdHRyaWJ1dGU6
OkN1c3RvbUFjY2Vzc29yKQorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nh
c2U6OkN1c3RvbUFjY2Vzc29yR2V0dGVyOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVHZXR0ZXI7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT0gR2V0QnlLaW5kOjpCeUlkV2l0aFRo
aXMgJiYgdHlwZSA9PSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvckdldHRlciAmJiBkb21BdHRy
aWJ1dGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKwor
ICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3Jl
YXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgdHlwZSwgcHJvcGVy
dHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBsb2FkVGFyZ2V0RnJvbVBy
b3h5LAorICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC53YXRjaHBvaW50U2V0KCksIHNsb3Qu
aXNDYWNoZWFibGVDdXN0b20oKSA/IEZ1bmN0aW9uUHRyPEN1c3RvbUFjY2Vzc29yUHRyVGFnPihz
bG90LmN1c3RvbUdldHRlcigpKSA6IG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBz
bG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYgc2xvdC5zbG90QmFzZSgpICE9IGJhc2VWYWx1ZSA/
IHNsb3Quc2xvdEJhc2UoKSA6IG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBkb21B
dHRyaWJ1dGUsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
OkdldEJ5QWRkQWNjZXNzQ2FzZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCh2bSksIElkZW50
aWZpZXI6OmZyb21VaWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSksIHNsb3Quc2xvdEJhc2UoKSA9
PSBiYXNlVmFsdWUpKTsKKworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNl
KGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgcHJv
cGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVy
YXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlSZXBs
YWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyOjpm
cm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZh
bHVlKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5j
b2RlKCkpOworICAgICAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgICAgICBjYXNlIEdl
dEJ5S2luZDo6QnlJZDoKKyAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkV2l0aFRoaXM6
CisgICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6VHJ5QnlJZDoKKyAgICAgICAgICAgIGNhc2Ug
R2V0QnlLaW5kOjpCeUlkRGlyZWN0OgorICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZh
dGVOYW1lQnlJZDoKKyAgICAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1
bXBJbkFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHVi
Um91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICAgICAgY2FzZSBHZXRC
eUtpbmQ6OlByaXZhdGVOYW1lOgorICAgICAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJl
U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5m
bywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9Cisg
ICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJ
bmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVV
cE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBh
dGNoR2V0QnkoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIEdl
dEJ5S2luZCBraW5kKQoreworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3Bl
KGZhbHNlKTsKKyAgICAKKyAgICBpZiAodHJ5Q2FjaGVHZXRCeShnbG9iYWxPYmplY3QsIGNvZGVC
bG9jaywgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBraW5kKSA9PSBH
aXZlVXBPbkNhY2hlKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8sIGFwcHJvcHJpYXRlR2V0QnlGdW5jdGlvbihraW5kKSk7Cit9CisKKworc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlQXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFs
dWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBpZiAoIWJhc2VW
YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICBpZiAo
IWluZGV4LmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0
IHJlc3VsdDsKKworICAgIHsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tl
cihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpKTsKKworICAgICAgICBKU0Nl
bGwqIGJhc2UgPSBiYXNlVmFsdWUuYXNDZWxsKCk7CisKKyAgICAgICAgQWNjZXNzQ2FzZTo6QWNj
ZXNzVHlwZSBhY2Nlc3NUeXBlOworICAgICAgICBpZiAoYmFzZS0+dHlwZSgpID09IERpcmVjdEFy
Z3VtZW50c1R5cGUpCisgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhl
ZERpcmVjdEFyZ3VtZW50c0xvYWQ7CisgICAgICAgIGVsc2UgaWYgKGJhc2UtPnR5cGUoKSA9PSBT
Y29wZWRBcmd1bWVudHNUeXBlKQorICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6
OkluZGV4ZWRTY29wZWRBcmd1bWVudHNMb2FkOworICAgICAgICBlbHNlIGlmIChiYXNlLT50eXBl
KCkgPT0gU3RyaW5nVHlwZSkKKyAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJ
bmRleGVkU3RyaW5nTG9hZDsKKyAgICAgICAgZWxzZSBpZiAoaXNUeXBlZFZpZXcoYmFzZS0+Y2xh
c3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSkgeworICAgICAgICAgICAgc3dpdGNo
IChiYXNlLT5jbGFzc0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKKyAgICAgICAg
ICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nh
c2U6OkluZGV4ZWRUeXBlZEFycmF5SW50OExvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0g
QWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OExvYWQ7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAgICAgICAg
ICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDhDbGFtcGVk
TG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUludDE2
OgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRB
cnJheUludDE2TG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
VHlwZVVpbnQxNjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5k
ZXhlZFR5cGVkQXJyYXlVaW50MTZMb2FkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vz
c0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5SW50MzJMb2FkOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5
cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQzMkxvYWQ7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICAgICAg
ICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0MzJMb2Fk
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoK
KyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJy
YXlGbG9hdDY0TG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBPcHRpbWl6ZSBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgaW4gSUMKKyAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMK
KyAgICAgICAgICAgIGNhc2UgVHlwZUJpZ0ludDY0OgorICAgICAgICAgICAgY2FzZSBUeXBlQmln
VWludDY0OgorICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSW5kZXhpbmdU
eXBlIGluZGV4aW5nU2hhcGUgPSBiYXNlLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVN
YXNrOworICAgICAgICAgICAgc3dpdGNoIChpbmRleGluZ1NoYXBlKSB7CisgICAgICAgICAgICBj
YXNlIEludDMyU2hhcGU6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6
OkluZGV4ZWRJbnQzMkxvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIERvdWJsZVNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNl
OjpJbmRleGVkRG91YmxlTG9hZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgQ29udGlndW91c1NoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nl
c3NDYXNlOjpJbmRleGVkQ29udGlndW91c0xvYWQ7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEFycmF5U3RvcmFnZVNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQXJyYXlTdG9yYWdlTG9hZDsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXN1
bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgbnVsbHB0ciwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBj
b2RlQmxvY2ssIGFjY2Vzc1R5cGUsIG51bGxwdHIpKTsKKworICAgICAgICBpZiAocmVzdWx0Lmdl
bmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6R2V0QnlS
ZXBsYWNlV2l0aEp1bXAsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVy
KCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNv
ZGUoKSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vz
c05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxh
YmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1Yklu
Zm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5v
dygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNo
QXJyYXlHZXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pCit7CisgICAgaWYgKHRyeUNhY2hlQXJyYXlHZXRCeVZhbChnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgYmFzZSwgaW5kZXgsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQorICAg
ICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkdl
dEJ5VmFsR2VuZXJpYyk7Cit9CisKK3N0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5RnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZz
bG90LCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAgc3dpdGNo
IChwdXRCeUtpbmQpIHsKKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDogeworICAgICAgICBzd2l0
Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAg
ICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZFN0cmljdDsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
Tm9uU3RyaWN0OworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAgIGlm
IChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0U3RyaWN0OworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWRE
aXJlY3ROb25TdHJpY3Q7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxk
RGVmaW5lOgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3Q7Cisg
ICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0OgorICAgICAgICAgICAg
QVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
blB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3Q7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgUHV0QnlLaW5kOjpCeVZhbDogeworICAgICAgICBzd2l0Y2ggKHB1
dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBp
ZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3RHZW5lcmljOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6CisgICAg
ICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljOworICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYzsKKyAgICAgICAgY2FzZSBQ
dXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAgICAgICBBU1NFUlQoc2xv
dC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxE
ZWZpbmVQcml2YXRlRmllbGRHZW5lcmljOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFBy
aXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsK
KyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZEdlbmVy
aWM7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKyAgICAvLyBNYWtl
IHdpbiBwb3J0IGNvbXBpbGVyIGhhcHB5CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlGdW5jdGlvbihjb25zdCBQdXRQcm9w
ZXJ0eVNsb3QgJnNsb3QsIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkKK3sK
KyAgICBzd2l0Y2ggKHB1dEJ5S2luZCkgeworICAgIGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAg
ICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsKKyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6
CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplOworICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsK
KyAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmU6CisgICAgICAg
ICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICBj
YXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKKyAgICAgICAgICAgIEFTU0VSVChz
bG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlk
U2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOgorICAgICAgICBzd2l0Y2ggKHB1dEtpbmQpIHsK
KyAgICAgICAgY2FzZSBQdXRLaW5kOjpOb3REaXJlY3Q6CisgICAgICAgICAgICBpZiAoc2xvdC5p
c1N0cmljdE1vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxT
dHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbE5vblN0
cmljdE9wdGltaXplOworICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdDoKKyAgICAgICAgICAg
IGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplOworICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2lu
ZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNT
dHJpY3RNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5l
UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0
ZUZpZWxkU2V0OgorICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1pemU7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIC8vIE1ha2Ugd2luIHBvcnQg
Y29tcGlsZXIgaGFwcHkKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBudWxscHRyOworfQorCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRC
eShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNW
YWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVudGlm
aWVyIHByb3BlcnR5TmFtZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8sIFB1dEJ5S2luZCBwdXRCeUtpbmQsIFB1dEtpbmQgcHV0S2luZCkK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlv
blJlc3VsdCByZXN1bHQ7CisgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21V
aWQodm0sIHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxPYmplY3QtPnZtKCkp
OworCisgICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAgICAgICBpZiAoIWJhc2VWYWx1
ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAK
KyAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlUHV0KCkgJiYgIXNsb3QuaXNDYWNoZWFibGVD
dXN0b20oKSAmJiAhc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpKQorICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cnkgdG8gZG8g
c29tZXRoaW5nIHNtYXJ0ZXIgaGVyZS4uLgorICAgICAgICBpZiAoaXNDb3B5T25Xcml0ZShvbGRT
dHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOworICAgICAgICAvLyBXZSBjYW4ndCBlbmQgdXAgc3RvcmluZyB0byBhIENvVyBvbiB0aGUg
cHJvdG90eXBlIHNpbmNlIGl0IHNob3VsZG4ndCBvd24gcHJvcGVydGllcy4KKyAgICAgICAgQVNT
RVJUKCFpc0NvcHlPbldyaXRlKHNsb3QuYmFzZSgpLT5pbmRleGluZ01vZGUoKSkpOworCisgICAg
ICAgIGlmICghb2xkU3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICBKU0NlbGwqIGJhc2VD
ZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOworCisgICAgICAgIGJvb2wgaXNQcm94eSA9IGZhbHNl
OworICAgICAgICBpZiAoYmFzZUNlbGwtPnR5cGUoKSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlw
ZSkgeworICAgICAgICAgICAgYmFzZUNlbGwgPSBqc0Nhc3Q8SlNQcm94eSo+KGJhc2VDZWxsKS0+
dGFyZ2V0KCk7CisgICAgICAgICAgICBiYXNlVmFsdWUgPSBiYXNlQ2VsbDsKKyAgICAgICAgICAg
IGlzUHJveHkgPSB0cnVlOworCisgICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgb25seSBjYWNo
ZSBSZXBsYWNlIGFuZCBKUy9DdXN0b20gU2V0dGVycyBvbiBKU1Byb3h5LiBXZSBkb24ndAorICAg
ICAgICAgICAgLy8gY2FjaGUgdHJhbnNpdGlvbnMgYmVjYXVzZSBnbG9iYWwgb2JqZWN0cyB3aWxs
IG5ldmVyIHNoYXJlIHRoZSBzYW1lIHN0cnVjdHVyZQorICAgICAgICAgICAgLy8gaW4gb3VyIGN1
cnJlbnQgaW1wbGVtZW50YXRpb24uCisgICAgICAgICAgICBib29sIGlzQ2FjaGVhYmxlUHJveHkg
PSAoc2xvdC5pc0NhY2hlYWJsZVB1dCgpICYmIHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xv
dDo6RXhpc3RpbmdQcm9wZXJ0eSkKKyAgICAgICAgICAgICAgICB8fCBzbG90LmlzQ2FjaGVhYmxl
U2V0dGVyKCkKKyAgICAgICAgICAgICAgICB8fCBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCk7Cisg
ICAgICAgICAgICBpZiAoIWlzQ2FjaGVhYmxlUHJveHkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNQcm94eSAmJiAocHV0
S2luZCA9PSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRTZXQgfHwgcHV0S2luZCA9PSBQdXRL
aW5kOjpEaXJlY3RQcml2YXRlRmllbGREZWZpbmUpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7CisKKyAgICAgICAgUmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7CisKKyAgICAg
ICAgaWYgKHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSAmJiBzbG90LmlzQ2FjaGVhYmxlUHV0KCkp
IHsKKyAgICAgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OkV4aXN0
aW5nUHJvcGVydHkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGFzc2VydCBoZWxwcyBjYXRj
aCBidWdzIGlmIHdlIGFjY2lkZW50YWxseSBmb3JnZXQgdG8gZGlzYWJsZSBjYWNoaW5nCisgICAg
ICAgICAgICAgICAgLy8gd2hlbiB3ZSB0cmFuc2l0aW9uIHRoZW4gc3RvcmUgdG8gYW4gZXhpc3Rp
bmcgcHJvcGVydHkuIFRoaXMgaXMgY29tbW9uIGFtb25nCisgICAgICAgICAgICAgICAgLy8gcGF0
aHMgdGhhdCByZWlmeSBsYXp5IHByb3BlcnRpZXMuIElmIHdlIHJlaWZ5IGEgbGF6eSBwcm9wZXJ0
eSBhbmQgZm9yZ2V0CisgICAgICAgICAgICAgICAgLy8gdG8gZGlzYWJsZSBjYWNoaW5nLCB3ZSBt
YXkgY29tZSBkb3duIHRoaXMgcGF0aC4gVGhlIFJlcGxhY2UgSUMgZG9lcyBub3QKKyAgICAgICAg
ICAgICAgICAvLyBrbm93IGhvdyB0byBtb2RlbCB0aGVzZSB0eXBlcyBvZiBzdHJ1Y3R1cmUgdHJh
bnNpdGlvbnMgKG9yIGFueSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAvLyB0cmFuc2l0aW9u
IGZvciB0aGF0IG1hdHRlcikuCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZh
bHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pID09IG9sZFN0cnVjdHVyZSk7CisKKyAgICAgICAg
ICAgICAgICBvbGRTdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoc3R1
YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAorICAgICAgICAgICAgICAgICAg
ICAmJiBJbmxpbmVBY2Nlc3M6OmNhbkdlbmVyYXRlU2VsZlByb3BlcnR5UmVwbGFjZShjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBzbG90LmNhY2hlZE9mZnNldCgpKQorICAgICAgICAgICAgICAgICAgICAm
JiAhb2xkU3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkKKyAgICAgICAg
ICAgICAgICAgICAgJiYgIWlzUHJveHkpIHsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGluZSA9IElubGluZUFjY2Vzczo6Z2Vu
ZXJhdGVTZWxmUHJvcGVydHlSZXBsYWNlKGNvZGVCbG9jaywgc3R1YkluZm8sIG9sZFN0cnVjdHVy
ZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0
ZWRDb2RlSW5saW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6
OlB1dEJ5U2VsZlBhdGNoLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5i
YXNlKCkgPT0gYmFzZVZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xv
d1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5
RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5kKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2UobG9ja2VyLCBjb2RlQmxvY2ssIG9sZFN0
cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gUHJveHlh
YmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlJlcGxhY2Us
IHByb3BlcnR5TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb2xkU3RydWN0dXJlLCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCgpLCBpc1Byb3h5KTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKCFpc1Byb3h5KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
c2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoIW9sZFN0cnVjdHVyZS0+aXNPYmplY3QoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgb2xk
IHN0cnVjdHVyZSBpcyBkaWN0aW9uYXJ5LCBpdCBtZWFucyB0aGF0IHRoaXMgaXMgb25lLW9uLW9u
ZSBiZXR3ZWVuIGFuIG9iamVjdCBhbmQgYSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgLy8g
SWYgdGhpcyBpcyBOZXdQcm9wZXJ0eSBvcGVyYXRpb24sIGdlbmVyYXRpbmcgSUMgZm9yIHRoaXMg
ZG9lcyBub3Qgb2ZmZXIgYW55IGJlbmVmaXQgYmVjYXVzZSB0aGlzIHRyYW5zaXRpb24gbmV2ZXIg
aGFwcGVucyBhZ2Fpbi4KKyAgICAgICAgICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKwor
ICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9u
VG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIGlkZW50LmltcGwo
KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpOb25lKSwgb2Zmc2V0
KTsKKyAgICAgICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZSB8fCAhbmV3U3RydWN0dXJlLT5w
cm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICAgICAgLy8gSWYgSlNPYmplY3Q6OnB1dCBp
cyBvdmVycmlkZGVuIGJ5IFVzZXJPYmplY3QsIFVzZXJPYmplY3Q6OnB1dCBwZXJmb3JtcyBzaWRl
LWVmZmVjdCBvbiBKU09iamVjdDo6cHV0LCBhbmQgaXQgbmVnbGVjdHMgdG8gbWFyayB0aGUgUHV0
UHJvcGVydHlTbG90IGFzIG5vbi1jYWNoYWVibGUsCisgICAgICAgICAgICAgICAgLy8gdGhlbiBh
cmJpdHJhcnkgc3RydWN0dXJlIHRyYW5zaXRpb25zIGNhbiBoYXBwZW4gZHVyaW5nIHRoZSBwdXQg
b3BlcmF0aW9uLCBhbmQgdGhpcyBnZW5lcmF0ZXMgd3JvbmcgdHJhbnNpdGlvbiBpbmZvcm1hdGlv
biBoZXJlIGFzIGlmIG9sZFN0cnVjdHVyZSAtPiBuZXdTdHJ1Y3R1cmUuCisgICAgICAgICAgICAg
ICAgLy8gSW4gcmVhbGl0eSwgdGhlIHRyYW5zaXRpb24gaXMgb2xkU3RydWN0dXJlIC0+IHNvbWV0
aGluZyB1bmtub3duIHN0cnVjdHVyZXMgLT4gYmFzZVZhbHVlJ3Mgc3RydWN0dXJlLgorICAgICAg
ICAgICAgICAgIC8vIFRvIGd1YXJkIGFnYWluc3QgdGhlIGVtYmVkZGVyJ3MgcG90ZW50aWFsbHkg
aW5jb3JyZWN0IFVzZXJPYmplY3Q6OnB1dCBpbXBsZW1lbnRhdGlvbiwgd2Ugc2hvdWxkIGNoZWNr
IGZvciB0aGlzIGNvbmRpdGlvbiBhbmQgaWYgZm91bmQsIGFuZCBnaXZlIHVwIG9uIGNhY2hpbmcg
dGhlIHB1dC4KKyAgICAgICAgICAgICAgICBBU1NFUlQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1
Y3R1cmUodm0pID09IG5ld1N0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgaWYgKGJhc2VWYWx1
ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKSAhPSBuZXdTdHJ1Y3R1cmUpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICAgICAgQVNTRVJUKG5l
d1N0cnVjdHVyZS0+cHJldmlvdXNJRCgpID09IG9sZFN0cnVjdHVyZSk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKCFuZXdTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc09iamVjdCgpKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vz
c0NoYWluOworICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRp
dGlvblNldDsKKyAgICAgICAgICAgICAgICBpZiAocHV0S2luZCA9PSBQdXRLaW5kOjpOb3REaXJl
Y3QpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHByZXBhcmVDaGFp
bkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgbnVsbHB0cik7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMt
PnVzZXNQb2x5UHJvdG8pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vz
c0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmplY3QsIGJh
c2VDZWxsLCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG90eXBl
QWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1p
c3MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2Jq
ZWN0LCBuZXdTdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAocHV0S2luZCA9PSBQdXRLaW5kOjpEaXJl
Y3RQcml2YXRlRmllbGREZWZpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlkZW50
LmlzUHJpdmF0ZU5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdl
bmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcyh2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmpl
Y3QsIG5ld1N0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbmV3
Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZVRyYW5zaXRpb24odm0sIGNvZGVCbG9jaywgcHJvcGVy
dHlOYW1lLCBvZmZzZXQsIG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjb25kaXRpb25TZXQs
IFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBzdHViSW5mbyk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHNsb3QuaXND
YWNoZWFibGVTZXR0ZXIoKSkgeworICAgICAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0
b20oKSkgeworICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRp
dGlvblNldDsKKyAgICAgICAgICAgICAgICBSZWZQdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHBy
b3RvdHlwZUFjY2Vzc0NoYWluOworCisgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0
aGlzIGV2ZW4gaWYgd2UncmUgYSBzZWxmIGN1c3RvbSwgc2luY2Ugd2UgbXVzdCBkaXNhbGxvdyBk
aWN0aW9uYXJpZXMKKyAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIHdlIG5lZWQgdG8gYmUgaW5m
b3JtZWQgaWYgdGhlIGN1c3RvbSBnb2VzIGF3YXkgc2luY2Ugd2UgY2FjaGUgdGhlIGNvbnN0YW50
CisgICAgICAgICAgICAgICAgLy8gZnVuY3Rpb24gcG9pbnRlci4KKyAgICAgICAgICAgICAgICBh
dXRvIGNhY2hlU3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJh
c2VDZWxsLCBzbG90LmJhc2UoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgICAg
ICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZVZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRl
KGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QuYmFzZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlv
bnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIG9sZFN0cnVjdHVyZSwgc2xvdC5iYXNl
KCksIGlkZW50LmltcGwoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRl
OjpOb25lKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1Zh
bGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBuZXdDYXNlID0gR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKAorICAgICAgICAg
ICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBzbG90LmlzQ3VzdG9tQWNjZXNzb3IoKSA/IEFjY2Vz
c0Nhc2U6OkN1c3RvbUFjY2Vzc29yU2V0dGVyIDogQWNjZXNzQ2FzZTo6Q3VzdG9tVmFsdWVTZXR0
ZXIsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLAorICAgICAgICAgICAgICAgICAgICBpbnZh
bGlkT2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBp
c1Byb3h5LCBzbG90LmN1c3RvbVNldHRlcigpLnJldGFnZ2VkPEN1c3RvbUFjY2Vzc29yUHRyVGFn
PigpLCBzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUgPyBzbG90LmJhc2UoKSA6IG51bGxwdHIpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc2xvdC5pc0NhY2hl
YWJsZVNldHRlcigpKTsKKyAgICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBjb25kaXRpb25TZXQ7CisgICAgICAgICAgICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0No
YWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbjsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworCisgICAgICAgICAgICAgICAgaWYgKHNs
b3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNhY2hl
U3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBz
bG90LmJhc2UoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGNhY2hlU3RhdHVzLT5mbGF0dGVuZWREaWN0aW9uYXJ5KQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKworICAgICAgICAgICAgICAgICAg
ICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0
ZShnbG9iYWxPYmplY3QsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgYXR0cmlidXRlczsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHByb3Rv
dHlwZUFjY2Vzc0NoYWluLT5zbG90QmFzZVN0cnVjdHVyZSh2bSwgYmFzZUNlbGwtPnN0cnVjdHVy
ZSh2bSkpLT5nZXQodm0sIGlkZW50LmltcGwoKSwgYXR0cmlidXRlcyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSB8fCAhKGF0dHJpYnV0ZXMgJiBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwg
Y29kZUJsb2NrLCBnbG9iYWxPYmplY3QsIG9sZFN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50
LmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1Zh
bGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGNvbmRpdGlvblNldC5zbG90QmFzZUNv
bmRpdGlvbigpLmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvcikpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlv
bigpLm9mZnNldCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0
ZSgKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6U2V0dGVy
LCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQsIFdURk1v
dmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pLCBpc1Byb3h5KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlBZGRBY2Nlc3NDYXNlLCBvbGRT
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7
CisgICAgICAgIAorICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tl
ciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBFQ01BTW9k
ZTo6c3RyaWN0KCkgOiBFQ01BTW9kZTo6c2xvcHB5KCksIHByb3BlcnR5TmFtZSwgV1RGTW92ZShu
ZXdDYXNlKSk7CisKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Cisg
ICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5UmVwbGFjZVdpdGhKdW1wLCBvbGRTdHJ1
Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5iYXNlKCkgPT0gYmFzZVZhbHVlKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwor
CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzcyhjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4o
cmVzdWx0LmNvZGUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRz
QW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisK
KyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJl
dHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNv
bnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQ
dXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCit7CisgICAgU3VwZXJTYW1wbGVy
U2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIAorICAgIGlmICh0cnlDYWNoZVB1
dEJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJv
cGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0QnlLaW5kLCBwdXRLaW5kKSA9PSBHaXZlVXBP
bkNhY2hlKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8s
IGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5RnVuY3Rpb24oc2xvdCwgcHV0QnlLaW5kLCBwdXRLaW5k
KSk7Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUFycmF5UHV0QnlWYWwo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFs
dWUgYmFzZVZhbHVlLCBKU1ZhbHVlIGluZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFB1dEtpbmQpCit7CisgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOworCisgICAgaWYgKCFpbmRleC5pc0ludDMyKCkpCisgICAgICAgIHJl
dHVybiBSZXRyeUNhY2hlTGF0ZXI7CisKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisKKyAgICB7CisgICAgICAgIEpT
Q2VsbCogYmFzZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKKworICAgICAgICBBY2Nlc3NDYXNlOjpB
Y2Nlc3NUeXBlIGFjY2Vzc1R5cGU7CisgICAgICAgIGlmIChpc1R5cGVkVmlldyhiYXNlLT5jbGFz
c0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKSB7CisgICAgICAgICAgICBzd2l0Y2gg
KGJhc2UtPmNsYXNzSW5mbyh2bSktPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAgICAgICAg
ICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2Fz
ZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQ4U3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0g
QWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OFN0b3JlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAgICAgICAg
ICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBl
ZFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlSW50
MTY6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBl
ZEFycmF5SW50MTZTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgVHlwZVVpbnQxNjoKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6
SW5kZXhlZFR5cGVkQXJyYXlVaW50MTZTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDMyU3RvcmU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgICAgICAgICAgYWNj
ZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5VWludDMyU3RvcmU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAg
ICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZsb2F0
MzJTdG9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZUZs
b2F0NjQ6CisgICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRU
eXBlZEFycmF5RmxvYXQ2NFN0b3JlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgLy8gRklYTUU6IE9wdGltaXplIEJpZ0ludDY0QXJyYXkgLyBCaWdVaW50NjRBcnJheSBpbiBJ
QworICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyMTE4MworICAgICAgICAgICAgY2FzZSBUeXBlQmlnSW50NjQ6CisgICAgICAgICAgICBjYXNl
IFR5cGVCaWdVaW50NjQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Cisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJ
bmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSA9IGJhc2UtPmluZGV4aW5nVHlwZSgpICYgSW5kZXhp
bmdTaGFwZU1hc2s7CisgICAgICAgICAgICBzd2l0Y2ggKGluZGV4aW5nU2hhcGUpIHsKKyAgICAg
ICAgICAgIGNhc2UgSW50MzJTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNj
ZXNzQ2FzZTo6SW5kZXhlZEludDMyU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIERvdWJsZVNoYXBlOgorICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkRG91YmxlU3RvcmU7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKKyAgICAgICAgICAgICAgICBhY2Nlc3NU
eXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZENvbnRpZ3VvdXNTdG9yZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXlTdG9yYWdlU2hhcGU6CisgICAgICAgICAg
ICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRBcnJheVN0b3JhZ2VTdG9yZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2Nr
LCBnbG9iYWxPYmplY3QtPnZtKCkpOworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nl
c3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3Qo
KSwgbnVsbHB0ciwgQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIGFjY2Vzc1R5cGUs
IG51bGxwdHIpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsK
KyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6UHV0QnlSZXBsYWNlV2l0aEp1bXAsIGJhc2VW
YWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyKCkpKTsKKworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6
OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywg
c3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQu
Y29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVh
clN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICByZXR1
cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVM
YXRlcjsKK30KKwordm9pZCByZXBhdGNoQXJyYXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGlu
ZGV4LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFB1dEtpbmQgcHV0S2luZCwgRUNNQU1v
ZGUgZWNtYU1vZGUpCit7CisgICAgaWYgKHRyeUNhY2hlQXJyYXlQdXRCeVZhbChnbG9iYWxPYmpl
Y3QsIGNvZGVCbG9jaywgYmFzZSwgaW5kZXgsIHN0dWJJbmZvLCBwdXRLaW5kKSA9PSBHaXZlVXBP
bkNhY2hlKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8s
IHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdEdlbmVyaWMgOiBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE5vblN0cmljdEdlbmVyaWMpIDogKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBvcGVyYXRpb25QdXRC
eVZhbFN0cmljdEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdlbmVyaWMpKTsK
K30KKworc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlRGVsZXRlQnkoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5
U2xvdCYgc2xvdCwgSlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBD
YWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBEZWxCeUtpbmQsIEVDTUFNb2RlIGVjbWFNb2RlKQoreworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKworICAg
IHsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1f
bG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpKTsKKworICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUo
Z2xvYmFsT2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAg
ICAgIEFTU0VSVChvbGRTdHJ1Y3R1cmUpOworICAgICAgICBpZiAoIWJhc2VWYWx1ZS5pc09iamVj
dCgpIHx8ICFvbGRTdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCBv
bGRTdHJ1Y3R1cmUtPmlzUHJveHkoKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OworCisgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZURlbGV0ZSgpKQorICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+
c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKSB7CisgICAgICAgICAgICBpZiAoYmFzZVZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAganNDYXN0PEpTT2Jq
ZWN0Kj4oYmFzZVZhbHVlKS0+ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qodm0pOworICAgICAgICAg
ICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvbGRT
dHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVM
YXRlcjsKKworICAgICAgICBSZWZQdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKKworICAgICAgICBp
ZiAoc2xvdC5pc0RlbGV0ZUhpdCgpKSB7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBuZXdP
ZmZzZXQgPSBpbnZhbGlkT2Zmc2V0OworICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVj
dHVyZUNvbmN1cnJlbnRseShvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZS51aWQoKSwgbmV3T2Zm
c2V0KTsKKyAgICAgICAgICAgIGlmICghbmV3U3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHJl
dHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZS0+cHJv
cGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpIHx8IG5ld1N0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgICAgICBB
U1NFUlQobmV3T2Zmc2V0ID09IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgQVNT
RVJUKG5ld1N0cnVjdHVyZS0+cHJldmlvdXNJRCgpID09IG9sZFN0cnVjdHVyZSk7CisgICAgICAg
ICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT50cmFuc2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25L
aW5kOjpQcm9wZXJ0eURlbGV0aW9uKTsKKyAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUt
PmlzT2JqZWN0KCkpOworICAgICAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQobmV3T2Zmc2V0
KSk7CisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlRGVsZXRlKHZtLCBj
b2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgbmV3T2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVj
dHVyZSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2xvdC5pc05vbmNvbmZpZ3VyYWJsZSgpKSB7Cisg
ICAgICAgICAgICBpZiAoZWNtYU1vZGUuaXNTdHJpY3QoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNy
ZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpEZWxldGVOb25Db25maWd1cmFibGUsIHBy
b3BlcnR5TmFtZSwgaW52YWxpZE9mZnNldCwgb2xkU3RydWN0dXJlLCB7IH0sIG51bGxwdHIpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUo
dm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6RGVsZXRlTWlzcywgcHJvcGVydHlOYW1lLCBpbnZh
bGlkT2Zmc2V0LCBvbGRTdHJ1Y3R1cmUsIHsgfSwgbnVsbHB0cik7CisKKyAgICAgICAgcmVzdWx0
ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2Nr
LCBlY21hTW9kZSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKworICAgICAgICBp
ZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJlc3VsdC5jb2RlKCkpOworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpEZWxCeVJl
cGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcjo6ZnJv
bVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOworICAgICAgICAgICAgSW5saW5lQWNjZXNz
OjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ss
IHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0
LmNvZGUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xl
YXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisKKyAgICBy
ZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2Fj
aGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoRGVsZXRlQnkoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIERlbGV0ZVByb3BlcnR5U2xvdCYgc2xvdCwg
SlNWYWx1ZSBiYXNlVmFsdWUsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFibGVJZGVu
dGlmaWVyIHByb3BlcnR5TmFtZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBEZWxCeUtp
bmQga2luZCwgRUNNQU1vZGUgZWNtYU1vZGUpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3Vw
ZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KworICAgIGlmICh0cnlDYWNoZURlbGV0ZUJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBzbG90
LCBiYXNlVmFsdWUsIG9sZFN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzdHViSW5mbywga2luZCwg
ZWNtYU1vZGUpID09IEdpdmVVcE9uQ2FjaGUpIHsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpE
ZWxCeVJlcGxhY2VXaXRoR2VuZXJpYywgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbChnbG9iYWxP
YmplY3QtPnZtKCkpLCBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkp
KSk7CisgICAgICAgIGlmIChraW5kID09IERlbEJ5S2luZDo6QnlJZCkKKyAgICAgICAgICAgIHJl
cGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uRGVsZXRlQnlJ
ZEdlbmVyaWMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxs
KGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkRlbGV0ZUJ5VmFsR2VuZXJpYyk7CisgICAg
fQorfQorCitpbmxpbmUgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZU9w
dGltaXppbmdJbkJ5RnVuY3Rpb24oSW5CeUtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQp
IHsKKyAgICBjYXNlIEluQnlLaW5kOjpCeUlkOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5C
eUlkT3B0aW1pemU7CisgICAgY2FzZSBJbkJ5S2luZDo6QnlWYWw6CisgICAgICAgIHJldHVybiBv
cGVyYXRpb25JbkJ5VmFsT3B0aW1pemU7CisgICAgY2FzZSBJbkJ5S2luZDo6UHJpdmF0ZU5hbWU6
CisgICAgICAgIHJldHVybiBvcGVyYXRpb25IYXNQcml2YXRlTmFtZU9wdGltaXplOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitpbmxpbmUgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0ZUdlbmVyaWNJbkJ5RnVuY3Rpb24oSW5CeUtp
bmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEluQnlLaW5kOjpCeUlk
OgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5CeUlkR2VuZXJpYzsKKyAgICBjYXNlIEluQnlL
aW5kOjpCeVZhbDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkluQnlWYWxHZW5lcmljOworICAg
IGNhc2UgSW5CeUtpbmQ6OlByaXZhdGVOYW1lOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uSGFz
UHJpdmF0ZU5hbWVHZW5lcmljOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCitzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVJbkJ5KAorICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVj
dCogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsCisgICAgYm9vbCB3YXNG
b3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIEluQnlLaW5kIGtpbmQpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OworICAgIElkZW50aWZpZXIgaWRlbnQg
PSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpOworCisgICAgewor
ICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2Nr
LCB2bSk7CisgICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAgICAgICBpZiAoIWJhc2Ut
PnN0cnVjdHVyZSh2bSktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSB8fCAoIXdhc0Zv
dW5kICYmICFiYXNlLT5zdHJ1Y3R1cmUodm0pLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxl
Rm9yQWJzZW5jZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAg
ICAKKyAgICAgICAgaWYgKHdhc0ZvdW5kKSB7CisgICAgICAgICAgICBpZiAoIXNsb3QuaXNDYWNo
ZWFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1
cmUodm0pOworICAgICAgICAKKyAgICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBw
cm90b3R5cGVBY2Nlc3NDaGFpbjsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQg
Y29uZGl0aW9uU2V0OworICAgICAgICBpZiAod2FzRm91bmQpIHsKKyAgICAgICAgICAgIElubGlu
ZUNhY2hlQWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2UpOworICAgICAgICAg
ICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
YWN0aW9uOworCisgICAgICAgICAgICAvLyBPcHRpbWl6ZSBzZWxmIGFjY2Vzcy4KKyAgICAgICAg
ICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0CisgICAgICAg
ICAgICAgICAgJiYgc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkKKyAgICAgICAgICAgICAgICAmJiBz
bG90LnNsb3RCYXNlKCkgPT0gYmFzZQorICAgICAgICAgICAgICAgICYmICFzbG90LndhdGNocG9p
bnRTZXQoKQorICAgICAgICAgICAgICAgICYmICFzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQoKSkgeworICAgICAgICAgICAgICAgIGJvb2wgZ2VuZXJhdGVkQ29kZUlubGlu
ZSA9IElubGluZUFjY2Vzczo6Z2VuZXJhdGVTZWxmSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5m
bywgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGluZSkg
eworICAgICAgICAgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQnlTZWxmUGF0Y2gsIHN0
cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOwor
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJl
cGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAg
IHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSW5CeUlk
T3B0aW1pemUpOworICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0SW5CeUlkU2VsZihs
b2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0
eU5hbWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNsb3Quc2xv
dEJhc2UoKSAhPSBiYXNlKSB7CisgICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHBy
ZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNlLCBzbG90KTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPmZsYXR0ZW5lZERp
Y3Rpb25hcnkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisK
KyAgICAgICAgICAgICAgICBpZiAoY2FjaGVTdGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKKyAgICAg
ICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJvdG9BY2Nlc3NDaGFp
bjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFzZSwgc2xvdCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghcHJvdG90eXBlQWNjZXNzQ2hhaW4pCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
c2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IHByb3RvdHlwZUFjY2Vzc0NoYWluLT5zbG90QmFz
ZVN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpID09
IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKKyAgICAgICAgICAg
ICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJv
cGVydHlIaXQoCisgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpIHx8IGNvbmRpdGlvblNldC5zbG90
QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpID09IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwg
YmFzZSwgbnVsbHB0cik7CisgICAgICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQorICAgICAgICAg
ICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworCisgICAgICAgICAgICBpZiAoY2FjaGVTdGF0
dXMtPnVzZXNQb2x5UHJvdG8pIHsKKyAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFp
biA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlLCBz
bG90KTsKKyAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWluKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOworICAgICAg
ICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlz
cygKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQu
aXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5BZGRB
Y2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgp
ID09IGJhc2UpKTsKKworICAgICAgICBSZWY8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nh
c2U6OmNyZWF0ZSgKKyAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIHdhc0ZvdW5kID8gQWNjZXNz
Q2FzZTo6SW5IaXQgOiBBY2Nlc3NDYXNlOjpJbk1pc3MsIHByb3BlcnR5TmFtZSwgd2FzRm91bmQg
PyBzbG90LmNhY2hlZE9mZnNldCgpIDogaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRp
b25TZXQsIFdURk1vdmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKKworICAgICAgICByZXN1bHQg
PSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ss
IEVDTUFNb2RlOjpzdHJpY3QoKSwgcHJvcGVydHlOYW1lLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKwor
ICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKKyAgICAgICAgICAgIExP
R19JQygoSUNFdmVudDo6SW5SZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCks
IGlkZW50LCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZSkpOworCisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChyZXN1bHQuY29kZSgpKTsKKyAgICAgICAgICAgIGlmIChraW5kID09IEluQnlLaW5k
OjpCeUlkKQorICAgICAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcElu
QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGlu
ZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91
dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZmly
ZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ss
IHJlc3VsdCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdp
dmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Cit9CisKK3ZvaWQgcmVwYXRjaEluQnkoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0
KiBiYXNlT2JqZWN0LCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgYm9vbCB3YXNG
b3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIEluQnlLaW5kIGtpbmQpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVy
U2NvcGUoZmFsc2UpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIGlm
ICh0cnlDYWNoZUluQnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmplY3QsIHByb3Bl
cnR5TmFtZSwgd2FzRm91bmQsIHNsb3QsIHN0dWJJbmZvLCBraW5kKSA9PSBHaXZlVXBPbkNhY2hl
KSB7CisgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5SZXBsYWNlV2l0aEdlbmVyaWMsIGJhc2VP
YmplY3QtPmNsYXNzSW5mbyhnbG9iYWxPYmplY3QtPnZtKCkpLCBJZGVudGlmaWVyOjpmcm9tVWlk
KHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpKSk7CisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVHZW5lcmljSW5CeUZ1bmN0aW9uKGtpbmQp
KTsKKyAgICB9Cit9CisKK3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUhhc1ByaXZh
dGVCcmFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSlNPYmplY3QqIGJhc2UsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgYm9vbCB3YXNG
b3VuZCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKKyAgICBJ
ZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgYnJhbmRJRC51aWQoKSk7
CisKKyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJs
b2NrLT5tX2xvY2ssIHZtKTsKKyAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVj
dCkpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKworICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7CisKKyAgICAgICAgSW5saW5lQ2Fj
aGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7CisgICAgICAgIGlmIChh
Y3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICByZXR1cm4gYWN0aW9uOworCisg
ICAgICAgIGJvb2wgaXNCYXNlUHJvcGVydHkgPSB0cnVlOworICAgICAgICBMT0dfSUMoKElDRXZl
bnQ6OkluQWRkQWNjZXNzQ2FzZSwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFz
ZVByb3BlcnR5KSk7CisKKyAgICAgICAgUmVmPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3ND
YXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6
IEFjY2Vzc0Nhc2U6OkluTWlzcywgYnJhbmRJRCwgaW52YWxpZE9mZnNldCwgc3RydWN0dXJlLCB7
IH0sIHsgfSk7CisKKyAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2Nr
ZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIGJyYW5kSUQs
IFdURk1vdmUobmV3Q2FzZSkpOworCisgICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNv
ZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJblJlcGxhY2VXaXRoSnVtcCwg
c3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7CisKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOworICAgICAgICAgICAgSW5saW5l
QWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4o
cmVzdWx0LmNvZGUoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZmlyZVdhdGNocG9pbnRz
QW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisK
KyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJl
dHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBhdGNoSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFz
ZU9iamVjdCwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELCBib29sIHdhc0ZvdW5kLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJT
YW1wbGVyU2NvcGUoZmFsc2UpOworCisgICAgaWYgKHRyeUNhY2hlSGFzUHJpdmF0ZUJyYW5kKGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBicmFuZElELCB3YXNGb3VuZCwgc3R1
YkluZm8pID09IEdpdmVVcE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29k
ZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kR2VuZXJpYyk7Cit9CisK
K3N0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUNoZWNrUHJpdmF0ZUJyYW5kKAorICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09i
amVjdCogYmFzZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELAorICAgIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisgICAgSWRlbnRpZmllciBpZGVudCA9
IElkZW50aWZpZXI6OmZyb21VaWQodm0sIGJyYW5kSUQudWlkKCkpOworCisgICAgeworICAgICAg
ICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCB2bSk7
CisgICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQorICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBi
YXNlLT5zdHJ1Y3R1cmUodm0pOworCisgICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbiA9
IGFjdGlvbkZvckNlbGwodm0sIGJhc2UpOworICAgICAgICBpZiAoYWN0aW9uICE9IEF0dGVtcHRU
b0NhY2hlKQorICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjsKKworICAgICAgICBib29sIGlzQmFz
ZVByb3BlcnR5ID0gdHJ1ZTsKKyAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpDaGVja1ByaXZhdGVC
cmFuZEFkZEFjY2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQ
cm9wZXJ0eSkpOworCisgICAgICAgIFJlZjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2Fz
ZTo6Y3JlYXRlQ2hlY2tQcml2YXRlQnJhbmQodm0sIGNvZGVCbG9jaywgYnJhbmRJRCwgc3RydWN0
dXJlKTsKKworICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwg
Z2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgYnJhbmRJRCwgV1RG
TW92ZShuZXdDYXNlKSk7CisKKyAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgp
KSB7CisgICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkNoZWNrUHJpdmF0ZUJyYW5kUmVwbGFj
ZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkp
KTsKKworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUoKSk7CisgICAgICAg
ICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5l
QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaXJl
V2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8sIGNvZGVCbG9jaywg
cmVzdWx0KTsKKworICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBP
bkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOworfQorCit2b2lkIHJlcGF0Y2hDaGVja1ByaXZhdGVC
cmFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SlNPYmplY3QqIGJhc2VPYmplY3QsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2Ft
cGxlclNjb3BlKGZhbHNlKTsKKworICAgIGlmICh0cnlDYWNoZUNoZWNrUHJpdmF0ZUJyYW5kKGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBicmFuZElELCBzdHViSW5mbykgPT0g
R2l2ZVVwT25DYWNoZSkKKyAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0
dWJJbmZvLCBvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZEdlbmVyaWMpOworfQorCitzdGF0aWMg
SW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVTZXRQcml2YXRlQnJhbmQoCisgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBiYXNl
LCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBicmFuZElELAor
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7CisgICAgSWRl
bnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIGJyYW5kSUQudWlkKCkpOwor
CisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9j
ay0+bV9sb2NrLCB2bSk7CisgICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3Qp
KQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAorICAgICAgICBB
U1NFUlQob2xkU3RydWN0dXJlKTsKKworICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSkKKyAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisKKyAgICAgICAg
SW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFzZSk7CisgICAg
ICAgIGlmIChhY3Rpb24gIT0gQXR0ZW1wdFRvQ2FjaGUpCisgICAgICAgICAgICByZXR1cm4gYWN0
aW9uOworICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1
cmU6OnNldEJyYW5kVHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShv
bGRTdHJ1Y3R1cmUsIGJyYW5kSUQudWlkKCkpOworICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZSkK
KyAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7CisgICAgICAgIGlmIChuZXdTdHJ1
Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
CisgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSA9PSBvbGRTdHJ1Y3R1
cmUpOworICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT50cmFuc2l0aW9uS2luZCgpID09IFRy
YW5zaXRpb25LaW5kOjpTZXRCcmFuZCk7CisgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUtPmlz
T2JqZWN0KCkpOworICAgICAgICAKKyAgICAgICAgYm9vbCBpc0Jhc2VQcm9wZXJ0eSA9IHRydWU7
CisgICAgICAgIExPR19JQygoSUNFdmVudDo6U2V0UHJpdmF0ZUJyYW5kQWRkQWNjZXNzQ2FzZSwg
b2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7CisKKyAg
ICAgICAgUmVmPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGVTZXRQcml2
YXRlQnJhbmQodm0sIGNvZGVCbG9jaywgYnJhbmRJRCwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1
cmUpOworCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBn
bG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBicmFuZElELCBXVEZN
b3ZlKG5ld0Nhc2UpKTsKKworICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkp
IHsKKyAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6U2V0UHJpdmF0ZUJyYW5kUmVwbGFjZVdp
dGhKdW1wLCBvbGRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUo
KSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05v
dFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmaXJlV2F0Y2hwb2ludHNBbmRDbGVhclN0dWJJZk5lZWRlZCh2bSwgc3R1YkluZm8s
IGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVV
cE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJldHJ5Q2FjaGVMYXRlcjsKK30KKwordm9pZCByZXBh
dGNoU2V0UHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZU9iamVjdCwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1
cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQoreworICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsK
KworICAgIGlmICh0cnlDYWNoZVNldFByaXZhdGVCcmFuZChnbG9iYWxPYmplY3QsIGNvZGVCbG9j
aywgYmFzZU9iamVjdCwgb2xkU3RydWN0dXJlLCAgYnJhbmRJRCwgc3R1YkluZm8pID09IEdpdmVV
cE9uQ2FjaGUpCisgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5m
bywgb3BlcmF0aW9uU2V0UHJpdmF0ZUJyYW5kR2VuZXJpYyk7Cit9CisKK3N0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZUluc3RhbmNlT2YoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgdmFsdWVWYWx1ZSwgSlNWYWx1
ZSBwcm90b3R5cGVWYWx1ZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIGJvb2wg
d2FzRm91bmQpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEFjY2Vz
c0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OworICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKHZhbHVl
VmFsdWUuaXNDZWxsKCkpOyAvLyBzaG91bGRDb25zaWRlckNhY2hpbmcgcmVqZWN0cyBub24tY2Vs
bHMuCisgICAgCisgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVjdCkpCisgICAgICAg
IHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgIAorICAgIHsKKyAgICAgICAgR0NTYWZlQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgdm0pOworICAgICAgICAKKyAg
ICAgICAgSlNDZWxsKiB2YWx1ZSA9IHZhbHVlVmFsdWUuYXNDZWxsKCk7CisgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gdmFsdWUtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgIFJlZlB0cjxB
Y2Nlc3NDYXNlPiBuZXdDYXNlOworICAgICAgICBKU09iamVjdCogcHJvdG90eXBlID0ganNEeW5h
bWljQ2FzdDxKU09iamVjdCo+KHZtLCBwcm90b3R5cGVWYWx1ZSk7CisgICAgICAgIGlmIChwcm90
b3R5cGUpIHsKKyAgICAgICAgICAgIGlmICghanNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCB2
YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBuZXdDYXNlID0gSW5zdGFuY2VPZkFjY2Vzc0Nhc2U6
OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6
SW5zdGFuY2VPZk1pc3MsIHN0cnVjdHVyZSwgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQoKSwK
KyAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
c3RydWN0dXJlLT5wcm90b3R5cGVRdWVyaWVzQXJlQ2FjaGVhYmxlKCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogVGVhY2ggdGhpcyB0byBkbyBwb2x5IHByb3RvLgorICAgICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU2NjMKKyAg
ICAgICAgICAgICAgICBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgdmFsdWUs
IHdhc0ZvdW5kID8gcHJvdG90eXBlIDogbnVsbHB0cik7CisgICAgICAgICAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9y
SW5zdGFuY2VPZigKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2Jq
ZWN0LCBzdHJ1Y3R1cmUsIHByb3RvdHlwZSwgd2FzRm91bmQpOworCisgICAgICAgICAgICAgICAg
aWYgKGNvbmRpdGlvblNldC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q2Fz
ZSA9IEluc3RhbmNlT2ZBY2Nlc3NDYXNlOjpjcmVhdGUoCisgICAgICAgICAgICAgICAgICAgICAg
ICB2bSwgY29kZUJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgd2FzRm91bmQgPyBBY2Nl
c3NDYXNlOjpJbnN0YW5jZU9mSGl0IDogQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZk1pc3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgcHJvdG90eXBlKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmICghbmV3Q2FzZSkKKyAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpj
cmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6SW5zdGFuY2VPZkdlbmVyaWMsIENhY2hl
YWJsZUlkZW50aWZpZXIoKSk7CisgICAgICAgIAorICAgICAgICBMT0dfSUMoKElDRXZlbnQ6Oklu
c3RhbmNlT2ZBZGRBY2Nlc3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVy
KCkpKTsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2Uo
bG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBudWxs
cHRyLCBXVEZNb3ZlKG5ld0Nhc2UpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChyZXN1bHQuZ2Vu
ZXJhdGVkU29tZUNvZGUoKSkgeworICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbnN0YW5j
ZU9mUmVwbGFjZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBJZGVudGlmaWVyKCkp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmNvZGUo
KSk7CisgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05v
dFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVs
PEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJ
bmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdC5zaG91bGRH
aXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Cit9CisKK3ZvaWQg
cmVwYXRjaEluc3RhbmNlT2YoCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgdmFsdWVWYWx1ZSwgSlNWYWx1ZSBwcm90b3R5cGVW
YWx1ZSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLAorICAgIGJvb2wgd2FzRm91bmQpCit7
CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOworICAgIGlm
ICh0cnlDYWNoZUluc3RhbmNlT2YoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIHZhbHVlVmFsdWUs
IHByb3RvdHlwZVZhbHVlLCBzdHViSW5mbywgd2FzRm91bmQpID09IEdpdmVVcE9uQ2FjaGUpCisg
ICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9u
SW5zdGFuY2VPZkdlbmVyaWMpOworfQorCit2b2lkIGxpbmtEaXJlY3RDYWxsKAorICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBj
YWxsZWVDb2RlQmxvY2ssCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IGNvZGVQdHIpCit7CisgICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1YigpKTsKKyAgICAKKyAg
ICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisK
KyAgICBWTSYgdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7CisgICAgCisgICAgQVNTRVJUKCFj
YWxsTGlua0luZm8uaXNMaW5rZWQoKSk7CisgICAgY2FsbExpbmtJbmZvLnNldENvZGVCbG9jayh2
bSwgY2FsbGVyQ29kZUJsb2NrLCBqc0Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPihjYWxsZWVDb2Rl
QmxvY2spKTsKKyAgICBpZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9j
aykpCisgICAgICAgIGRhdGFMb2coIkxpbmtpbmcgY2FsbCBpbiAiLCBGdWxsQ29kZU9yaWdpbihj
YWxsZXJDb2RlQmxvY2ssIGNhbGxMaW5rSW5mby5jb2RlT3JpZ2luKCkpLCAiIHRvICIsIHBvaW50
ZXJEdW1wKGNhbGxlZUNvZGVCbG9jayksICIsIGVudHJ5cG9pbnQgYXQgIiwgY29kZVB0ciwgIlxu
Iik7CisKKyAgICBjYWxsTGlua0luZm8uc2V0RGlyZWN0Q2FsbFRhcmdldChDb2RlTG9jYXRpb25M
YWJlbDxKU0VudHJ5UHRyVGFnPihjb2RlUHRyKSk7CisKKyAgICBpZiAoY2FsbGVlQ29kZUJsb2Nr
KQorICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbEZyYW1lLCAm
Y2FsbExpbmtJbmZvKTsKK30KKwordm9pZCBsaW5rU2xvd0ZvcihDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCit7CisgICAgQ29kZUJsb2NrKiBjYWxsZXJD
b2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOworICAgIFZN
JiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKKyAgICAKKyAgICBsaW5rU2xvd0Zvcih2bSwg
Y2FsbExpbmtJbmZvKTsKK30KKworc3RhdGljIHZvaWQgbGlua1ZpcnR1YWxGb3IoVk0mIHZtLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCit7CisgICAg
Q2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICBD
b2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKTsKKwor
ICAgIGRhdGFMb2dMbklmKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2sp
LAorICAgICAgICAiTGlua2luZyB2aXJ0dWFsIGNhbGwgYXQgIiwgRnVsbENvZGVPcmlnaW4oY2Fs
bGVyQ29kZUJsb2NrLCBjYWxsZXJGcmFtZS0+Y29kZU9yaWdpbigpKSk7CisKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUU3R1YlJvdXRpbmVQdHJUYWc+IHZpcnR1YWxUaHVuayA9IHZtLmdl
dENUSVZpcnR1YWxDYWxsKGNhbGxMaW5rSW5mby5jYWxsTW9kZSgpKTsKKyAgICByZXZlcnRDYWxs
KHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVuayk7CisgICAgY2FsbExpbmtJbmZvLnNldENs
ZWFyZWRCeVZpcnR1YWwoKTsKK30KKworbmFtZXNwYWNlIHsKK3N0cnVjdCBDYWxsVG9Db2RlUHRy
IHsKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbDsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKK307Cit9IC8vIGFubm9ueW1vdXMgbmFtZXNwYWNl
CisKK3ZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENhbGxW
YXJpYW50IG5ld1ZhcmlhbnQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvLmFs
bG93U3R1YnMoKSk7CisKKyAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5j
YWxsZXJGcmFtZSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKworICAgIC8v
IER1cmluZyBleGVjdXRpb24gb2YgbGlua1BvbHltb3JwaGljQ2FsbCwgd2Ugc3Ryb25nbHkgYXNz
dW1lIHRoYXQgd2UgbmV2ZXIgZG8gR0MuCisgICAgLy8gR0MgamV0dGlzb25zIENvZGVCbG9ja3Ms
IGNoYW5nZXMgQ2FsbExpbmtJbmZvIGV0Yy4gYW5kIGJyZWFrcyBhc3N1bXB0aW9uIGRvbmUgYmVm
b3JlIGFuZCBhZnRlciB0aGlzIGNhbGwuCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDRm9y
QVdoaWxlKHZtKTsKKyAgICAKKyAgICBpZiAoIW5ld1ZhcmlhbnQpIHsKKyAgICAgICAgbGlua1Zp
cnR1YWxGb3Iodm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIE91ciBjYWxsZXIgbXVzdCBiZSBoYXZlIGEgY2VsbCBmb3IgYSBjYWxs
ZWUuIFdoZW4gY2FsbGluZworICAgIC8vIHRoaXMgZnJvbSBXYXNtLCB3ZSBlbnN1cmUgdGhlIGNh
bGxlZSBpcyBhIGNlbGwuCisgICAgQVNTRVJUKGNhbGxlckZyYW1lLT5jYWxsZWUoKS5pc0NlbGwo
KSk7CisKKyAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5jb2Rl
QmxvY2soKTsKKyAgICBib29sIGlzV2ViQXNzZW1ibHkgPSBpc1dlYkFzc2VtYmx5TW9kdWxlKGNh
bGxlckZyYW1lLT5jYWxsZWUoKS5hc0NlbGwoKSk7CisKKyAgICAvLyBXZWJBc3NlbWJseSAtPiBK
UyBzdHVicyBkb24ndCBoYXZlIGEgdmFsaWQgQ29kZUJsb2NrLgorICAgIEpTQ2VsbCogb3duZXIg
PSBpc1dlYkFzc2VtYmx5ID8gd2ViQXNzZW1ibHlPd25lcihjYWxsZXJGcmFtZS0+Y2FsbGVlKCku
YXNDZWxsKCkpIDogY2FsbGVyQ29kZUJsb2NrOworICAgIEFTU0VSVChvd25lcik7CisKKyAgICBD
YWxsVmFyaWFudExpc3QgbGlzdDsKKyAgICBpZiAoUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUq
IHN0dWIgPSBjYWxsTGlua0luZm8uc3R1YigpKQorICAgICAgICBsaXN0ID0gc3R1Yi0+dmFyaWFu
dHMoKTsKKyAgICBlbHNlIGlmIChKU09iamVjdCogb2xkQ2FsbGVlID0gY2FsbExpbmtJbmZvLmNh
bGxlZSgpKQorICAgICAgICBsaXN0ID0gQ2FsbFZhcmlhbnRMaXN0IHsgQ2FsbFZhcmlhbnQob2xk
Q2FsbGVlKSB9OworICAgIAorICAgIGxpc3QgPSB2YXJpYW50TGlzdFdpdGhWYXJpYW50KGxpc3Qs
IG5ld1ZhcmlhbnQpOworCisgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBjbG9zdXJlIGNhbGxzIHRo
ZW4gaXQgbWFrZXMgc2Vuc2UgdG8gdHJlYXQgYWxsIG9mIHRoZW0gYXMgY2xvc3VyZSBjYWxscy4K
KyAgICAvLyBUaGlzIG1ha2VzIHN3aXRjaGluZyBvbiBjYWxsZWUgY2hlYXBlci4gSXQgYWxzbyBw
cm9kdWNlcyBwcm9maWxpbmcgdGhhdCdzIGVhc2llciBvbiB0aGUgREZHOworICAgIC8vIHRoZSBE
RkcgZG9lc24ndCByZWFsbHkgd2FudCB0byBkZWFsIHdpdGggYSBjb21iaW5hdGlvbiBvZiBjbG9z
dXJlIGFuZCBub24tY2xvc3VyZSBjYWxsZWVzLgorICAgIGJvb2wgaXNDbG9zdXJlQ2FsbCA9IGZh
bHNlOworICAgIGZvciAoQ2FsbFZhcmlhbnQgdmFyaWFudCA6IGxpc3QpICB7CisgICAgICAgIGlm
ICh2YXJpYW50LmlzQ2xvc3VyZUNhbGwoKSkgeworICAgICAgICAgICAgbGlzdCA9IGRlc3BlY2lm
aWVkVmFyaWFudExpc3QobGlzdCk7CisgICAgICAgICAgICBpc0Nsb3N1cmVDYWxsID0gdHJ1ZTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChpc0Ns
b3N1cmVDYWxsKQorICAgICAgICBjYWxsTGlua0luZm8uc2V0SGFzU2VlbkNsb3N1cmUoKTsKKyAg
ICAKKyAgICBWZWN0b3I8UG9seW1vcnBoaWNDYWxsQ2FzZT4gY2FsbENhc2VzOworICAgIFZlY3Rv
cjxpbnQ2NF90PiBjYXNlVmFsdWVzOworICAgIAorICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCBvdXIg
Y2FzZXMgYXJlLgorICAgIGZvciAoQ2FsbFZhcmlhbnQgdmFyaWFudCA6IGxpc3QpIHsKKyAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOworICAgICAgICBpZiAodmFyaWFudC5l
eGVjdXRhYmxlKCkgJiYgIXZhcmlhbnQuZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigpKSB7
CisgICAgICAgICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IHZhcmlhbnQuZXhlY3V0
YWJsZSgpOworICAgICAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KGV4ZWN1dGFibGUpLT5jb2RlQmxvY2tGb3JDYWxsKCk7CisgICAgICAgICAgICAvLyBJZiB3
ZSBjYW5ub3QgaGFuZGxlIGEgY2FsbGVlLCBlaXRoZXIgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEg
Q29kZUJsb2NrIG9yIGJlY2F1c2UgYXJpdHkgbWlzbWF0Y2gsCisgICAgICAgICAgICAvLyBhc3N1
bWUgdGhhdCBpdCdzIGJldHRlciBmb3IgdGhpcyB3aG9sZSB0aGluZyB0byBiZSBhIHZpcnR1YWwg
Y2FsbC4KKyAgICAgICAgICAgIGlmICghY29kZUJsb2NrIHx8IGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1Q
YXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby5pc1ZhcmFyZ3MoKSkgeworICAgICAgICAgICAg
ICAgIGxpbmtWaXJ0dWFsRm9yKHZtLCBjYWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW50
NjRfdCBuZXdDYXNlVmFsdWUgPSAwOworICAgICAgICBpZiAoaXNDbG9zdXJlQ2FsbCkgeworICAg
ICAgICAgICAgbmV3Q2FzZVZhbHVlID0gYml0d2lzZV9jYXN0PGludHB0cl90Pih2YXJpYW50LmV4
ZWN1dGFibGUoKSk7CisgICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgYWRkIGEgZmFzdCBw
YXRoIGZvciBJbnRlcm5hbEZ1bmN0aW9uIHdpdGggY2xvc3VyZSBjYWxsLgorICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTMxMQorICAgICAg
ICAgICAgaWYgKCFuZXdDYXNlVmFsdWUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoYXV0byogZnVuY3Rpb24gPSB2YXJpYW50LmZ1
bmN0aW9uKCkpCisgICAgICAgICAgICAgICAgbmV3Q2FzZVZhbHVlID0gYml0d2lzZV9jYXN0PGlu
dHB0cl90PihmdW5jdGlvbik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbmV3
Q2FzZVZhbHVlID0gYml0d2lzZV9jYXN0PGludHB0cl90Pih2YXJpYW50LmludGVybmFsRnVuY3Rp
b24oKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKKyAgICAg
ICAgICAgIGlmIChjYXNlVmFsdWVzLmNvbnRhaW5zKG5ld0Nhc2VWYWx1ZSkpIHsKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJFUlJPUjogQXR0ZW1wdCB0byBhZGQgZHVwbGljYXRlIGNhc2UgdmFs
dWUuXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJFeGlzdGluZyBjYXNlIHZhbHVlczog
Iik7CisgICAgICAgICAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICAgICAgICAg
IGZvciAoYXV0byYgdmFsdWUgOiBjYXNlVmFsdWVzKQorICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKGNvbW1hLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJBdHRlbXB0aW5nIHRvIGFkZDogIiwgbmV3Q2FzZVZhbHVlLCAi
XG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJWYXJpYW50IGxpc3Q6ICIsIGxpc3REdW1w
KGNhbGxDYXNlcyksICJcbiIpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjYWxsQ2FzZXMu
YXBwZW5kKFBvbHltb3JwaGljQ2FsbENhc2UodmFyaWFudCwgY29kZUJsb2NrKSk7CisgICAgICAg
IGNhc2VWYWx1ZXMuYXBwZW5kKG5ld0Nhc2VWYWx1ZSk7CisgICAgfQorICAgIEFTU0VSVChjYWxs
Q2FzZXMuc2l6ZSgpID09IGNhc2VWYWx1ZXMuc2l6ZSgpKTsKKworICAgIC8vIElmIHdlIGFyZSBv
dmVyIHRoZSBsaW1pdCwganVzdCB1c2UgYSBub3JtYWwgdmlydHVhbCBjYWxsLgorICAgIHVuc2ln
bmVkIG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZTsKKyAgICBpZiAoaXNXZWJBc3Nl
bWJseSkKKyAgICAgICAgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplID0gT3B0aW9u
czo6bWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplRm9yV2ViQXNzZW1ibHlUb0pTKCk7
CisgICAgZWxzZSBpZiAoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6dG9w
VGllckpJVCgpKQorICAgICAgICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUgPSBP
cHRpb25zOjptYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemVGb3JUb3BUaWVyKCk7Cisg
ICAgZWxzZQorICAgICAgICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUgPSBPcHRp
b25zOjptYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUoKTsKKworICAgIC8vIFdlIHVz
ZSBsaXN0LnNpemUoKSBpbnN0ZWFkIG9mIGNhbGxDYXNlcy5zaXplKCkgYmVjYXVzZSB3ZSByZXNw
ZWN0IENhbGxWYXJpYW50IHNpemUgZm9yIG5vdy4KKyAgICBpZiAobGlzdC5zaXplKCkgPiBtYXhQ
b2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUpIHsKKyAgICAgICAgbGlua1ZpcnR1YWxGb3Io
dm0sIGNhbGxGcmFtZSwgY2FsbExpbmtJbmZvKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIFZlY3RvcjxDYWxsVG9Db2RlUHRyPiBjYWxscyhjYWxsQ2FzZXMuc2l6ZSgpKTsKKyAgICBV
bmlxdWVBcnJheTx1aW50MzJfdD4gZmFzdENvdW50czsKKworICAgIGlmICghaXNXZWJBc3NlbWJs
eSAmJiBjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRDb2RlOjp0b3BUaWVySklUKCkp
IHsKKyAgICAgICAgZmFzdENvdW50cyA9IG1ha2VVbmlxdWVBcnJheTx1aW50MzJfdD4oY2FsbENh
c2VzLnNpemUoKSk7CisgICAgICAgIG1lbXNldChmYXN0Q291bnRzLmdldCgpLCAwLCBjYWxsQ2Fz
ZXMuc2l6ZSgpICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgfQorICAgIAorICAgIEdQUlJlZyBj
YWxsZWVHUFIgPSBjYWxsTGlua0luZm8uY2FsbGVlR1BSKCk7CisKKyAgICBib29sIGlzRGF0YUlD
ID0gY2FsbExpbmtJbmZvLmlzRGF0YUlDKCk7CisgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQoY2Fs
bGVyQ29kZUJsb2NrKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlcj4g
ZnJhbWVTaHVmZmxlcjsKKyAgICBpZiAoY2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEoKSkg
eworICAgICAgICBBU1NFUlQoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSk7CisgICAgICAgIGZy
YW1lU2h1ZmZsZXIgPSBtYWtlVW5pcXVlPENhbGxGcmFtZVNodWZmbGVyPihzdHViSml0LCAqY2Fs
bExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEoKSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICAgICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlz
IGEgY2VsbCwgYW5kIHdlIGNhbgorICAgICAgICAvLyB1c2UgdGhlIGFkZGl0aW9uYWwgcmVnaXN0
ZXIgdGhpcyBidXlzIHVzLgorICAgICAgICBmcmFtZVNodWZmbGVyLT5hc3N1bWVDYWxsZWVJc0Nl
bGwoKTsKKyNlbmRpZgorICAgICAgICBmcmFtZVNodWZmbGVyLT5sb2NrR1BSKGNhbGxlZUdQUik7
CisgICAgfQorCisgICAgR1BSUmVnIGNvbXBhcmlzb25WYWx1ZUdQUjsKKyAgICBpZiAoaXNDbG9z
dXJlQ2FsbCkgeworICAgICAgICBpZiAoZnJhbWVTaHVmZmxlcikKKyAgICAgICAgICAgIGNvbXBh
cmlzb25WYWx1ZUdQUiA9IGZyYW1lU2h1ZmZsZXItPmFjcXVpcmVHUFIoKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxl
Y3RTY3JhdGNoR1BSKGNhbGxlZUdQUik7CisgICAgfSBlbHNlCisgICAgICAgIGNvbXBhcmlzb25W
YWx1ZUdQUiA9IGNhbGxlZUdQUjsKKworICAgIEdQUlJlZyBmYXN0Q291bnRzQmFzZUdQUjsKKyAg
ICBpZiAoZnJhbWVTaHVmZmxlcikKKyAgICAgICAgZmFzdENvdW50c0Jhc2VHUFIgPSBmcmFtZVNo
dWZmbGVyLT5hY3F1aXJlR1BSKCk7CisgICAgZWxzZSB7CisgICAgICAgIGZhc3RDb3VudHNCYXNl
R1BSID0KKyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihjYWxs
ZWVHUFIsIGNvbXBhcmlzb25WYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDMpOworICAgIH0KKyAgICBz
dHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGZhc3RDb3VudHMuZ2V0KCkp
LCBmYXN0Q291bnRzQmFzZUdQUik7CisKKyAgICBpZiAoIWZyYW1lU2h1ZmZsZXIgJiYgY2FsbExp
bmtJbmZvLmlzVGFpbENhbGwoKSkgeworICAgICAgICAvLyBXZSBzdHJvbmdseSBhc3N1bWUgdGhh
dCBjYWxsZWVHUFIgaXMgbm90IGEgY2FsbGVlIHNhdmUgcmVnaXN0ZXIgaW4gdGhlIHNsb3cgcGF0
aC4KKyAgICAgICAgQVNTRVJUKCFjYWxsZXJDb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMo
KS0+ZmluZChjYWxsZWVHUFIpKTsKKyAgICAgICAgc3R1YkppdC5lbWl0UmVzdG9yZUNhbGxlZVNh
dmVzKCk7CisgICAgfQorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAg
ICBpZiAoaXNDbG9zdXJlQ2FsbCkgeworICAgICAgICAvLyBWZXJpZnkgdGhhdCB3ZSBoYXZlIGEg
ZnVuY3Rpb24gYW5kIHN0YXNoIHRoZSBleGVjdXRhYmxlIGluIHNjcmF0Y2hHUFIuCisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpCisgICAg
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hJZk5vdENlbGwoY2FsbGVlR1BS
LCBEb05vdEhhdmVUYWdSZWdpc3RlcnMpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2xv
d1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoSWZOb3RDZWxsKGNhbGxlZUdQUikpOworI2Vsc2UK
KyAgICAgICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVl
IGlzIGEgY2VsbC4KKyNlbmRpZgorICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgYWRkIGEgZmFz
dCBwYXRoIGZvciBJbnRlcm5hbEZ1bmN0aW9uIHdpdGggY2xvc3VyZSBjYWxsLgorICAgICAgICBz
bG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hJZk5vdEZ1bmN0aW9uKGNhbGxlZUdQUikpOwor
CisgICAgICAgIHN0dWJKaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BS
LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGVPclJhcmVEYXRhKCkpLCBjb21wYXJpc29u
VmFsdWVHUFIpOworICAgICAgICBhdXRvIGhhc0V4ZWN1dGFibGUgPSBzdHViSml0LmJyYW5jaFRl
c3RQdHIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBjb21wYXJpc29uVmFsdWVHUFIsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb246OnJhcmVEYXRhVGFnKSk7CisgICAgICAgIHN0dWJK
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY29tcGFyaXNvblZhbHVlR1BSLCBGdW5j
dGlvblJhcmVEYXRhOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSAtIEpTRnVuY3Rpb246OnJhcmVEYXRh
VGFnKSwgY29tcGFyaXNvblZhbHVlR1BSKTsKKyAgICAgICAgaGFzRXhlY3V0YWJsZS5saW5rKCZz
dHViSml0KTsKKyAgICB9CisKKyAgICBCaW5hcnlTd2l0Y2ggYmluYXJ5U3dpdGNoKGNvbXBhcmlz
b25WYWx1ZUdQUiwgY2FzZVZhbHVlcywgQmluYXJ5U3dpdGNoOjpJbnRQdHIpOworICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3QgZG9uZTsKKyAgICB3aGlsZSAoYmluYXJ5U3dpdGNoLmFkdmFuY2Uo
c3R1YkppdCkpIHsKKyAgICAgICAgc2l6ZV90IGNhc2VJbmRleCA9IGJpbmFyeVN3aXRjaC5jYXNl
SW5kZXgoKTsKKyAgICAgICAgCisgICAgICAgIENhbGxWYXJpYW50IHZhcmlhbnQgPSBjYWxsQ2Fz
ZXNbY2FzZUluZGV4XS52YXJpYW50KCk7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKKyAgICAgICAgaWYgKHZhcmlhbnQuZXhl
Y3V0YWJsZSgpKSB7CisgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5leGVjdXRhYmxlKCktPmhh
c0pJVENvZGVGb3JDYWxsKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBjb2RlUHRyID0g
anNUb1dhc21JQ0NvZGVQdHIodm0sIGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlvbktpbmQoKSwg
dmFyaWFudC5mdW5jdGlvbigpKTsKKyAgICAgICAgICAgIGlmICghY29kZVB0cikKKyAgICAgICAg
ICAgICAgICBjb2RlUHRyID0gdmFyaWFudC5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVG
b3JDYWxsKCktPmFkZHJlc3NGb3JDYWxsKEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5pbnRlcm5hbEZ1bmN0aW9uKCkp
OworICAgICAgICAgICAgY29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9s
aW5lRm9yKENvZGVGb3JDYWxsKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGZh
c3RDb3VudHMpIHsKKyAgICAgICAgICAgIHN0dWJKaXQuYWRkMzIoCisgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGZhc3RDb3VudHNCYXNlR1BSLCBjYXNlSW5kZXggKiBzaXplb2YodWludDMy
X3QpKSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIG5lZWRzRG9uZUp1bXAgPSBmYWxzZTsK
KyAgICAgICAgaWYgKGZyYW1lU2h1ZmZsZXIpIHsKKyAgICAgICAgICAgIENhbGxGcmFtZVNodWZm
bGVyKHN0dWJKaXQsIGZyYW1lU2h1ZmZsZXItPnNuYXBzaG90KCkpLnByZXBhcmVGb3JUYWlsQ2Fs
bCgpOworICAgICAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyVGFp
bENhbGwoKTsKKyAgICAgICAgfSBlbHNlIGlmIChjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7
CisgICAgICAgICAgICBzdHViSml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKKyAgICAgICAg
ICAgIGNhbGxzW2Nhc2VJbmRleF0uY2FsbCA9IHN0dWJKaXQubmVhclRhaWxDYWxsKCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaXNEYXRhSUMpCisgICAgICAgICAgICAgICAg
Y2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyVGFpbENhbGwoKTsKKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY2FsbCA9IHN0dWJK
aXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICBuZWVkc0RvbmVKdW1wID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNvZGVQdHIg
PSBjb2RlUHRyOworICAgICAgICBpZiAobmVlZHNEb25lSnVtcCkgeworICAgICAgICAgICAgQVNT
RVJUKCFpc0RhdGFJQyk7CisgICAgICAgICAgICBkb25lLmFwcGVuZChzdHViSml0Lmp1bXAoKSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc2xvd1BhdGgubGluaygmc3R1YkppdCk7Cisg
ICAgYmluYXJ5U3dpdGNoLmZhbGxUaHJvdWdoKCkubGluaygmc3R1YkppdCk7CisKKyAgICBpZiAo
ZnJhbWVTaHVmZmxlcikgeworICAgICAgICBmcmFtZVNodWZmbGVyLT5yZWxlYXNlR1BSKGNhbGxl
ZUdQUik7CisgICAgICAgIGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VHUFIoY29tcGFyaXNvblZhbHVl
R1BSKTsKKyAgICAgICAgZnJhbWVTaHVmZmxlci0+cmVsZWFzZUdQUihmYXN0Q291bnRzQmFzZUdQ
Uik7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgZnJhbWVTaHVmZmxlci0+c2V0Q2Fs
bGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1Qw
KSk7CisjZWxzZQorICAgICAgICBmcmFtZVNodWZmbGVyLT5zZXRDYWxsZWVKU1ZhbHVlUmVncyhK
U1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMCkpOworI2VuZGlmCisgICAgICAgIGZyYW1lU2h1ZmZs
ZXItPnByZXBhcmVGb3JTbG93UGF0aCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0dWJKaXQu
bW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQor
ICAgICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKKyNlbmRpZgorICAgIH0KKyAgICBzdHViSml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIEdQUkluZm86OnJl
Z1QzKTsKKyAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjYWxs
TGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICAvLyAxLiBJZiBpdCBpcyBub3QgRGF0
YUlDLCBsaW5rUmVnaXN0ZXIgaXMgbm90IHBvaW50aW5nIHRoZSBkb25lTG9jYXRpb24uCisgICAg
Ly8gMi4gSWYgaXQgaXMgdGFpbC1jYWxsLCBsaW5rUmVnaXN0ZXIgaXMgbm90IHBvaW50aW5nIHRo
ZSBkb25lTG9jYXRpb24gZm9yIHNsb3ctY2FsbCBjYXNlLiBCdXQgc2luY2Ugd2UgYXJlIG5vdCBl
eGVjdXRpbmcgcHJlcGFyZUZvclRhaWxDYWxsLCB3ZSBzdGlsbCBzdGFjayBlbnRyaWVzIGZvciB0
aGUgY2FsbGVyJ3MgZnJhbWUuCisgICAgLy8gMy4gSWYgd2UncmUgYSBkYXRhIElDLCB0aGVuIHRo
ZSByZXR1cm4gYWRkcmVzcyBpcyBhbHJlYWR5IGNvcnJlY3QKKyAgICAvLyBUaHVzIHdlIG5lZWQg
dG8gcHV0IGl0IGZvciB0aGUgc2xvdy1wYXRoIGNhbGwuCisgICAgaWYgKCFpc0RhdGFJQykgewor
ICAgICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5r
SW5mby5kb25lTG9jYXRpb24oKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZv
OjpyZWdUNCk7CisgICAgICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1
cm4oR1BSSW5mbzo6cmVnVDQpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBh
cmUgbm90IGRvaW5nIGEgcmVhbCB0YWlsLWNhbGwgaW4gdGhpcyBjYXNlLiBXZSBsZWF2ZSBzdGFj
ayBlbnRyaWVzIGluIHRoZSBjYWxsZXIsIGFuZCB3ZSBhcmUgbm90IHJ1bm5pbmcgcHJlcGFyZUZv
clRhaWxDYWxsLCB0aHVzLAorICAgICAgICAvLyB3ZSB3aWxsIHJldHVybiB0byB0aGUgY2FsbGVy
IGFmdGVyIHRoZSBjYWxsZWUgZmluaXNoZXMuIFdlIHNob3VsZCBtYWtlIGl0IGEgcmVhbCB0YWls
LWNhbGwgZm9yIHRoaXMgc2xvdyBwYXRoIGNhc2UuCisgICAgICAgIGlmIChjYWxsTGlua0luZm8u
aXNUYWlsQ2FsbCgpKSB7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgICAgIC8vIEl0IG5l
ZWRzIHRvIGJlIExMSW50IG9yIEJhc2VsaW5lIHNpbmNlIHdlIGFyZSB1c2luZyByZXR1cm5Gcm9t
QmFzZWxpbmVHZW5lcmF0b3IuCisgICAgICAgICAgICBpZiAoIWlzV2ViQXNzZW1ibHkpCisgICAg
ICAgICAgICAgICAgQVNTRVJUKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJs
b2NrLT5qaXRUeXBlKCkpKTsKKyNlbmRpZgorICAgICAgICAgICAgc3R1YkppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cih2bS5nZXRDVElTdHViKEpJVDo6cmV0dXJuRnJvbUJhc2Vs
aW5lR2VuZXJhdG9yKS5jb2RlKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5m
bzo6cmVnVDQpOworICAgICAgICAgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9y
ZVJldHVybihHUFJJbmZvOjpyZWdUNCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBc3NlbWJs
eUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVtcCgpOworICAgICAgICAKKyAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKHN0dWJKaXQsIG93bmVyLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJ
bmxpbmVDYWNoZSwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBpZiAocGF0Y2hCdWZmZXIu
ZGlkRmFpbFRvQWxsb2NhdGUoKSkgeworICAgICAgICBsaW5rVmlydHVhbEZvcih2bSwgY2FsbEZy
YW1lLCBjYWxsTGlua0luZm8pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJF
TEVBU0VfQVNTRVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2FsbHMuc2l6ZSgpKTsKKyAgICBmb3Ig
KENhbGxUb0NvZGVQdHIgY2FsbFRvQ29kZVB0ciA6IGNhbGxzKSB7CisjaWYgQ1BVKEFSTV9USFVN
QjIpCisgICAgICAgIC8vIFRhaWwgY2FsbCBzcGVjaWFsLWNhc2luZyBlbnN1cmVzIHByb3BlciBs
aW5raW5nIG9uIEFSTSBUaHVtYjIsIHdoZXJlIGEgdGFpbCBjYWxsIGp1bXBzIHRvIGFuIGFkZHJl
c3MKKyAgICAgICAgLy8gd2l0aCBhIG5vbi1kZWNvcmF0ZWQgYm90dG9tIGJpdCBidXQgYSBub3Jt
YWwgY2FsbCBjYWxscyBhbiBhZGRyZXNzIHdpdGggYSBkZWNvcmF0ZWQgYm90dG9tIGJpdC4KKyAg
ICAgICAgYm9vbCBpc1RhaWxDYWxsID0gY2FsbFRvQ29kZVB0ci5jYWxsLmlzRmxhZ1NldChDQ2Fs
bEhlbHBlcnM6OkNhbGw6OlRhaWwpOworICAgICAgICB2b2lkKiB0YXJnZXQgPSBpc1RhaWxDYWxs
ID8gY2FsbFRvQ29kZVB0ci5jb2RlUHRyLmRhdGFMb2NhdGlvbigpIDogY2FsbFRvQ29kZVB0ci5j
b2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2Fs
bFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cjxKU0VudHJ5UHRyVGFnPihNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNFbnRyeVB0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyh0YXJn
ZXQpKSk7CisjZWxzZQorICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIuY2Fs
bCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oY2FsbFRvQ29kZVB0ci5jb2RlUHRyKSk7Cisj
ZW5kaWYKKyAgICB9CisKKyAgICBpZiAoIWRvbmUuZW1wdHkoKSkgeworICAgICAgICBBU1NFUlQo
IWlzRGF0YUlDKTsKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8u
ZG9uZUxvY2F0aW9uKCkpOworICAgIH0KKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVM
b2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFnPih2bS5nZXRDVElTdHViKGxpbmtQb2x5bW9ycGhp
Y0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgCisgICAgYXV0byBzdHViUm91dGlu
ZSA9IGFkb3B0UmVmKCpuZXcgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUoCisgICAgICAgIEZJ
TkFMSVpFX0NPREVfRk9SKAorICAgICAgICAgICAgY2FsbGVyQ29kZUJsb2NrLCBwYXRjaEJ1ZmZl
ciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCisgICAgICAgICAgICAiUG9seW1vcnBoaWMgY2FsbCBz
dHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXRzICVzIiwKKyAgICAgICAgICAgICAg
ICBpc1dlYkFzc2VtYmx5ID8gIldlYkFzc2VtYmx5IiA6IHRvQ1N0cmluZygqY2FsbGVyQ29kZUJs
b2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5kb25lTG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVz
cygpLAorICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhsaXN0RHVtcChjYWxsQ2FzZXMpKS5kYXRh
KCkpLAorICAgICAgICB2bSwgb3duZXIsIGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKSwgY2FsbExp
bmtJbmZvLCBjYWxsQ2FzZXMsCisgICAgICAgIFdURk1vdmUoZmFzdENvdW50cykpKTsKKworICAg
IC8vIFRoZSBvcmlnaW5hbCBzbG93IHBhdGggaXMgdW5yZWFjaGFibGUgb24gNjQtYml0cywgYnV0
IHN0aWxsCisgICAgLy8gcmVhY2hhYmxlIG9uIDMyLWJpdHMgc2luY2UgYSBub24tY2VsbCBjYWxs
ZWUgd2lsbCBhbHdheXMKKyAgICAvLyB0cmlnZ2VyIHRoZSBzbG93IHBhdGgKKyAgICBsaW5rU2xv
d0Zvcih2bSwgY2FsbExpbmtJbmZvKTsKKworICAgIC8vIElmIHRoZXJlIGhhZCBiZWVuIGEgcHJl
dmlvdXMgc3R1YiByb3V0aW5lLCB0aGF0IG9uZSB3aWxsIGRpZSBhcyBzb29uIGFzIHRoZSBHQyBy
dW5zIGFuZCBzZWVzCisgICAgLy8gdGhhdCBpdCdzIG5vIGxvbmdlciBvbiBzdGFjay4KKyAgICBj
YWxsTGlua0luZm8uc2V0U3R1YihXVEZNb3ZlKHN0dWJSb3V0aW5lKSk7CisgICAgCisgICAgLy8g
VGhlIGNhbGwgbGluayBpbmZvIG5vIGxvbmdlciBoYXMgYSBjYWxsIGNhY2hlIGFwYXJ0IGZyb20g
dGhlIGp1bXAgdG8gdGhlIHBvbHltb3JwaGljIGNhbGwKKyAgICAvLyBzdHViLgorICAgIGlmIChj
YWxsTGlua0luZm8uaXNPbkxpc3QoKSkKKyAgICAgICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOwor
fQorCit2b2lkIHJlc2V0R2V0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbywgR2V0QnlLaW5kIGtpbmQpCit7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2Fs
bChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdHZXRCeUZ1bmN0aW9u
KGtpbmQpKTsKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZDoK
KyAgICBjYXNlIEdldEJ5S2luZDo6QnlJZFdpdGhUaGlzOgorICAgIGNhc2UgR2V0QnlLaW5kOjpU
cnlCeUlkOgorICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlkRGlyZWN0OgorICAgIGNhc2UgR2V0QnlL
aW5kOjpQcml2YXRlTmFtZUJ5SWQ6CisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNK
dW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR2V0QnlLaW5kOjpCeVZhbDoKKyAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6Cisg
ICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGlu
ZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQor
Cit2b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbywgUHV0QnlLaW5kIGtpbmQpCit7CisgICAgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9u
UHRyVGFnPiBvcHRpbWl6ZWRGdW5jdGlvbjsKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNl
IFB1dEJ5S2luZDo6QnlJZDogeworICAgICAgICB1c2luZyBGdW5jdGlvblR5cGUgPSBkZWNsdHlw
ZSgmb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKTsKKyAgICAgICAgRnVuY3Rp
b25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PEZ1bmN0aW9uVHlw
ZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZvKS5leGVjdXRhYmxlQWRk
cmVzcygpKTsKKyAgICAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJp
Y3RPcHRpbWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0
QnlJZFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9u
ID09IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRG
dW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxz
ZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0
IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9w
dGltaXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVGaWVsZFN0cmljdCB8fCB1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6
ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZFNldFBy
aXZhdGVGaWVsZFN0cmljdE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5v
cHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3Ry
aWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1
dEJ5SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBBU1NFUlQodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0Tm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjdE5vblN0cmljdE9wdGltaXplKTsKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9u
ID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKKyAgICAg
ICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0
T3B0aW1pemUpOworICAgICAgICBGdW5jdGlvblR5cGUgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8RnVuY3Rpb25UeXBlPihyZWFkUHV0SUNDYWxsVGFyZ2V0KGNvZGVCbG9j
aywgc3R1YkluZm8pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICBpZiAodW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdEdlbmVyaWMgfHwgdW5vcHRpbWl6
ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKQorICAgICAgICAg
ICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplOwor
ICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFs
Tm9uU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5
VmFsTm9uU3RyaWN0T3B0aW1pemUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIGVsc2UgaWYgKHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8
IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxTdHJpY3RPcHRp
bWl6ZSkKKyAgICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZTsKKyAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlv
biA9PSBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZEdlbmVyaWMgfHwgdW5vcHRp
bWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGlt
aXplKQorICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbERl
ZmluZVByaXZhdGVGaWVsZE9wdGltaXplOworICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1
bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkR2VuZXJpYyB8fCB1bm9w
dGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5VmFsU2V0UHJpdmF0ZUZpZWxkT3B0aW1p
emUpCisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU2V0
UHJpdmF0ZUZpZWxkT3B0aW1pemU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJU
KHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RH
ZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxO
b25TdHJpY3RPcHRpbWl6ZSk7CisgICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0aW1pemU7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIH0KKworICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2Nr
LCBzdHViSW5mbywgb3B0aW1pemVkRnVuY3Rpb24pOworICAgIHN3aXRjaCAoa2luZCkgeworICAg
IGNhc2UgUHV0QnlLaW5kOjpCeUlkOgorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFz
SnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFB1dEJ5S2luZDo6QnlWYWw6CisgICAgICAgIElubGluZUFjY2Vzczo6cmVzZXRTdHViQXNK
dW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIHJlc2V0RGVsQnkoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRGVsQnlLaW5kIGtpbmQpCit7Cisg
ICAgaWYgKGtpbmQgPT0gRGVsQnlLaW5kOjpCeUlkKQorICAgICAgICByZXBhdGNoU2xvd1BhdGhD
YWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkRlbGV0ZUJ5SWRPcHRpbWl6ZSk7Cisg
ICAgZWxzZQorICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8s
IG9wZXJhdGlvbkRlbGV0ZUJ5VmFsT3B0aW1pemUpOworICAgIElubGluZUFjY2Vzczo6cmVzZXRT
dHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZv
KTsKK30KKwordm9pZCByZXNldEluQnkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgSW5CeUtpbmQga2luZCkKK3sKKyAgICByZXBhdGNoU2xvd1BhdGhD
YWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIGFwcHJvcHJpYXRlT3B0aW1pemluZ0luQnlGdW5jdGlv
bihraW5kKSk7CisgICAgaWYgKGtpbmQgPT0gSW5CeUtpbmQ6OkJ5SWQpCisgICAgICAgIElubGlu
ZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Cisg
ICAgZWxzZQorICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90
VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRI
YXNQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbykKK3sKKyAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8s
IG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZE9wdGltaXplKTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJl
c2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHVi
SW5mbyk7Cit9CisKK3ZvaWQgcmVzZXRJbnN0YW5jZU9mKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChj
b2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpOworICAgIElu
bGluZUFjY2Vzczo6cmVzZXRTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhj
b2RlQmxvY2ssIHN0dWJJbmZvKTsKK30KKwordm9pZCByZXNldENoZWNrUHJpdmF0ZUJyYW5kKENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAg
cmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25DaGVja1By
aXZhdGVCcmFuZE9wdGltaXplKTsKKyAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcElu
QWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Cit9CisKK3Zv
aWQgcmVzZXRTZXRQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8sIG9wZXJhdGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKTsKKyAgICBJbmxpbmVB
Y2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJs
b2NrLCBzdHViSW5mbyk7Cit9CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXBhdGNoLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNhMDYwZTEzYTQz
MmQ2NTU4ZjkxYzIwNmNkMDdjODcxNTk3NWZkYWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaC5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJDYWxsVmFy
aWFudC5oIgorI2luY2x1ZGUgIlB1dEtpbmQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IFN0cnVjdHVyZVN0dWJJbmZvOworCitlbnVtIGNsYXNzIEdldEJ5S2luZCB7CisgICAgQnlJZCwK
KyAgICBCeVZhbCwKKyAgICBUcnlCeUlkLAorICAgIEJ5SWRXaXRoVGhpcywKKyAgICBCeUlkRGly
ZWN0LAorICAgIFByaXZhdGVOYW1lLAorICAgIFByaXZhdGVOYW1lQnlJZCwKK307CisKK2VudW0g
Y2xhc3MgUHV0QnlLaW5kIHsKKyAgICBCeUlkLAorICAgIEJ5VmFsLAorfTsKKworZW51bSBjbGFz
cyBEZWxCeUtpbmQgeworICAgIEJ5SWQsCisgICAgQnlWYWwKK307CisKK2VudW0gY2xhc3MgSW5C
eUtpbmQgeworICAgIEJ5SWQsCisgICAgQnlWYWwsCisgICAgUHJpdmF0ZU5hbWUKK307CisKK3Zv
aWQgcmVwYXRjaEFycmF5R2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1Zh
bHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlcGF0
Y2hHZXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIENhY2hlYWJsZUlk
ZW50aWZpZXIsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgR2V0QnlL
aW5kKTsKK3ZvaWQgcmVwYXRjaEFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxv
Y2sqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgaW5kZXgsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0
S2luZCwgRUNNQU1vZGUpOwordm9pZCByZXBhdGNoUHV0QnkoSlNHbG9iYWxPYmplY3QqLCBDb2Rl
QmxvY2sqLCBKU1ZhbHVlLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBjb25zdCBQ
dXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1dEJ5S2luZCwgUHV0S2luZCk7
Cit2b2lkIHJlcGF0Y2hEZWxldGVCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIERlbGV0
ZVByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIFN0cnVjdHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIs
IFN0cnVjdHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5kLCBFQ01BTW9kZSk7Cit2b2lkIHJlcGF0Y2hJ
bkJ5KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVu
dGlmaWVyLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYsIEluQnlLaW5kKTsKK3ZvaWQgcmVwYXRjaEhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9i
amVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgYm9vbCB3
YXNGb3VuZCwgIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIHJlcGF0Y2hDaGVja1ByaXZhdGVC
cmFuZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgQ2FjaGVhYmxlSWRl
bnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVwYXRjaFNldFByaXZhdGVCcmFu
ZChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTT2JqZWN0KiwgU3RydWN0dXJlKiwgQ2Fj
aGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgcmVwYXRjaEluc3Rh
bmNlT2YoSlNHbG9iYWxPYmplY3QqLCBDb2RlQmxvY2sqLCBKU1ZhbHVlLCBKU1ZhbHVlIHByb3Rv
dHlwZSwgU3RydWN0dXJlU3R1YkluZm8mLCBib29sIHdhc0ZvdW5kKTsKK3ZvaWQgbGlua01vbm9t
b3JwaGljQ2FsbChWTSYsIENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpT
T2JqZWN0KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7Cit2
b2lkIGxpbmtEaXJlY3RDYWxsKENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayos
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPik7Cit2b2lkIGxpbmtTbG93Rm9y
KENhbGxGcmFtZSosIENhbGxMaW5rSW5mbyYpOwordm9pZCB1bmxpbmtDYWxsKFZNJiwgQ2FsbExp
bmtJbmZvJik7Cit2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqLCBDYWxs
RnJhbWUqLCBDYWxsTGlua0luZm8mLCBDYWxsVmFyaWFudCk7Cit2b2lkIHJlc2V0R2V0QnkoQ29k
ZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwordm9pZCByZXNldFB1dEJ5
KENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0QnlLaW5kKTsKK3ZvaWQgcmVzZXRE
ZWxCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIERlbEJ5S2luZCk7Cit2b2lkIHJl
c2V0SW5CeShDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIEluQnlLaW5kKTsKK3ZvaWQg
cmVzZXRIYXNQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3Zv
aWQgcmVzZXRJbnN0YW5jZU9mKENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lk
IHJlc2V0Q2hlY2tQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsK
K3ZvaWQgcmVzZXRTZXRQcml2YXRlQnJhbmQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8m
KTsKK3ZvaWQgZnRsVGh1bmtBd2FyZVJlcGF0Y2hDYWxsKENvZGVCbG9jayosIENvZGVMb2NhdGlv
bkNhbGw8SlNJbnRlcm5hbFB0clRhZz4sIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gbmV3
Q2FsbGVlRnVuY3Rpb24pOworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpz
VG9XYXNtSUNDb2RlUHRyKFZNJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgSlNPYmplY3QqIGNh
bGxlZSk7CisKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9SZXBhdGNoSW5saW5lcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlZmU3YjFiMzM3NjRiZGY0
MmIyZTRmMDJkNGRmMGNkOWU4MWM0OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUmVwYXRjaElubGluZXMuaApAQCAtMCwwICsxLDIxNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiUmVwYXRjaC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIFNsb3dQ
YXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2FsbChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBKU1ZhbHVlIGNhbGxlZSwgQ2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm8pCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGNhbGxlZUZyYW1lLT5z
ZXRDb2RlQmxvY2sobnVsbHB0cik7CisKKyAgICBpZiAoY2FsbExpbmtJbmZvLT5zcGVjaWFsaXph
dGlvbktpbmQoKSA9PSBDb2RlRm9yQ2FsbCkgeworICAgICAgICBhdXRvIGNhbGxEYXRhID0gZ2V0
Q2FsbERhdGEodm0sIGNhbGxlZSk7CisgICAgICAgIEFTU0VSVChjYWxsRGF0YS50eXBlICE9IENh
bGxEYXRhOjpUeXBlOjpKUyk7CisKKyAgICAgICAgaWYgKGNhbGxEYXRhLnR5cGUgPT0gQ2FsbERh
dGE6OlR5cGU6Ok5hdGl2ZSkgeworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgY2FsbGVlRnJhbWUpOworICAgICAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxl
ZShhc09iamVjdChjYWxsZWUpKTsKKyAgICAgICAgICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVy
blZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2Jh
bE9iamVjdCh2bSksIGNhbGxlZUZyYW1lKTsKKyAgICAgICAgICAgIERpc2FsbG93R0MgZGlzYWxs
b3dHQzsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAorICAgICAgICAgICAgICAgICAgICB2
bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
S2VlcFRoZUZyYW1lKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBlbmNv
ZGVSZXN1bHQoCisgICAgICAgICAgICAgICAgTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVF
bnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxN
b2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9CisK
KyAgICAgICAgQVNTRVJUKGNhbGxEYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOwor
ICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBRnVu
Y3Rpb25FcnJvcihnbG9iYWxPYmplY3QsIGNhbGxlZSkpOworICAgICAgICByZXR1cm4gZW5jb2Rl
UmVzdWx0KAorICAgICAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQ
YXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgICAgICByZWludGVycHJl
dF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICB9CisKKyAgICBBU1NFUlQoY2FsbExp
bmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKworICAg
IGF1dG8gY29uc3RydWN0RGF0YSA9IGdldENvbnN0cnVjdERhdGEodm0sIGNhbGxlZSk7CisgICAg
QVNTRVJUKGNvbnN0cnVjdERhdGEudHlwZSAhPSBDYWxsRGF0YTo6VHlwZTo6SlMpOworCisgICAg
aWYgKGNvbnN0cnVjdERhdGEudHlwZSA9PSBDYWxsRGF0YTo6VHlwZTo6TmF0aXZlKSB7CisgICAg
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxlZUZyYW1lKTsKKyAgICAg
ICAgY2FsbGVlRnJhbWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKKyAgICAgICAgdm0u
ZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUgPSBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlv
bihhc09iamVjdChjYWxsZWUpLT5nbG9iYWxPYmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7CisgICAg
ICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkgeworICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKKyAgICAgICAg
ICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZv
aWQqPihLZWVwVGhlRnJhbWUpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBlbmNvZGVS
ZXN1bHQoTExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkp
OworICAgIH0KKworICAgIEFTU0VSVChjb25zdHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5
cGU6Ok5vbmUpOworICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0
ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7CisgICAgcmV0dXJu
IGVuY29kZVJlc3VsdCgKKyAgICAgICAgdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNs
b3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOworfQorCitBTFdBWVNfSU5MSU5FIFNsb3dQYXRo
UmV0dXJuVHlwZSBsaW5rRm9yKENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQoreworICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJhbWUtPmNhbGxlckZyYW1lKCk7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gY2FsbExp
bmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgUkVMRUFTRV9BU1NFUlQoIWNhbGxMaW5rSW5m
by0+aXNEaXJlY3QoKSk7CisKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBjYWxsZWVGcmFt
ZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUoKTsKKyAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rp
b25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKKyAgICBpZiAoIWNhbGxlZUFz
RnVuY3Rpb25DZWxsKSB7CisgICAgICAgIGlmIChhdXRvKiBpbnRlcm5hbEZ1bmN0aW9uID0ganNE
eW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZt
LmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoISFjb2RlUHRyKTsKKworICAgICAgICAgICAgaWYgKCFjYWxsTGlua0lu
Zm8tPnNlZW5PbmNlKCkpCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGlua01vbm9tb3JwaGljQ2FsbCh2
bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0luZm8sIG51bGxwdHIsIGludGVybmFsRnVuY3Rpb24s
IGNvZGVQdHIpOworCisgICAgICAgICAgICB2b2lkKiBsaW5rZWRUYXJnZXQgPSBjb2RlUHRyLmV4
ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGxpbmtl
ZFRhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgp
ID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAg
ICAgICB9CisgICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0
Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlua0lu
Zm8pKTsKKyAgICB9CisKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlv
bio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxlZS0+
c2NvcGVVbmNoZWNrZWQoKTsKKyAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxl
ZS0+ZXhlY3V0YWJsZSgpOworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IGNvZGVQdHI7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOworICAgIGlm
IChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKSB7CisgICAgICAgIGNvZGVQdHIgPSBqc1Rv
V2FzbUlDQ29kZVB0cih2bSwga2luZCwgY2FsbGVlKTsKKyAgICAgICAgaWYgKCFjb2RlUHRyKQor
ICAgICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVz
dENoZWNrQXJpdHkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhl
Y3V0YWJsZSk7CisKKyAgICAgICAgYXV0byBoYW5kbGVUaHJvd0V4Y2VwdGlvbiA9IFsmXSAoKSB7
CisgICAgICAgICAgICB2b2lkKiB0aHJvd1RhcmdldCA9IHZtLmdldENUSVRocm93RXhjZXB0aW9u
RnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAg
ICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0aHJvd1RhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oS2VlcFRoZUZyYW1lKSk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCFpc0NhbGwoa2lu
ZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5jb25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0
QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KSB7CisgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihn
bG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2Jh
bE9iamVjdCwgY2FsbGVlKSk7CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlVGhyb3dFeGNlcHRp
b24oKTsKKyAgICAgICAgfQorCisgICAgICAgIENvZGVCbG9jayoqIGNvZGVCbG9ja1Nsb3QgPSBj
YWxsZWVGcmFtZS0+YWRkcmVzc09mQ29kZUJsb2NrKCk7CisgICAgICAgIGZ1bmN0aW9uRXhlY3V0
YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxGdW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBjYWxsZWUs
IHNjb3BlLCBraW5kLCAqY29kZUJsb2NrU2xvdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04odGhyb3dTY29wZSwgaGFuZGxlVGhyb3dFeGNlcHRpb24oKSk7CisKKyAgICAgICAgY29kZUJs
b2NrID0gKmNvZGVCbG9ja1Nsb3Q7CisgICAgICAgIEFTU0VSVChjb2RlQmxvY2spOworCisgICAg
ICAgIEFyaXR5Q2hlY2tNb2RlIGFyaXR5OworICAgICAgICBpZiAoY2FsbGVlRnJhbWUtPmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpKSB8fCBjYWxsTGlua0luZm8tPmlzVmFyYXJncygpKQorICAgICAgICAg
ICAgYXJpdHkgPSBNdXN0Q2hlY2tBcml0eTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXJp
dHkgPSBBcml0eUNoZWNrTm90UmVxdWlyZWQ7CisgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4
ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgYXJpdHkpOworICAgIH0KKworICAgIGlmICgh
Y2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQorICAgICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4o
KTsKKyAgICBlbHNlCisgICAgICAgIGxpbmtNb25vbW9ycGhpY0NhbGwodm0sIGNhbGxlZUZyYW1l
LCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZSwgY29kZVB0cik7CisKKyAgICByZXR1
cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8g
UmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworfQorCitBTFdBWVNfSU5MSU5FIFNsb3dQ
YXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbGVlRnJhbWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJ
bmZvLCBKU0NlbGwqJiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCkKK3sKKyAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5jYWxsZXJGcmFtZSgpOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCA9IGNhbGxMaW5rSW5mby0+
c3BlY2lhbGl6YXRpb25LaW5kKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgY2FsbEZyYW1lKTsKKworICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IGNhbGxlZUZyYW1l
LT5ndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgpOworICAgIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0g
Z2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVlKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhbGxlZUFz
RnVuY3Rpb25DZWxsKSkgeworICAgICAgICBpZiAoanNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0
aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25U
cmFtcG9saW5lRm9yKGtpbmQpOworICAgICAgICAgICAgQVNTRVJUKCEhY29kZVB0cik7CisgICAg
ICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxN
b2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOworICAgICAgICB9Cisg
ICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChnbG9i
YWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlua0luZm8pKTsKKyAg
ICB9CisKKyAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2Fs
bGVlQXNGdW5jdGlvbkNlbGwpOworICAgIEpTU2NvcGUqIHNjb3BlID0gZnVuY3Rpb24tPnNjb3Bl
VW5jaGVja2VkKCk7CisgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+
ZXhlY3V0YWJsZSgpOworICAgIGlmIChVTkxJS0VMWSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZv
cihraW5kKSkpIHsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFi
bGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKKworICAg
ICAgICBhdXRvIGhhbmRsZVRocm93RXhjZXB0aW9uID0gWyZdICgpIHsKKyAgICAgICAgICAgIHZv
aWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRo
KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICByZXR1cm4gZW5jb2Rl
UmVzdWx0KHRocm93VGFyZ2V0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUp
KTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoIWlzQ2FsbChraW5kKSAmJiBmdW5jdGlvbkV4
ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHkoKSA9PSBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RD
b25zdHJ1Y3QpIHsKKyAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgY3JlYXRlTm90QUNvbnN0cnVjdG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBmdW5jdGlv
bikpOworICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVRocm93RXhjZXB0aW9uKCk7CisgICAgICAg
IH0KKworICAgICAgICBDb2RlQmxvY2sqKiBjb2RlQmxvY2tTbG90ID0gY2FsbGVlRnJhbWUtPmFk
ZHJlc3NPZkNvZGVCbG9jaygpOworICAgICAgICBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVG
b3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRhYmxlPih2bSwgZnVuY3Rpb24sIHNjb3BlLCBraW5k
LCAqY29kZUJsb2NrU2xvdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgaGFuZGxlVGhyb3dFeGNlcHRpb24oKSk7CisgICAgfQorICAgIC8vIEZJWE1FOiBTdXBwb3J0
IHdhc20gSUMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyMDMzOQorICAgIHJldHVybiBlbmNvZGVSZXN1bHQoZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZv
cigKKyAgICAgICAga2luZCwgTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksCisg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9
PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhlRnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJkZDdmNTA1NWZkN2I2MmI4NzUzMDJmODliMTFj
ZWNlNjY5Yjc5Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMjA0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlcGF0Y2guaCIKLQot
I2luY2x1ZGUgIkJpbmFyeVN3aXRjaC5oIgotI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgotI2lu
Y2x1ZGUgIkNhY2hlYWJsZUlkZW50aWZpZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiQ2FsbEZyYW1l
U2h1ZmZsZXIuaCIKLSNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiREZHU3Bl
Y3VsYXRpdmVKSVQuaCIKLSNpbmNsdWRlICJET01KSVRHZXR0ZXJTZXR0ZXIuaCIKLSNpbmNsdWRl
ICJEaXJlY3RBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJFeGVjdXRhYmxlQmFzZUlubGluZXMuaCIK
LSNpbmNsdWRlICJGVExUaHVua3MuaCIKLSNpbmNsdWRlICJGdWxsQ29kZU9yaWdpbi5oIgotI2lu
Y2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0
aW5lLmgiCi0jaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCi0jaW5jbHVkZSAiR2V0dGVyU2V0dGVy
QWNjZXNzQ2FzZS5oIgotI2luY2x1ZGUgIklDU3RhdHMuaCIKLSNpbmNsdWRlICJJbmxpbmVBY2Nl
c3MuaCIKLSNpbmNsdWRlICJJbnN0YW5jZU9mQWNjZXNzQ2FzZS5oIgotI2luY2x1ZGUgIkludHJp
bnNpY0dldHRlckFjY2Vzc0Nhc2UuaCIKLSNpbmNsdWRlICJKSVQuaCIKLSNpbmNsdWRlICJKSVRJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNXZWJBc3NlbWJseS5oIgotI2luY2x1ZGUgIkpT
V2ViQXNzZW1ibHlNb2R1bGUuaCIKLSNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCi0jaW5jbHVkZSAi
TW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZS5oIgotI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNz
LmgiCi0jaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCi0jaW5jbHVkZSAiU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yLmgiCi0jaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKLSNpbmNsdWRlICJT
dHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKLSNpbmNsdWRl
ICJTdXBlclNhbXBsZXIuaCIKLSNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKLSNpbmNsdWRl
ICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgot
I2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVh
bS5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotc3RhdGljIHZvaWQgbGlua1Nsb3dQYXRoVG8oVk0m
LCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPiBjb2RlUmVmKQotewotICAgIGNhbGxMaW5rSW5mby5zZXRTbG93UGF0
aENhbGxEZXN0aW5hdGlvbihjb2RlUmVmLmNvZGUoKS50ZW1wbGF0ZSByZXRhZ2dlZDxKU0VudHJ5
UHRyVGFnPigpKTsKLX0KLQotI2lmIEVOQUJMRShKSVQpCi1zdGF0aWMgdm9pZCBsaW5rU2xvd1Bh
dGhUbyhWTSYgdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBUaHVua0dlbmVyYXRvciBn
ZW5lcmF0b3IpCi17Ci0gICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgdm0uZ2V0
Q1RJU3R1YihnZW5lcmF0b3IpLnJldGFnZ2VkPEpJVFN0dWJSb3V0aW5lUHRyVGFnPigpKTsKLX0K
LSNlbmRpZgotCi1zdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihWTSYgdm0sIENhbGxMaW5rSW5mbyYg
Y2FsbExpbmtJbmZvKQotewotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGlu
ZVB0clRhZz4gdmlydHVhbFRodW5rID0gdm0uZ2V0Q1RJVmlydHVhbENhbGwoY2FsbExpbmtJbmZv
LmNhbGxNb2RlKCkpOwotICAgIGxpbmtTbG93UGF0aFRvKHZtLCBjYWxsTGlua0luZm8sIHZpcnR1
YWxUaHVuayk7Ci19Ci0KLXN0YXRpYyBKU0NlbGwqIHdlYkFzc2VtYmx5T3duZXIoSlNDZWxsKiBj
YWxsZWUpCi17Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIC8vIEVhY2ggV2ViQXNzZW1i
bHkuSW5zdGFuY2Ugc2hhcmVzIHRoZSBzdHVicyBmcm9tIHRoZWlyIFdlYkFzc2VtYmx5Lk1vZHVs
ZSwgd2hpY2ggYXJlIHRoZXJlZm9yZSB0aGUgYXBwcm9wcmlhdGUgb3duZXIuCi0gICAgcmV0dXJu
IGpzQ2FzdDxKU1dlYkFzc2VtYmx5TW9kdWxlKj4oY2FsbGVlKTsKLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKGNhbGxlZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gbnVsbHB0cjsKLSNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCi19Ci0KLXZvaWQg
bGlua01vbm9tb3JwaGljQ2FsbCgKLSAgICBWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssCi0g
ICAgSlNPYmplY3QqIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IGNvZGVQdHIpCi17Ci0gICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1YigpKTsKLQotICAgIENh
bGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgLy8g
T3VyIGNhbGxlciBtdXN0IGhhdmUgYSBjZWxsIGZvciBhIGNhbGxlZS4gV2hlbiBjYWxsaW5nCi0g
ICAgLy8gdGhpcyBmcm9tIFdhc20sIHdlIGVuc3VyZSB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KLSAg
ICBBU1NFUlQoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmlzQ2VsbCgpKTsKLQotICAgIENvZGVCbG9j
ayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwotCi0gICAgLy8g
V2ViQXNzZW1ibHkgLT4gSlMgc3R1YnMgZG9uJ3QgaGF2ZSBhIHZhbGlkIENvZGVCbG9jay4KLSAg
ICBKU0NlbGwqIG93bmVyID0gaXNXZWJBc3NlbWJseU1vZHVsZShjYWxsZXJGcmFtZS0+Y2FsbGVl
KCkuYXNDZWxsKCkpID8gd2ViQXNzZW1ibHlPd25lcihjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuYXND
ZWxsKCkpIDogY2FsbGVyQ29kZUJsb2NrOwotICAgIEFTU0VSVChvd25lcik7Ci0KLSAgICBBU1NF
UlQoIWNhbGxMaW5rSW5mby5pc0xpbmtlZCgpKTsKLSAgICBjYWxsTGlua0luZm8uc2V0TW9ub21v
cnBoaWNDYWxsZWUodm0sIG93bmVyLCBjYWxsZWUsIGNvZGVQdHIpOwotICAgIGNhbGxMaW5rSW5m
by5zZXRMYXN0U2VlbkNhbGxlZSh2bSwgb3duZXIsIGNhbGxlZSk7Ci0KLSAgICBpZiAoc2hvdWxk
RHVtcERpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCi0gICAgICAgIGRhdGFMb2coIkxp
bmtpbmcgY2FsbCBpbiAiLCBGdWxsQ29kZU9yaWdpbihjYWxsZXJDb2RlQmxvY2ssIGNhbGxMaW5r
SW5mby5jb2RlT3JpZ2luKCkpLCAiIHRvICIsIHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9jayks
ICIsIGVudHJ5cG9pbnQgYXQgIiwgY29kZVB0ciwgIlxuIik7Ci0KLSAgICBpZiAoY2FsbGVlQ29k
ZUJsb2NrKQotICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoY2FsbGVy
RnJhbWUsICZjYWxsTGlua0luZm8pOwotCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAoY2FsbExp
bmtJbmZvLnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDYWxsICYmIGNhbGxMaW5rSW5m
by5hbGxvd1N0dWJzKCkpIHsKLSAgICAgICAgbGlua1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5m
bywgbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSNlbmRpZgotICAgIAotICAgIGxpbmtTbG93Rm9yKHZtLCBjYWxsTGlua0luZm8pOwot
fQotCi1zdGF0aWMgdm9pZCByZXZlcnRDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlu
a0luZm8sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRTdHViUm91dGluZVB0clRhZz4gY29kZVJl
ZikKLXsKLSAgICBpZiAoY2FsbExpbmtJbmZvLmlzRGlyZWN0KCkpIHsKLSNpZiBFTkFCTEUoSklU
KQotICAgICAgICBjYWxsTGlua0luZm8uY2xlYXJDb2RlQmxvY2soKTsKLSAgICAgICAgaWYgKCFj
YWxsTGlua0luZm8uY2xlYXJlZEJ5SmV0dGlzb24oKSkKLSAgICAgICAgICAgIGNhbGxMaW5rSW5m
by5pbml0aWFsaXplRGlyZWN0Q2FsbCgpOwotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKCFjYWxsTGlua0luZm8uY2xlYXJlZEJ5SmV0dGlzb24oKSkgewotICAgICAgICAgICAgbGlu
a1Nsb3dQYXRoVG8odm0sIGNhbGxMaW5rSW5mbywgY29kZVJlZik7Ci0KLSAgICAgICAgICAgIGlm
IChjYWxsTGlua0luZm8uc3R1YigpKQotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby5yZXZl
cnRDYWxsVG9TdHViKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FsbExpbmtJbmZvLmNsZWFyQ2Fs
bGVlKCk7IC8vIFRoaXMgYWxzbyBjbGVhcnMgdGhlIGlubGluZSBjYWNoZSBib3RoIGZvciBkYXRh
IGFuZCBjb2RlLWJhc2VkIGNhY2hlcy4KLSAgICB9Ci0gICAgY2FsbExpbmtJbmZvLmNsZWFyU2Vl
bigpOwotICAgIGNhbGxMaW5rSW5mby5jbGVhclN0dWIoKTsKLSAgICBpZiAoY2FsbExpbmtJbmZv
LmlzT25MaXN0KCkpCi0gICAgICAgIGNhbGxMaW5rSW5mby5yZW1vdmUoKTsKLX0KLQotdm9pZCB1
bmxpbmtDYWxsKFZNJiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCi17Ci0gICAgZGF0
YUxvZ0xuSWYoT3B0aW9uczo6ZHVtcERpc2Fzc2VtYmx5KCksICJVbmxpbmtpbmcgQ2FsbExpbmtJ
bmZvOiAiLCBSYXdQb2ludGVyKCZjYWxsTGlua0luZm8pKTsKLSAgICAKLSAgICByZXZlcnRDYWxs
KHZtLCBjYWxsTGlua0luZm8sIHZtLmdldENUSUxpbmtDYWxsKCkucmV0YWdnZWQ8SklUU3R1YlJv
dXRpbmVQdHJUYWc+KCkpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4ganNUb1dhc21JQ0NvZGVQdHIoVk0mIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQs
IEpTT2JqZWN0KiBjYWxsZWUpCi17Ci0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotICAgIGlmICgh
Y2FsbGVlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoa2luZCAhPSBDb2RlRm9y
Q2FsbCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKGF1dG8qIHdhc21GdW5jdGlv
biA9IGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KHZtLCBjYWxsZWUpKQotICAg
ICAgICByZXR1cm4gd2FzbUZ1bmN0aW9uLT5qc0NhbGxFbnRyeXBvaW50KCk7Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTSh2bSk7Ci0gICAgVU5VU0VEX1BBUkFNKGtpbmQpOwotICAgIFVOVVNFRF9Q
QVJBTShjYWxsZWUpOwotI2VuZGlmCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLSNpZiBFTkFC
TEUoSklUKQotCi1zdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiByZXRhZ09wZXJh
dGlvbldpdGhWYWxpZGF0aW9uKEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gb3BlcmF0aW9u
KQotewotICAgIEpTQ19SRVRVUk5fUkVUQUdHRURfT1BFUkFUSU9OX1dJVEhfVkFMSURBVElPTihv
cGVyYXRpb24pOwotfQotCi1zdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiByZXRh
Z0NhbGxUYXJnZXRXaXRoVmFsaWRhdGlvbihDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJU
YWc+IGNhbGwpCi17Ci0gICAgSlNDX1JFVFVSTl9SRVRBR0dFRF9DQUxMX1RBUkdFVF9XSVRIX1ZB
TElEQVRJT04oY2FsbCk7Ci19Ci0KLXN0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+
IHJlYWRQdXRJQ0NhbGxUYXJnZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbykKLXsKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkKLSAgICAg
ICAgcmV0dXJuIHJldGFnT3BlcmF0aW9uV2l0aFZhbGlkYXRpb24oc3R1YkluZm8ubV9zbG93T3Bl
cmF0aW9uKTsKLSAgICBDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+IGNhbGwgPSBz
dHViSW5mby5tX3Nsb3dQYXRoQ2FsbExvY2F0aW9uOwotI2lmIEVOQUJMRShGVExfSklUKQotICAg
IGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpGVExKSVQpIHsKLSAgICAgICAg
RnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+IHRhcmdldCA9IE1hY3JvQXNzZW1ibGVyOjpyZWFk
Q2FsbFRhcmdldDxKSVRUaHVua1B0clRhZz4oY2FsbCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKSVRUaHVua1B0clRhZz4gdGh1bmsgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklU
VGh1bmtQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3ModGFyZ2V0LmV4ZWN1dGFi
bGVBZGRyZXNzKCkpOwotICAgICAgICByZXR1cm4gcmV0YWdPcGVyYXRpb25XaXRoVmFsaWRhdGlv
bihjb2RlQmxvY2stPnZtKCkuZnRsVGh1bmtzLT5rZXlGb3JTbG93UGF0aENhbGxUaHVuayh0aHVu
aykuY2FsbFRhcmdldCgpKTsKLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb2RlQmxv
Y2spOwotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotICAgIHJldHVybiByZXRhZ0NhbGxUYXJn
ZXRXaXRoVmFsaWRhdGlvbihjYWxsKTsKLX0KLQotdm9pZCBmdGxUaHVua0F3YXJlUmVwYXRjaENh
bGwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVMb2NhdGlvbkNhbGw8SlNJbnRlcm5hbFB0clRh
Zz4gY2FsbCwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikK
LXsKLSNpZiBFTkFCTEUoRlRMX0pJVCkKLSAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0g
SklUVHlwZTo6RlRMSklUKSB7Ci0gICAgICAgIFZNJiB2bSA9IGNvZGVCbG9jay0+dm0oKTsKLSAg
ICAgICAgRlRMOjpUaHVua3MmIHRodW5rcyA9ICp2bS5mdGxUaHVua3M7Ci0gICAgICAgIEZ1bmN0
aW9uUHRyPEpJVFRodW5rUHRyVGFnPiB0YXJnZXQgPSBNYWNyb0Fzc2VtYmxlcjo6cmVhZENhbGxU
YXJnZXQ8SklUVGh1bmtQdHJUYWc+KGNhbGwpOwotICAgICAgICBhdXRvIHNsb3dQYXRoVGh1bmsg
PSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0
YWJsZUFkZHJlc3ModGFyZ2V0LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICBGVEw6OlNs
b3dQYXRoQ2FsbEtleSBrZXkgPSB0aHVua3Mua2V5Rm9yU2xvd1BhdGhDYWxsVGh1bmsoc2xvd1Bh
dGhUaHVuayk7Ci0gICAgICAgIGtleSA9IGtleS53aXRoQ2FsbFRhcmdldChuZXdDYWxsZWVGdW5j
dGlvbik7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChjYWxsLCBGdW5jdGlv
blB0cjxKSVRUaHVua1B0clRhZz4odGh1bmtzLmdldFNsb3dQYXRoQ2FsbFRodW5rKHZtLCBrZXkp
LmNvZGUoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vsc2UgLy8gRU5BQkxFKEZUTF9K
SVQpCi0gICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7Ci0jZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIG5ld0NhbGxlZUZ1bmN0
aW9uLnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlcGF0
Y2hTbG93UGF0aENhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbikK
LXsKLSAgICBpZiAoY29kZUJsb2NrLT51c2VEYXRhSUMoKSkgewotICAgICAgICBzdHViSW5mby5t
X3Nsb3dPcGVyYXRpb24gPSBuZXdDYWxsZWVGdW5jdGlvbi5yZXRhZ2dlZDxPcGVyYXRpb25QdHJU
YWc+KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZnRsVGh1bmtBd2FyZVJlcGF0Y2hD
YWxsKGNvZGVCbG9jaywgc3R1YkluZm8ubV9zbG93UGF0aENhbGxMb2NhdGlvbiwgbmV3Q2FsbGVl
RnVuY3Rpb24pOwotfQotCi1lbnVtIElubGluZUNhY2hlQWN0aW9uIHsKLSAgICBHaXZlVXBPbkNh
Y2hlLAotICAgIFJldHJ5Q2FjaGVMYXRlciwKLSAgICBBdHRlbXB0VG9DYWNoZQotfTsKLQotc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIGFjdGlvbkZvckNlbGwoVk0mIHZtLCBKU0NlbGwqIGNlbGwp
Ci17Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUodm0pOwotCi0g
ICAgVHlwZUluZm8gdHlwZUluZm8gPSBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCk7Ci0gICAgaWYgKHR5
cGVJbmZvLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpKQotICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKLQotICAgIGlmIChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkp
IHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIC8vIEZsYXR0ZW5pbmcgY291
bGQgaGF2ZSBjaGFuZ2VkIHRoZSBvZmZzZXQsIHNvIHJldHVybiBlYXJseSBmb3IgYW5vdGhlciB0
cnkuCi0gICAgICAgIGFzT2JqZWN0KGNlbGwpLT5mbGF0dGVuRGljdGlvbmFyeU9iamVjdCh2bSk7
Ci0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0gICAgfQotICAgIAotICAgIGlmICgh
c3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotCi0gICAgcmV0dXJuIEF0dGVtcHRUb0NhY2hlOwotfQotCi1zdGF0
aWMgYm9vbCBmb3JjZUlDRmFpbHVyZShKU0dsb2JhbE9iamVjdCopCi17Ci0gICAgcmV0dXJuIE9w
dGlvbnM6OmZvcmNlSUNGYWlsdXJlKCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQg
ZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQoVk0mIHZtLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3R1YkluZm8sIENvZGVCbG9jayogY29kZUJsb2NrLCBBY2Nlc3NHZW5lcmF0aW9uUmVz
dWx0JiByZXN1bHQpCi17Ci0gICAgaWYgKHJlc3VsdC5zaG91bGRSZXNldFN0dWJBbmRGaXJlV2F0
Y2hwb2ludHMoKSkgewotICAgICAgICByZXN1bHQuZmlyZVdhdGNocG9pbnRzKHZtKTsKLQotICAg
ICAgICB7Ci0gICAgICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVC
bG9jay0+bV9sb2NrLCB2bSk7Ci0gICAgICAgICAgICBzdHViSW5mby5yZXNldChsb2NrZXIsIGNv
ZGVCbG9jayk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWlubGluZSBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlT3B0aW1pemluZ0dldEJ5RnVuY3Rpb24oR2V0QnlLaW5k
IGtpbmQpCi17Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWQ6
Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemU7Ci0gICAgY2FzZSBHZXRC
eUtpbmQ6OkJ5SWRXaXRoVGhpczoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWRXaXRo
VGhpc09wdGltaXplOwotICAgIGNhc2UgR2V0QnlLaW5kOjpUcnlCeUlkOgotICAgICAgICByZXR1
cm4gb3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplOwotICAgIGNhc2UgR2V0QnlLaW5kOjpCeUlk
RGlyZWN0OgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplOwot
ICAgIGNhc2UgR2V0QnlLaW5kOjpCeVZhbDoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5
VmFsT3B0aW1pemU7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lOgotICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVPcHRpbWl6ZTsKLSAgICBjYXNlIEdldEJ5S2lu
ZDo6UHJpdmF0ZU5hbWVCeUlkOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0UHJpdmF0ZU5h
bWVCeUlkT3B0aW1pemU7Ci0gICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci19Ci0KLWlubGluZSBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFwcHJvcHJpYXRlR2V0
QnlGdW5jdGlvbihHZXRCeUtpbmQga2luZCkKLXsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBj
YXNlIEdldEJ5S2luZDo6QnlJZDoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5SWQ7Ci0g
ICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWRXaXRoVGhpczoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlv
bkdldEJ5SWRXaXRoVGhpczsKLSAgICBjYXNlIEdldEJ5S2luZDo6VHJ5QnlJZDoKLSAgICAgICAg
cmV0dXJuIG9wZXJhdGlvblRyeUdldEJ5SWQ7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWREaXJl
Y3Q6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25HZXRCeUlkRGlyZWN0OwotICAgIGNhc2UgR2V0
QnlLaW5kOjpCeVZhbDoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkdldEJ5VmFsR2VuZXJpYzsK
LSAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWU6Ci0gICAgICAgIHJldHVybiBvcGVyYXRp
b25HZXRQcml2YXRlTmFtZTsKLSAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0ZU5hbWVCeUlkOgot
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVCeUlkOwotICAgIH0KLSAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5Q2FjaGVHZXRCeShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSlNWYWx1ZSBiYXNlVmFsdWUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbywgR2V0QnlLaW5kIGtpbmQpCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwotCi0gICAgewotICAgICAgICBH
Q1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrLCBnbG9iYWxP
YmplY3QtPnZtKCkpOwotCi0gICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3Qp
KQotICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIAotICAgICAgICAv
LyBGSVhNRTogQ2FjaGUgcHJvcGVydHkgYWNjZXNzIGZvciBpbW1lZGlhdGVzLgotICAgICAgICBp
ZiAoIWJhc2VWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hl
OwotICAgICAgICBKU0NlbGwqIGJhc2VDZWxsID0gYmFzZVZhbHVlLmFzQ2VsbCgpOwotICAgICAg
ICBjb25zdCBib29sIGlzUHJpdmF0ZSA9IGtpbmQgPT0gR2V0QnlLaW5kOjpQcml2YXRlTmFtZSB8
fCBraW5kID09IEdldEJ5S2luZDo6UHJpdmF0ZU5hbWVCeUlkOwotCi0gICAgICAgIFJlZlB0cjxB
Y2Nlc3NDYXNlPiBuZXdDYXNlOwotCi0gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0ucHJv
cGVydHlOYW1lcy0+bGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAoaXNKU0FycmF5KGJhc2VDZWxs
KSkgewotICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5
cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgICAgICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNl
Q2VsbAotICAgICAgICAgICAgICAgICAgICAmJiBJbmxpbmVBY2Nlc3M6OmlzQ2FjaGVhYmxlQXJy
YXlMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbywganNDYXN0PEpTQXJyYXkqPihiYXNlQ2VsbCkp
KSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5s
aW5lQWNjZXNzOjpnZW5lcmF0ZUFycmF5TGVuZ3RoKGNvZGVCbG9jaywgc3R1YkluZm8sIGpzQ2Fz
dDxKU0FycmF5Kj4oYmFzZUNlbGwpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRl
ZENvZGVJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENh
bGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlv
bihraW5kKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby5pbml0QXJyYXlMZW5n
dGgobG9ja2VyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0
ZXI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vz
c0Nhc2U6OkFycmF5TGVuZ3RoLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgfSBlbHNlIGlm
IChpc0pTU3RyaW5nKGJhc2VDZWxsKSkgewotICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5j
YWNoZVR5cGUoKSA9PSBDYWNoZVR5cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgICAgICYmIElu
bGluZUFjY2Vzczo6aXNDYWNoZWFibGVTdHJpbmdMZW5ndGgoY29kZUJsb2NrLCBzdHViSW5mbykp
IHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBnZW5lcmF0ZWRDb2RlSW5saW5lID0gSW5saW5l
QWNjZXNzOjpnZW5lcmF0ZVN0cmluZ0xlbmd0aChjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgYXBwcm9w
cmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihraW5kKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzdHViSW5mby5pbml0U3RyaW5nTGVuZ3RoKGxvY2tlcik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6
OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpTdHJpbmdMZW5ndGgsIHByb3BlcnR5
TmFtZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKERpcmVjdEFyZ3VtZW50cyogYXJndW1lbnRz
ID0ganNEeW5hbWljQ2FzdDxEaXJlY3RBcmd1bWVudHMqPih2bSwgYmFzZUNlbGwpKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSBvdmVycmlkZXMsIHRoZW4gd2UgY2FuIGhhbmRs
ZSB0aGlzIGFzIGEgbm9ybWFsIHByb3BlcnR5IGxvYWQhIEd1YXJkaW5nCi0gICAgICAgICAgICAg
ICAgLy8gdGhpcyB3aXRoIHN1Y2ggYSBjaGVjayBlbmFibGVzIHVzIHRvIGFkZCBhbiBJQyBjYXNl
IGZvciB0aGF0IGxvYWQgaWYgbmVlZGVkLgotICAgICAgICAgICAgICAgIGlmICghYXJndW1lbnRz
LT5vdmVycm9kZVRoaW5ncygpKQotICAgICAgICAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNz
Q2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OkRpcmVjdEFyZ3VtZW50c0xl
bmd0aCwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoU2NvcGVkQXJndW1l
bnRzKiBhcmd1bWVudHMgPSBqc0R5bmFtaWNDYXN0PFNjb3BlZEFyZ3VtZW50cyo+KHZtLCBiYXNl
Q2VsbCkpIHsKLSAgICAgICAgICAgICAgICAvLyBEaXR0by4KLSAgICAgICAgICAgICAgICBpZiAo
IWFyZ3VtZW50cy0+b3ZlcnJvZGVUaGluZ3MoKSkKLSAgICAgICAgICAgICAgICAgICAgbmV3Q2Fz
ZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpTY29wZWRB
cmd1bWVudHNMZW5ndGgsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpICYmIGJhc2VDZWxsLT5pbmhl
cml0czxKU01vZHVsZU5hbWVzcGFjZU9iamVjdD4odm0pICYmICFzbG90LmlzVW5zZXQoKSkgewot
ICAgICAgICAgICAgaWYgKGF1dG8gbW9kdWxlTmFtZXNwYWNlU2xvdCA9IHNsb3QubW9kdWxlTmFt
ZXNwYWNlU2xvdCgpKQotICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBNb2R1bGVOYW1lc3BhY2VB
Y2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgcHJvcGVydHlOYW1lLCBqc0Nhc3Q8SlNN
b2R1bGVOYW1lc3BhY2VPYmplY3QqPihiYXNlQ2VsbCksIG1vZHVsZU5hbWVzcGFjZVNsb3QtPmVu
dmlyb25tZW50LCBTY29wZU9mZnNldChtb2R1bGVOYW1lc3BhY2VTbG90LT5zY29wZU9mZnNldCkp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIW5ld0Nhc2UpIHsKLSAgICAgICAg
ICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpICYmICFzbG90LmlzVW5zZXQoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgY29uZGl0aW9uU2V0OwotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKHZtKTsKLQotICAgICAgICAgICAgYm9vbCBsb2Fk
VGFyZ2V0RnJvbVByb3h5ID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoYmFzZUNlbGwtPnR5cGUo
KSA9PSBQdXJlRm9yd2FyZGluZ1Byb3h5VHlwZSkgewotICAgICAgICAgICAgICAgIGlmIChpc1By
aXZhdGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAg
ICAgICAgICAgIGJhc2VWYWx1ZSA9IGpzQ2FzdDxKU1Byb3h5Kj4oYmFzZUNlbGwpLT50YXJnZXQo
KTsKLSAgICAgICAgICAgICAgICBiYXNlQ2VsbCA9IGJhc2VWYWx1ZS5hc0NlbGwoKTsKLSAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUgPSBiYXNlQ2VsbC0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAg
ICAgICAgICBsb2FkVGFyZ2V0RnJvbVByb3h5ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgSW5saW5lQ2FjaGVBY3Rpb24gYWN0aW9uID0gYWN0aW9uRm9yQ2VsbCh2bSwgYmFz
ZUNlbGwpOwotICAgICAgICAgICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gYWN0aW9uOwotCi0gICAgICAgICAgICAvLyBPcHRpbWl6ZSBzZWxm
IGFjY2Vzcy4KLSAgICAgICAgICAgIGlmIChzdHViSW5mby5jYWNoZVR5cGUoKSA9PSBDYWNoZVR5
cGU6OlVuc2V0Ci0gICAgICAgICAgICAgICAgJiYgc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkKLSAg
ICAgICAgICAgICAgICAmJiBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlCi0gICAgICAgICAg
ICAgICAgJiYgIXNsb3Qud2F0Y2hwb2ludFNldCgpCi0gICAgICAgICAgICAgICAgJiYgIXN0cnVj
dHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCi0gICAgICAgICAgICAgICAgJiYg
IWxvYWRUYXJnZXRGcm9tUHJveHkpIHsKLSAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENv
ZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlByb3BlcnR5QWNjZXNzKGNvZGVC
bG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKLSAgICAgICAgICAgICAgICAgICAg
TE9HX0lDKChJQ0V2ZW50OjpHZXRCeVNlbGZQYXRjaCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwg
SWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSwgc2xvdC5zbG90QmFz
ZSgpID09IGJhc2VWYWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0
V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHVi
SW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihraW5kKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZihsb2NrZXIsIGNvZGVCbG9jaywg
c3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBw
cm90b3R5cGVBY2Nlc3NDaGFpbjsKLQotICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gc2xvdC5pc1Vuc2V0KCkgPyBpbnZhbGlkT2Zmc2V0IDogc2xvdC5jYWNoZWRPZmZzZXQoKTsK
LQotICAgICAgICAgICAgaWYgKHNsb3QuaXNDdXN0b20oKSAmJiBzbG90LnNsb3RCYXNlKCkgPT0g
YmFzZVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgLy8gVG8gY2FjaGUgc2VsZiBjdXN0b21zLCB3
ZSBtdXN0IGRpc2FsbG93IGRpY3Rpb25hcmllcyBiZWNhdXNlIHdlCi0gICAgICAgICAgICAgICAg
Ly8gbmVlZCB0byBiZSBpbmZvcm1lZCBpZiB0aGUgY3VzdG9tIGdvZXMgYXdheSBzaW5jZSB3ZSBj
YWNoZSB0aGUKLSAgICAgICAgICAgICAgICAvLyBjb25zdGFudCBmdW5jdGlvbiBwb2ludGVyLgot
Ci0gICAgICAgICAgICAgICAgaWYgKCFwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9iamVj
dCwgc2xvdC5zbG90QmFzZSgpLCBzbG90LnNsb3RCYXNlKCkpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
KHNsb3QuaXNVbnNldCgpIHx8IHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2Fj
aGluZygpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAg
ICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmhhc0JlZW5GbGF0dGVuZWRCZWZvcmUoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmUtPmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKHZtLCBqc0Nhc3Q8SlNP
YmplY3QqPihiYXNlQ2VsbCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNo
ZUxhdGVyOyAvLyBXZSBtYXkgaGF2ZSBjaGFuZ2VkIHByb3BlcnR5IG9mZnNldHMuCi0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNVbnNldCgpICYmIHN0cnVj
dHVyZS0+dHlwZUluZm8oKS5nZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZUZvclByb3BlcnR5QWJz
ZW5jZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAg
ICAgICAgICAgICAgIC8vIElmIGEga2luZCBpcyBHZXRCeUtpbmQ6OkJ5SWREaXJlY3Qgb3IgR2V0
QnlLaW5kOjpQcml2YXRlTmFtZSwgd2UgZG8gbm90IG5lZWQgdG8gaW52ZXN0aWdhdGUgcHJvdG90
eXBlIGNoYWlucyBmdXJ0aGVyLgotICAgICAgICAgICAgICAgIC8vIENhY2hlYWJpbGl0eSBqdXN0
IGRlcGVuZHMgb24gdGhlIGhlYWQgc3RydWN0dXJlLgotICAgICAgICAgICAgICAgIGlmIChraW5k
ICE9IEdldEJ5S2luZDo6QnlJZERpcmVjdCAmJiAhaXNQcml2YXRlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5nKGdsb2JhbE9i
amVjdCwgYmFzZUNlbGwsIHNsb3QpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNhY2hlU3Rh
dHVzKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT5mbGF0dGVuZWREaWN0aW9uYXJ5KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9wZXJ0eSBvZmZzZXRzIG1heSBoYXZlIGNo
YW5nZWQgZHVlIHRvIGZsYXR0ZW5pbmcuIFdlJ2xsIGNhY2hlIGxhdGVyLgotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZVN0YXR1cy0+dXNlc1BvbHlQcm90bykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJv
dG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIHNsb3QpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBw
cm90b3R5cGVBY2Nlc3NDaGFpbi0+c2xvdEJhc2VTdHJ1Y3R1cmUodm0sIHN0cnVjdHVyZSktPmdl
dCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSA9PSBvZmZzZXQpOwotICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgdXNlIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IGluc3RlYWQgZm9yIGZhc3RlciBhY2Nlc3Nlcy4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IE1heWJlIHRoaXMgYGlmYCBzaG91bGQgYmUgaW5zaWRl
IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5QmxhaC4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUyMTUKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3Bl
cnR5TWlzcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywg
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZS51aWQoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlv
bnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2Uo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLnVpZCgpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghY29uZGl0aW9uU2V0
LmlzVmFsaWQoKSB8fCBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQoKSA9
PSBvZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90
b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLnVpZCgpLCBzbG90
LmF0dHJpYnV0ZXMoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNGdW5j
dGlvbiogZ2V0dGVyID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxl
R2V0dGVyKCkpCi0gICAgICAgICAgICAgICAgZ2V0dGVyID0ganNEeW5hbWljQ2FzdDxKU0Z1bmN0
aW9uKj4odm0sIHNsb3QuZ2V0dGVyU2V0dGVyKCktPmdldHRlcigpKTsKLQotICAgICAgICAgICAg
c3RkOjpvcHRpb25hbDxET01BdHRyaWJ1dGVBbm5vdGF0aW9uPiBkb21BdHRyaWJ1dGU7Ci0gICAg
ICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpICYmIHNsb3QuZG9tQXR0cmlidXRl
KCkpCi0gICAgICAgICAgICAgICAgZG9tQXR0cmlidXRlID0gc2xvdC5kb21BdHRyaWJ1dGUoKTsK
LQotICAgICAgICAgICAgaWYgKGtpbmQgPT0gR2V0QnlLaW5kOjpUcnlCeUlkKSB7Ci0gICAgICAg
ICAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlOwotICAgICAgICAgICAgICAgIGlm
IChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEFj
Y2Vzc0Nhc2U6OkxvYWQ7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2xvdC5pc1Vuc2V0KCkp
Ci0gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpNaXNzOwotICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVHZXR0ZXIoKSkKLSAgICAgICAgICAgICAg
ICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkdldEdldHRlcjsKLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAg
ICAgICAgICAgICAgICBuZXdDYXNlID0gUHJveHlhYmxlQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBj
b2RlQmxvY2ssIHR5cGUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlv
blNldCwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCksIFdURk1vdmUo
cHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxvYWRUYXJn
ZXRGcm9tUHJveHkgJiYgZ2V0dGVyICYmIEludHJpbnNpY0dldHRlckFjY2Vzc0Nhc2U6OmNhbkVt
aXRJbnRyaW5zaWNHZXR0ZXIoc3R1YkluZm8sIGdldHRlciwgc3RydWN0dXJlKSkKLSAgICAgICAg
ICAgICAgICBuZXdDYXNlID0gSW50cmluc2ljR2V0dGVyQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBj
b2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgc3RydWN0dXJlLCBj
b25kaXRpb25TZXQsIGdldHRlciwgV1RGTW92ZShwcm90b3R5cGVBY2Nlc3NDaGFpbikpOwotICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzUHJpdmF0ZSkgewotICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghc2xvdC5pc1Vuc2V0KCkpOwotICAgICAgICAg
ICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBpc1Byb3h5ID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBQcm94
eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6TG9hZCwg
cHJvcGVydHlOYW1lLCBvZmZzZXQsIHN0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbmRpdGlvblNldCwgaXNQcm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCksIFdURk1vdmUocHJv
dG90eXBlQWNjZXNzQ2hhaW4pKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNsb3QuaXND
YWNoZWFibGVWYWx1ZSgpIHx8IHNsb3QuaXNVbnNldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG5ld0Nhc2UgPSBQcm94eWFibGVBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNvZGVCbG9jaywgc2xv
dC5pc1Vuc2V0KCkgPyBBY2Nlc3NDYXNlOjpNaXNzIDogQWNjZXNzQ2FzZTo6TG9hZCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRp
dGlvblNldCwgbG9hZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCksIFdURk1v
dmUocHJvdG90eXBlQWNjZXNzQ2hhaW4pKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBBY2Nlc3NDYXNlOjpBY2Nlc3NUeXBlIHR5cGU7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlR2V0dGVyKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6R2V0dGVyOwotICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChzbG90LmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nl
c3NvcikKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpDdXN0b21B
Y2Nlc3NvckdldHRlcjsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZSA9IEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVlR2V0dGVyOwotCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChraW5kID09IEdldEJ5S2luZDo6QnlJZFdpdGhUaGlzICYmIHR5cGUg
PT0gQWNjZXNzQ2FzZTo6Q3VzdG9tQWNjZXNzb3JHZXR0ZXIgJiYgZG9tQXR0cmlidXRlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgbmV3Q2FzZSA9IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIHR5cGUsIHByb3BlcnR5TmFtZSwgb2Zm
c2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgbG9hZFRhcmdldEZyb21Qcm94eSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNsb3Qud2F0Y2hwb2ludFNldCgpLCBzbG90LmlzQ2FjaGVhYmxl
Q3VzdG9tKCkgPyBGdW5jdGlvblB0cjxDdXN0b21BY2Nlc3NvclB0clRhZz4oc2xvdC5jdXN0b21H
ZXR0ZXIoKSkgOiBudWxscHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgc2xvdC5pc0NhY2hl
YWJsZUN1c3RvbSgpICYmIHNsb3Quc2xvdEJhc2UoKSAhPSBiYXNlVmFsdWUgPyBzbG90LnNsb3RC
YXNlKCkgOiBudWxscHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgZG9tQXR0cmlidXRlLCBX
VEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpHZXRCeUFkZEFj
Y2Vzc0Nhc2UsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwodm0pLCBJZGVudGlmaWVyOjpmcm9t
VWlkKHZtLCBwcm9wZXJ0eU5hbWUudWlkKCkpLCBzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVl
KSk7Ci0KLSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGds
b2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIHByb3BlcnR5TmFtZSwg
V1RGTW92ZShuZXdDYXNlKSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29k
ZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5UmVwbGFjZVdpdGhKdW1w
LCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwg
cHJvcGVydHlOYW1lLnVpZCgpKSwgc2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZSkpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKLSAg
ICAgICAgICAgIHN3aXRjaCAoa2luZCkgewotICAgICAgICAgICAgY2FzZSBHZXRCeUtpbmQ6OkJ5
SWQ6Ci0gICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6QnlJZFdpdGhUaGlzOgotICAgICAgICAg
ICAgY2FzZSBHZXRCeUtpbmQ6OlRyeUJ5SWQ6Ci0gICAgICAgICAgICBjYXNlIEdldEJ5S2luZDo6
QnlJZERpcmVjdDoKLSAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2YXRlTmFtZUJ5SWQ6
Ci0gICAgICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3Mo
Y29kZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJU
YWc+KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgR2V0QnlLaW5kOjpCeVZhbDoKLSAgICAgICAgICAgIGNhc2UgR2V0QnlLaW5kOjpQcml2
YXRlTmFtZToKLSAgICAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJ
bkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihyZXN1bHQuY29kZSgpKSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJs
b2NrLCByZXN1bHQpOwotCi0gICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdp
dmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaEdldEJ5KEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBHZXRCeUtpbmQga2lu
ZCkKLXsKLSAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0g
ICAgCi0gICAgaWYgKHRyeUNhY2hlR2V0QnkoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VW
YWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywga2luZCkgPT0gR2l2ZVVwT25DYWNo
ZSkKLSAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHBy
b3ByaWF0ZUdldEJ5RnVuY3Rpb24oa2luZCkpOwotfQotCi0KLXN0YXRpYyBJbmxpbmVDYWNoZUFj
dGlvbiB0cnlDYWNoZUFycmF5R2V0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIGluZGV4LCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxs
KCkpCi0gICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgaWYgKCFpbmRleC5pc0lu
dDMyKCkpCi0gICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0KLSAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0K
LSAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2Nr
LT5tX2xvY2ssIGdsb2JhbE9iamVjdC0+dm0oKSk7Ci0KLSAgICAgICAgSlNDZWxsKiBiYXNlID0g
YmFzZVZhbHVlLmFzQ2VsbCgpOwotCi0gICAgICAgIEFjY2Vzc0Nhc2U6OkFjY2Vzc1R5cGUgYWNj
ZXNzVHlwZTsKLSAgICAgICAgaWYgKGJhc2UtPnR5cGUoKSA9PSBEaXJlY3RBcmd1bWVudHNUeXBl
KQotICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWREaXJlY3RBcmd1
bWVudHNMb2FkOwotICAgICAgICBlbHNlIGlmIChiYXNlLT50eXBlKCkgPT0gU2NvcGVkQXJndW1l
bnRzVHlwZSkKLSAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkU2Nv
cGVkQXJndW1lbnRzTG9hZDsKLSAgICAgICAgZWxzZSBpZiAoYmFzZS0+dHlwZSgpID09IFN0cmlu
Z1R5cGUpCi0gICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFN0cmlu
Z0xvYWQ7Ci0gICAgICAgIGVsc2UgaWYgKGlzVHlwZWRWaWV3KGJhc2UtPmNsYXNzSW5mbyh2bSkt
PnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoYmFzZS0+Y2xh
c3NJbmZvKHZtKS0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFR5
cGVJbnQ4OgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVk
VHlwZWRBcnJheUludDhMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBUeXBlVWludDg6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6
OkluZGV4ZWRUeXBlZEFycmF5VWludDhMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5
cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQ4Q2xhbXBlZExvYWQ7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVJbnQxNjoKLSAgICAgICAg
ICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlJbnQxNkxv
YWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVVaW50MTY6
Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFy
cmF5VWludDE2TG9hZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
VHlwZUludDMyOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRl
eGVkVHlwZWRBcnJheUludDMyTG9hZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgVHlwZVVpbnQzMjoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNz
Q2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50MzJMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQzMjoKLSAgICAgICAgICAgICAgICBhY2Nlc3NU
eXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyTG9hZDsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0NjQ6Ci0gICAgICAgICAg
ICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBlZEFycmF5RmxvYXQ2NExv
YWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAvLyBGSVhNRTogT3B0aW1p
emUgQmlnSW50NjRBcnJheSAvIEJpZ1VpbnQ2NEFycmF5IGluIElDCi0gICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTgzCi0gICAgICAgICAg
ICBjYXNlIFR5cGVCaWdJbnQ2NDoKLSAgICAgICAgICAgIGNhc2UgVHlwZUJpZ1VpbnQ2NDoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEluZGV4aW5nVHlwZSBpbmRleGlu
Z1NoYXBlID0gYmFzZS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFzazsKLSAgICAg
ICAgICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgewotICAgICAgICAgICAgY2FzZSBJbnQzMlNo
YXBlOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkSW50
MzJMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBEb3VibGVT
aGFwZToKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZERv
dWJsZUxvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENvbnRp
Z3VvdXNTaGFwZToKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5k
ZXhlZENvbnRpZ3VvdXNMb2FkOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBBcnJheVN0b3JhZ2VTaGFwZToKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNj
ZXNzQ2FzZTo6SW5kZXhlZEFycmF5U3RvcmFnZUxvYWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0ID0gc3R1Yklu
Zm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9k
ZTo6c3RyaWN0KCksIG51bGxwdHIsIEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBh
Y2Nlc3NUeXBlLCBudWxscHRyKSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21l
Q29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkdldEJ5UmVwbGFjZVdpdGhK
dW1wLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKHZtKSwgSWRlbnRpZmllcigpKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAg
ICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lu
bGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHVi
Um91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
ZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxv
Y2ssIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVV
cE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaEFycmF5R2V0QnlW
YWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpT
VmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQot
ewotICAgIGlmICh0cnlDYWNoZUFycmF5R2V0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ss
IGJhc2UsIGluZGV4LCBzdHViSW5mbykgPT0gR2l2ZVVwT25DYWNoZSkKLSAgICAgICAgcmVwYXRj
aFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25HZXRCeVZhbEdlbmVy
aWMpOwotfQotCi1zdGF0aWMgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBhcHByb3ByaWF0
ZUdlbmVyaWNQdXRCeUZ1bmN0aW9uKGNvbnN0IFB1dFByb3BlcnR5U2xvdCAmc2xvdCwgUHV0QnlL
aW5kIHB1dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQotewotICAgIHN3aXRjaCAocHV0QnlLaW5k
KSB7Ci0gICAgY2FzZSBQdXRCeUtpbmQ6OkJ5SWQ6IHsKLSAgICAgICAgc3dpdGNoIChwdXRLaW5k
KSB7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgotICAgICAgICAgICAgaWYgKHNs
b3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3Q7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdDsK
LSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc1N0
cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dFN0cmljdDsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3Ry
aWN0OwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZERlZmluZToKLSAg
ICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgICAgIHJldHVy
biBvcGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0OwotICAgICAgICBjYXNl
IFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoKLSAgICAgICAgICAgIEFTU0VSVChzbG90
LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeUlkU2V0
UHJpdmF0ZUZpZWxkU3RyaWN0OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBjYXNlIFB1dEJ5S2luZDo6QnlWYWw6IHsKLSAgICAgICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0g
ICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgotICAgICAgICAgICAgaWYgKHNsb3QuaXNT
dHJpY3RNb2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU3Ry
aWN0R2VuZXJpYzsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmlj
dEdlbmVyaWM7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0OgotICAgICAgICAgICAgaWYg
KHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkRp
cmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYzsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbE5vblN0cmljdEdlbmVyaWM7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGly
ZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgotICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNTdHJpY3RN
b2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsRGVmaW5lUHJpdmF0
ZUZpZWxkR2VuZXJpYzsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3RQcml2YXRlRmllbGRT
ZXQ6Ci0gICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxTZXRQcml2YXRlRmllbGRHZW5lcmljOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0gICAgLy8gTWFrZSB3aW4gcG9ydCBj
b21waWxlciBoYXBweQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIG51bGxwdHI7Ci19Ci0KLXN0YXRpYyBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGFw
cHJvcHJpYXRlT3B0aW1pemluZ1B1dEJ5RnVuY3Rpb24oY29uc3QgUHV0UHJvcGVydHlTbG90ICZz
bG90LCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCi17Ci0gICAgc3dpdGNo
IChwdXRCeUtpbmQpIHsKLSAgICBjYXNlIFB1dEJ5S2luZDo6QnlJZDoKLSAgICAgICAgc3dpdGNo
IChwdXRLaW5kKSB7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6Tm90RGlyZWN0OgotICAgICAgICAg
ICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Q
dXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGNhc2UgUHV0S2luZDo6RGlyZWN0Ogot
ICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGNh
c2UgUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkRGVmaW5lOgotICAgICAgICAgICAgQVNTRVJU
KHNsb3QuaXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5
SWREZWZpbmVQcml2YXRlRmllbGRTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgY2FzZSBQdXRLaW5k
OjpEaXJlY3RQcml2YXRlRmllbGRTZXQ6Ci0gICAgICAgICAgICBBU1NFUlQoc2xvdC5pc1N0cmlj
dE1vZGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZFNldFByaXZhdGVG
aWVsZFN0cmljdE9wdGltaXplOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
UHV0QnlLaW5kOjpCeVZhbDoKLSAgICAgICAgc3dpdGNoIChwdXRLaW5kKSB7Ci0gICAgICAgIGNh
c2UgUHV0S2luZDo6Tm90RGlyZWN0OgotICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2Rl
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1p
emU7Ci0gICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RPcHRpbWl6
ZTsKLSAgICAgICAgY2FzZSBQdXRLaW5kOjpEaXJlY3Q6Ci0gICAgICAgICAgICBpZiAoc2xvdC5p
c1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbE5vblN0cmljdE9wdGltaXplOwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFBy
aXZhdGVGaWVsZERlZmluZToKLSAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgp
KTsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVs
ZE9wdGltaXplOwotICAgICAgICBjYXNlIFB1dEtpbmQ6OkRpcmVjdFByaXZhdGVGaWVsZFNldDoK
LSAgICAgICAgICAgIEFTU0VSVChzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgICAgIHJl
dHVybiBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAvLyBNYWtlIHdpbiBwb3J0IGNvbXBpbGVyIGhh
cHB5Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnkoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZVZh
bHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0
eU5hbWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0
dWJJbmZvLCBQdXRCeUtpbmQgcHV0QnlLaW5kLCBQdXRLaW5kIHB1dEtpbmQpCi17Ci0gICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVz
dWx0OwotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBwcm9w
ZXJ0eU5hbWUudWlkKCkpOwotICAgIHsKLSAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2JqZWN0LT52bSgpKTsKLQotICAgICAg
ICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkp
Ci0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgCi0gICAgICAgIGlm
ICghc2xvdC5pc0NhY2hlYWJsZVB1dCgpICYmICFzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgJiYg
IXNsb3QuaXNDYWNoZWFibGVTZXR0ZXIoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotCi0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdHJ5IHRvIGRvIHNvbWV0aGluZyBz
bWFydGVyIGhlcmUuLi4KLSAgICAgICAgaWYgKGlzQ29weU9uV3JpdGUob2xkU3RydWN0dXJlLT5p
bmRleGluZ01vZGUoKSkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAg
ICAgLy8gV2UgY2FuJ3QgZW5kIHVwIHN0b3JpbmcgdG8gYSBDb1cgb24gdGhlIHByb3RvdHlwZSBz
aW5jZSBpdCBzaG91bGRuJ3Qgb3duIHByb3BlcnRpZXMuCi0gICAgICAgIEFTU0VSVCghaXNDb3B5
T25Xcml0ZShzbG90LmJhc2UoKS0+aW5kZXhpbmdNb2RlKCkpKTsKLQotICAgICAgICBpZiAoIW9s
ZFN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgSlNDZWxsKiBiYXNlQ2VsbCA9IGJhc2VW
YWx1ZS5hc0NlbGwoKTsKLQotICAgICAgICBib29sIGlzUHJveHkgPSBmYWxzZTsKLSAgICAgICAg
aWYgKGJhc2VDZWxsLT50eXBlKCkgPT0gUHVyZUZvcndhcmRpbmdQcm94eVR5cGUpIHsKLSAgICAg
ICAgICAgIGJhc2VDZWxsID0ganNDYXN0PEpTUHJveHkqPihiYXNlQ2VsbCktPnRhcmdldCgpOwot
ICAgICAgICAgICAgYmFzZVZhbHVlID0gYmFzZUNlbGw7Ci0gICAgICAgICAgICBpc1Byb3h5ID0g
dHJ1ZTsKLQotICAgICAgICAgICAgLy8gV2UgY3VycmVudGx5IG9ubHkgY2FjaGUgUmVwbGFjZSBh
bmQgSlMvQ3VzdG9tIFNldHRlcnMgb24gSlNQcm94eS4gV2UgZG9uJ3QKLSAgICAgICAgICAgIC8v
IGNhY2hlIHRyYW5zaXRpb25zIGJlY2F1c2UgZ2xvYmFsIG9iamVjdHMgd2lsbCBuZXZlciBzaGFy
ZSB0aGUgc2FtZSBzdHJ1Y3R1cmUKLSAgICAgICAgICAgIC8vIGluIG91ciBjdXJyZW50IGltcGxl
bWVudGF0aW9uLgotICAgICAgICAgICAgYm9vbCBpc0NhY2hlYWJsZVByb3h5ID0gKHNsb3QuaXND
YWNoZWFibGVQdXQoKSAmJiBzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6OkV4aXN0aW5n
UHJvcGVydHkpCi0gICAgICAgICAgICAgICAgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpCi0g
ICAgICAgICAgICAgICAgfHwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpOwotICAgICAgICAgICAg
aWYgKCFpc0NhY2hlYWJsZVByb3h5KQotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzUHJveHkgJiYgKHB1dEtpbmQgPT0gUHV0
S2luZDo6RGlyZWN0UHJpdmF0ZUZpZWxkU2V0IHx8IHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0
UHJpdmF0ZUZpZWxkRGVmaW5lKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwot
Ci0gICAgICAgIFJlZlB0cjxBY2Nlc3NDYXNlPiBuZXdDYXNlOwotCi0gICAgICAgIGlmIChzbG90
LmJhc2UoKSA9PSBiYXNlVmFsdWUgJiYgc2xvdC5pc0NhY2hlYWJsZVB1dCgpKSB7Ci0gICAgICAg
ICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpFeGlzdGluZ1Byb3BlcnR5
KSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyBhc3NlcnQgaGVscHMgY2F0Y2ggYnVncyBpZiB3
ZSBhY2NpZGVudGFsbHkgZm9yZ2V0IHRvIGRpc2FibGUgY2FjaGluZwotICAgICAgICAgICAgICAg
IC8vIHdoZW4gd2UgdHJhbnNpdGlvbiB0aGVuIHN0b3JlIHRvIGFuIGV4aXN0aW5nIHByb3BlcnR5
LiBUaGlzIGlzIGNvbW1vbiBhbW9uZwotICAgICAgICAgICAgICAgIC8vIHBhdGhzIHRoYXQgcmVp
ZnkgbGF6eSBwcm9wZXJ0aWVzLiBJZiB3ZSByZWlmeSBhIGxhenkgcHJvcGVydHkgYW5kIGZvcmdl
dAotICAgICAgICAgICAgICAgIC8vIHRvIGRpc2FibGUgY2FjaGluZywgd2UgbWF5IGNvbWUgZG93
biB0aGlzIHBhdGguIFRoZSBSZXBsYWNlIElDIGRvZXMgbm90Ci0gICAgICAgICAgICAgICAgLy8g
a25vdyBob3cgdG8gbW9kZWwgdGhlc2UgdHlwZXMgb2Ygc3RydWN0dXJlIHRyYW5zaXRpb25zIChv
ciBhbnkgc3RydWN0dXJlCi0gICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBmb3IgdGhhdCBt
YXR0ZXIpLgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5hc0NlbGwo
KS0+c3RydWN0dXJlKHZtKSA9PSBvbGRTdHJ1Y3R1cmUpOwotCi0gICAgICAgICAgICAgICAgb2xk
U3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zm
c2V0KCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHN0dWJJbmZvLmNhY2hl
VHlwZSgpID09IENhY2hlVHlwZTo6VW5zZXQKLSAgICAgICAgICAgICAgICAgICAgJiYgSW5saW5l
QWNjZXNzOjpjYW5HZW5lcmF0ZVNlbGZQcm9wZXJ0eVJlcGxhY2UoY29kZUJsb2NrLCBzdHViSW5m
bywgc2xvdC5jYWNoZWRPZmZzZXQoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgIW9sZFN0cnVj
dHVyZS0+bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpCi0gICAgICAgICAgICAgICAgICAg
ICYmICFpc1Byb3h5KSB7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVBY2Nlc3M6OmdlbmVyYXRlU2VsZlBy
b3BlcnR5UmVwbGFjZShjb2RlQmxvY2ssIHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdGVkQ29kZUlubGlu
ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpQdXRCeVNlbGZQ
YXRjaCwgb2xkU3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJh
c2VWYWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChj
b2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdQdXRCeUZ1bmN0aW9uKHNs
b3QsIHB1dEJ5S2luZCwgcHV0S2luZCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3R1Yklu
Zm8uaW5pdFB1dEJ5SWRSZXBsYWNlKGxvY2tlciwgY29kZUJsb2NrLCBvbGRTdHJ1Y3R1cmUsIHNs
b3QuY2FjaGVkT2Zmc2V0KCksIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFByb3h5YWJsZUFjY2Vzc0Nh
c2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpSZXBsYWNlLCBwcm9wZXJ0eU5h
bWUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIG9sZFN0cnVjdHVyZSwgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQoKSwgaXNQcm94eSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIEFTU0VSVCghaXNQcm94eSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHNsb3QudHlwZSgp
ID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpOwotCi0gICAgICAgICAgICAgICAgaWYg
KCFvbGRTdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG9sZCBzdHJ1Y3R1cmUg
aXMgZGljdGlvbmFyeSwgaXQgbWVhbnMgdGhhdCB0aGlzIGlzIG9uZS1vbi1vbmUgYmV0d2VlbiBh
biBvYmplY3QgYW5kIGEgc3RydWN0dXJlLgotICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMg
TmV3UHJvcGVydHkgb3BlcmF0aW9uLCBnZW5lcmF0aW5nIElDIGZvciB0aGlzIGRvZXMgbm90IG9m
ZmVyIGFueSBiZW5lZml0IGJlY2F1c2UgdGhpcyB0cmFuc2l0aW9uIG5ldmVyIGhhcHBlbnMgYWdh
aW4uCi0gICAgICAgICAgICAgICAgaWYgKG9sZFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0KLSAgICAgICAgICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdT
dHJ1Y3R1cmVDb25jdXJyZW50bHkob2xkU3RydWN0dXJlLCBpZGVudC5pbXBsKCksIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Tm9uZSksIG9mZnNldCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFuZXdTdHJ1Y3R1cmUgfHwgIW5ld1N0cnVjdHVyZS0+cHJvcGVydHlBY2Nl
c3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKLQotICAgICAgICAgICAgICAgIC8vIElmIEpTT2JqZWN0OjpwdXQgaXMgb3ZlcnJpZGRl
biBieSBVc2VyT2JqZWN0LCBVc2VyT2JqZWN0OjpwdXQgcGVyZm9ybXMgc2lkZS1lZmZlY3Qgb24g
SlNPYmplY3Q6OnB1dCwgYW5kIGl0IG5lZ2xlY3RzIHRvIG1hcmsgdGhlIFB1dFByb3BlcnR5U2xv
dCBhcyBub24tY2FjaGFlYmxlLAotICAgICAgICAgICAgICAgIC8vIHRoZW4gYXJiaXRyYXJ5IHN0
cnVjdHVyZSB0cmFuc2l0aW9ucyBjYW4gaGFwcGVuIGR1cmluZyB0aGUgcHV0IG9wZXJhdGlvbiwg
YW5kIHRoaXMgZ2VuZXJhdGVzIHdyb25nIHRyYW5zaXRpb24gaW5mb3JtYXRpb24gaGVyZSBhcyBp
ZiBvbGRTdHJ1Y3R1cmUgLT4gbmV3U3RydWN0dXJlLgotICAgICAgICAgICAgICAgIC8vIEluIHJl
YWxpdHksIHRoZSB0cmFuc2l0aW9uIGlzIG9sZFN0cnVjdHVyZSAtPiBzb21ldGhpbmcgdW5rbm93
biBzdHJ1Y3R1cmVzIC0+IGJhc2VWYWx1ZSdzIHN0cnVjdHVyZS4KLSAgICAgICAgICAgICAgICAv
LyBUbyBndWFyZCBhZ2FpbnN0IHRoZSBlbWJlZGRlcidzIHBvdGVudGlhbGx5IGluY29ycmVjdCBV
c2VyT2JqZWN0OjpwdXQgaW1wbGVtZW50YXRpb24sIHdlIHNob3VsZCBjaGVjayBmb3IgdGhpcyBj
b25kaXRpb24gYW5kIGlmIGZvdW5kLCBhbmQgZ2l2ZSB1cCBvbiBjYWNoaW5nIHRoZSBwdXQuCi0g
ICAgICAgICAgICAgICAgQVNTRVJUKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKSA9
PSBuZXdTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIGlmIChiYXNlVmFsdWUuYXNDZWxsKCkt
PnN0cnVjdHVyZSh2bSkgIT0gbmV3U3RydWN0dXJlKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1Y3R1cmUt
PnByZXZpb3VzSUQoKSA9PSBvbGRTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIEFTU0VSVCgh
bmV3U3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5l
d1N0cnVjdHVyZS0+aXNPYmplY3QoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nlc3NDaGFpbjsKLSAg
ICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0g
ICAgICAgICAgICAgICAgaWYgKHB1dEtpbmQgPT0gUHV0S2luZDo6Tm90RGlyZWN0KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hhaW5Gb3JDYWNoaW5n
KGdsb2JhbE9iamVjdCwgYmFzZUNlbGwsIG51bGxwdHIpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWNhY2hlU3RhdHVzKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVBy
b3RvKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IFBv
bHlQcm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgbnVs
bHB0cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3RvdHlwZUFjY2Vzc0NoYWlu
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90
eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0
aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvcGVydHlTZXR0ZXJNaXNzKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgbmV3U3Ry
dWN0dXJlLCBpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25k
aXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBH
aXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKHB1dEtpbmQgPT0gUHV0S2luZDo6RGlyZWN0UHJpdmF0ZUZp
ZWxkRGVmaW5lKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChpZGVudC5pc1ByaXZhdGVO
YW1lKCkpOwotICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRp
dGlvbnNGb3JQcm9wZXJ0eU1pc3Modm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBuZXdTdHJ1
Y3R1cmUsIGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9u
U2V0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNh
Y2hlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nl
c3NDYXNlOjpjcmVhdGVUcmFuc2l0aW9uKHZtLCBjb2RlQmxvY2ssIHByb3BlcnR5TmFtZSwgb2Zm
c2V0LCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBXVEZNb3ZlKHBy
b3RvdHlwZUFjY2Vzc0NoYWluKSwgc3R1YkluZm8pOwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgaWYgKHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBzbG90LmlzQ2FjaGVhYmxlU2V0
dGVyKCkpIHsKLSAgICAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKLSAg
ICAgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7Ci0g
ICAgICAgICAgICAgICAgUmVmUHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBwcm90b3R5cGVBY2Nl
c3NDaGFpbjsKLQotICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gdGhpcyBldmVuIGlm
IHdlJ3JlIGEgc2VsZiBjdXN0b20sIHNpbmNlIHdlIG11c3QgZGlzYWxsb3cgZGljdGlvbmFyaWVz
Ci0gICAgICAgICAgICAgICAgLy8gYmVjYXVzZSB3ZSBuZWVkIHRvIGJlIGluZm9ybWVkIGlmIHRo
ZSBjdXN0b20gZ29lcyBhd2F5IHNpbmNlIHdlIGNhY2hlIHRoZSBjb25zdGFudAotICAgICAgICAg
ICAgICAgIC8vIGZ1bmN0aW9uIHBvaW50ZXIuCi0gICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0
YXR1cyA9IHByZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xv
dC5iYXNlKCkpOwotICAgICAgICAgICAgICAgIGlmICghY2FjaGVTdGF0dXMpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAgaWYgKHNs
b3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVT
dGF0dXMtPnVzZXNQb2x5UHJvdG8pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlw
ZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0ZShnbG9iYWxPYmpl
Y3QsIGJhc2VDZWxsLCBzbG90LmJhc2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IXByb3RvdHlwZUFjY2Vzc0NoYWluKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOwotICAgICAgICAg
ICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90
eXBlUHJvcGVydHlIaXRDdXN0b20oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNv
ZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5p
bXBsKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Tm9uZSkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbmV3Q2Fz
ZSA9IEdldHRlclNldHRlckFjY2Vzc0Nhc2U6OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAg
dm0sIGNvZGVCbG9jaywgc2xvdC5pc0N1c3RvbUFjY2Vzc29yKCkgPyBBY2Nlc3NDYXNlOjpDdXN0
b21BY2Nlc3NvclNldHRlciA6IEFjY2Vzc0Nhc2U6OkN1c3RvbVZhbHVlU2V0dGVyLCBvbGRTdHJ1
Y3R1cmUsIHByb3BlcnR5TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgaW52YWxpZE9mZnNldCwg
Y29uZGl0aW9uU2V0LCBXVEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSwgaXNQcm94eSwgc2xv
dC5jdXN0b21TZXR0ZXIoKS5yZXRhZ2dlZDxDdXN0b21BY2Nlc3NvclB0clRhZz4oKSwgc2xvdC5i
YXNlKCkgIT0gYmFzZVZhbHVlID8gc2xvdC5iYXNlKCkgOiBudWxscHRyKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHNsb3QuaXNDYWNoZWFibGVTZXR0ZXIo
KSk7Ci0gICAgICAgICAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgY29uZGl0aW9u
U2V0OwotICAgICAgICAgICAgICAgIFJlZlB0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90
eXBlQWNjZXNzQ2hhaW47Ci0gICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
c2xvdC5jYWNoZWRPZmZzZXQoKTsKLQotICAgICAgICAgICAgICAgIGlmIChzbG90LmJhc2UoKSAh
PSBiYXNlVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBjYWNoZVN0YXR1cyA9IHBy
ZXBhcmVDaGFpbkZvckNhY2hpbmcoZ2xvYmFsT2JqZWN0LCBiYXNlQ2VsbCwgc2xvdC5iYXNlKCkp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNhY2hlU3RhdHVzKQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChj
YWNoZVN0YXR1cy0+ZmxhdHRlbmVkRGljdGlvbmFyeSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hl
U3RhdHVzLT51c2VzUG9seVByb3RvKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5
cGVBY2Nlc3NDaGFpbiA9IFBvbHlQcm90b0FjY2Vzc0NoYWluOjp0cnlDcmVhdGUoZ2xvYmFsT2Jq
ZWN0LCBiYXNlQ2VsbCwgc2xvdC5iYXNlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGF0dHJp
YnV0ZXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBwcm90b3R5cGVBY2Nlc3ND
aGFpbi0+c2xvdEJhc2VTdHJ1Y3R1cmUodm0sIGJhc2VDZWxsLT5zdHJ1Y3R1cmUodm0pKS0+Z2V0
KHZtLCBpZGVudC5pbXBsKCksIGF0dHJpYnV0ZXMpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkgfHwgIShhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRy
aWJ1dGU6OkFjY2Vzc29yKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0
cnlDYWNoZUxhdGVyOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOwotICAgICAgICAgICAg
ICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBl
UHJvcGVydHlIaXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywg
Z2xvYmFsT2JqZWN0LCBvbGRTdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIShjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5h
dHRyaWJ1dGVzKCkgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3IpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBvZmZzZXQgPSBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRpb24oKS5vZmZzZXQo
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIG5ld0Nhc2UgPSBHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlOjpjcmVhdGUoCi0gICAgICAg
ICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6OlNldHRlciwgb2xkU3RydWN0
dXJlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgY29uZGl0aW9uU2V0LCBXVEZNb3ZlKHByb3RvdHlw
ZUFjY2Vzc0NoYWluKSwgaXNQcm94eSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5QWRkQWNjZXNzQ2FzZSwgb2xkU3RydWN0dXJlLT5j
bGFzc0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwotICAgICAgICAK
LSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9i
amVjdCwgY29kZUJsb2NrLCBzbG90LmlzU3RyaWN0TW9kZSgpID8gRUNNQU1vZGU6OnN0cmljdCgp
IDogRUNNQU1vZGU6OnNsb3BweSgpLCBwcm9wZXJ0eU5hbWUsIFdURk1vdmUobmV3Q2FzZSkpOwot
Ci0gICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAgICAgICAg
TE9HX0lDKChJQ0V2ZW50OjpQdXRCeVJlcGxhY2VXaXRoSnVtcCwgb2xkU3RydWN0dXJlLT5jbGFz
c0luZm8oKSwgaWRlbnQsIHNsb3QuYmFzZSgpID09IGJhc2VWYWx1ZSkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKLQotICAgICAgICAg
ICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBzdHVi
SW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2Rl
KCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1
YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOwotCi0gICAgcmV0dXJu
IHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0
ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaFB1dEJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgU3RydWN0dXJlKiBvbGRT
dHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLCBjb25zdCBQdXRQcm9w
ZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgUHV0QnlLaW5kIHB1
dEJ5S2luZCwgUHV0S2luZCBwdXRLaW5kKQotewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVy
U2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICAKLSAgICBpZiAodHJ5Q2FjaGVQdXRCeShnbG9iYWxP
YmplY3QsIGNvZGVCbG9jaywgYmFzZVZhbHVlLCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwg
c2xvdCwgc3R1YkluZm8sIHB1dEJ5S2luZCwgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKLSAg
ICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0
ZUdlbmVyaWNQdXRCeUZ1bmN0aW9uKHNsb3QsIHB1dEJ5S2luZCwgcHV0S2luZCkpOwotfQotCi1z
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVBcnJheVB1dEJ5VmFsKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIGJhc2VWYWx1
ZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kKQot
ewotICAgIGlmICghYmFzZVZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKLQotICAgIGlmICghaW5kZXguaXNJbnQzMigpKQotICAgICAgICByZXR1cm4gUmV0cnlD
YWNoZUxhdGVyOwotCi0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vz
c0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwotCi0gICAgewotICAgICAgICBKU0NlbGwqIGJhc2Ug
PSBiYXNlVmFsdWUuYXNDZWxsKCk7Ci0KLSAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSBh
Y2Nlc3NUeXBlOwotICAgICAgICBpZiAoaXNUeXBlZFZpZXcoYmFzZS0+Y2xhc3NJbmZvKHZtKS0+
dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSkgewotICAgICAgICAgICAgc3dpdGNoIChiYXNlLT5jbGFz
c0luZm8odm0pLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVHlw
ZUludDg6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRU
eXBlZEFycmF5SW50OFN0b3JlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBUeXBlVWludDg6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6
OkluZGV4ZWRUeXBlZEFycmF5VWludDhTdG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKLSAgICAgICAgICAgICAgICBhY2Nlc3NU
eXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlVaW50OENsYW1wZWRTdG9yZTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVHlwZUludDE2OgotICAgICAg
ICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUludDE2
U3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVVaW50
MTY6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6OkluZGV4ZWRUeXBl
ZEFycmF5VWludDE2U3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIFR5cGVJbnQzMjoKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6
SW5kZXhlZFR5cGVkQXJyYXlJbnQzMlN0b3JlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBUeXBlVWludDMyOgotICAgICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBB
Y2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheVVpbnQzMlN0b3JlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQzMjoKLSAgICAgICAgICAgICAgICBh
Y2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6SW5kZXhlZFR5cGVkQXJyYXlGbG9hdDMyU3RvcmU7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDY0OgotICAg
ICAgICAgICAgICAgIGFjY2Vzc1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkVHlwZWRBcnJheUZs
b2F0NjRTdG9yZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBPcHRpbWl6ZSBCaWdJbnQ2NEFycmF5IC8gQmlnVWludDY0QXJyYXkgaW4gSUMKLSAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKLSAg
ICAgICAgICAgIGNhc2UgVHlwZUJpZ0ludDY0OgotICAgICAgICAgICAgY2FzZSBUeXBlQmlnVWlu
dDY0OgotICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW5kZXhpbmdUeXBl
IGluZGV4aW5nU2hhcGUgPSBiYXNlLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNr
OwotICAgICAgICAgICAgc3dpdGNoIChpbmRleGluZ1NoYXBlKSB7Ci0gICAgICAgICAgICBjYXNl
IEludDMyU2hhcGU6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vzc0Nhc2U6Oklu
ZGV4ZWRJbnQzMlN0b3JlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBEb3VibGVTaGFwZToKLSAgICAgICAgICAgICAgICBhY2Nlc3NUeXBlID0gQWNjZXNzQ2FzZTo6
SW5kZXhlZERvdWJsZVN0b3JlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBDb250aWd1b3VzU2hhcGU6Ci0gICAgICAgICAgICAgICAgYWNjZXNzVHlwZSA9IEFjY2Vz
c0Nhc2U6OkluZGV4ZWRDb250aWd1b3VzU3RvcmU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIEFycmF5U3RvcmFnZVNoYXBlOgotICAgICAgICAgICAgICAgIGFjY2Vz
c1R5cGUgPSBBY2Nlc3NDYXNlOjpJbmRleGVkQXJyYXlTdG9yYWdlU3RvcmU7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgR0NT
YWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgZ2xvYmFsT2Jq
ZWN0LT52bSgpKTsKLSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2Nr
ZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIG51bGxwdHIs
IEFjY2Vzc0Nhc2U6OmNyZWF0ZSh2bSwgY29kZUJsb2NrLCBhY2Nlc3NUeXBlLCBudWxscHRyKSk7
Ci0KLSAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAg
ICBMT0dfSUMoKElDRXZlbnQ6OlB1dEJ5UmVwbGFjZVdpdGhKdW1wLCBiYXNlVmFsdWUuY2xhc3NJ
bmZvT3JOdWxsKHZtKSwgSWRlbnRpZmllcigpKSk7Ci0KLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHVi
QXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVk
ZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5z
aG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0K
LXZvaWQgcmVwYXRjaEFycmF5UHV0QnlWYWwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRleCwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBQdXRLaW5kIHB1dEtpbmQsIEVDTUFNb2RlIGVjbWFNb2Rl
KQotewotICAgIGlmICh0cnlDYWNoZUFycmF5UHV0QnlWYWwoZ2xvYmFsT2JqZWN0LCBjb2RlQmxv
Y2ssIGJhc2UsIGluZGV4LCBzdHViSW5mbywgcHV0S2luZCkgPT0gR2l2ZVVwT25DYWNoZSkKLSAg
ICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBwdXRLaW5kID09
IFB1dEtpbmQ6OkRpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxTdHJpY3RHZW5lcmljIDogb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxOb25TdHJpY3RH
ZW5lcmljKSA6IChlY21hTW9kZS5pc1N0cmljdCgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RH
ZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3RHZW5lcmljKSk7Ci19Ci0KLXN0YXRp
YyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZURlbGV0ZUJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3Qs
IEpTVmFsdWUgYmFzZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRl
bnRpZmllciBwcm9wZXJ0eU5hbWUsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRGVsQnlL
aW5kLCBFQ01BTW9kZSBlY21hTW9kZSkKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0KLSAgICB7Ci0gICAgICAg
IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIGdsb2Jh
bE9iamVjdC0+dm0oKSk7Ci0KLSAgICAgICAgaWYgKGZvcmNlSUNGYWlsdXJlKGdsb2JhbE9iamVj
dCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICBBU1NFUlQo
b2xkU3RydWN0dXJlKTsKLSAgICAgICAgaWYgKCFiYXNlVmFsdWUuaXNPYmplY3QoKSB8fCAhb2xk
U3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkgfHwgb2xkU3RydWN0dXJl
LT5pc1Byb3h5KCkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAg
ICBpZiAoIXNsb3QuaXNDYWNoZWFibGVEZWxldGUoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotCi0gICAgICAgIGlmIChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgp
LT5pc0RpY3Rpb25hcnkoKSkgewotICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+
c3RydWN0dXJlKCktPmhhc0JlZW5GbGF0dGVuZWRCZWZvcmUoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgICAgIGpzQ2FzdDxKU09iamVjdCo+KGJhc2VW
YWx1ZSktPmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KHZtKTsKLSAgICAgICAgICAgIHJldHVybiBS
ZXRyeUNhY2hlTGF0ZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAob2xkU3RydWN0dXJlLT5p
c0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBSZXRyeUNhY2hlTGF0ZXI7Ci0KLSAg
ICAgICAgUmVmUHRyPEFjY2Vzc0Nhc2U+IG5ld0Nhc2U7Ci0KLSAgICAgICAgaWYgKHNsb3QuaXNE
ZWxldGVIaXQoKSkgewotICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgbmV3T2Zmc2V0ID0gaW52
YWxpZE9mZnNldDsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0
dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb25Gcm9tRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJy
ZW50bHkob2xkU3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUudWlkKCksIG5ld09mZnNldCk7Ci0gICAg
ICAgICAgICBpZiAoIW5ld1N0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlD
YWNoZUxhdGVyOwotICAgICAgICAgICAgaWYgKCFuZXdTdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNz
ZXNBcmVDYWNoZWFibGUoKSB8fCBuZXdTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAgICAgQVNTRVJUKG5ld09m
ZnNldCA9PSBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChuZXdTdHJ1
Y3R1cmUtPnByZXZpb3VzSUQoKSA9PSBvbGRTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgQVNTRVJU
KG5ld1N0cnVjdHVyZS0+dHJhbnNpdGlvbktpbmQoKSA9PSBUcmFuc2l0aW9uS2luZDo6UHJvcGVy
dHlEZWxldGlvbik7Ci0gICAgICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc09iamVjdCgp
KTsKLSAgICAgICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG5ld09mZnNldCkpOwotICAgICAg
ICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZURlbGV0ZSh2bSwgY29kZUJsb2NrLCBw
cm9wZXJ0eU5hbWUsIG5ld09mZnNldCwgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpOwotICAg
ICAgICB9IGVsc2UgaWYgKHNsb3QuaXNOb25jb25maWd1cmFibGUoKSkgewotICAgICAgICAgICAg
aWYgKGVjbWFNb2RlLmlzU3RyaWN0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9u
Q2FjaGU7Ci0KLSAgICAgICAgICAgIG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUodm0sIGNv
ZGVCbG9jaywgQWNjZXNzQ2FzZTo6RGVsZXRlTm9uQ29uZmlndXJhYmxlLCBwcm9wZXJ0eU5hbWUs
IGludmFsaWRPZmZzZXQsIG9sZFN0cnVjdHVyZSwgeyB9LCBudWxscHRyKTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBjb2RlQmxv
Y2ssIEFjY2Vzc0Nhc2U6OkRlbGV0ZU1pc3MsIHByb3BlcnR5TmFtZSwgaW52YWxpZE9mZnNldCwg
b2xkU3RydWN0dXJlLCB7IH0sIG51bGxwdHIpOwotCi0gICAgICAgIHJlc3VsdCA9IHN0dWJJbmZv
LmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgZWNtYU1vZGUs
IHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdC5n
ZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQu
Y29kZSgpKTsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6RGVsQnlSZXBsYWNlV2l0aEp1
bXAsIG9sZFN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIElkZW50aWZpZXI6OmZyb21VaWQodm0sIHBy
b3BlcnR5TmFtZS51aWQoKSkpKTsKLSAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3aXJlU3R1
YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbywg
Q29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2RlKCkpKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVl
ZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOwotCi0gICAgcmV0dXJuIHJlc3Vs
dC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19
Ci0KLXZvaWQgcmVwYXRjaERlbGV0ZUJ5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUgYmFz
ZVZhbHVlLCBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9w
ZXJ0eU5hbWUsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgRGVsQnlLaW5kIGtpbmQsIEVD
TUFNb2RlIGVjbWFNb2RlKQotewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNj
b3BlKGZhbHNlKTsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0KLSAgICBpZiAo
dHJ5Q2FjaGVEZWxldGVCeShnbG9iYWxPYmplY3QsIGNvZGVCbG9jaywgc2xvdCwgYmFzZVZhbHVl
LCBvbGRTdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc3R1YkluZm8sIGtpbmQsIGVjbWFNb2RlKSA9
PSBHaXZlVXBPbkNhY2hlKSB7Ci0gICAgICAgIExPR19JQygoSUNFdmVudDo6RGVsQnlSZXBsYWNl
V2l0aEdlbmVyaWMsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwoZ2xvYmFsT2JqZWN0LT52bSgp
KSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSkpOwotICAgICAg
ICBpZiAoa2luZCA9PSBEZWxCeUtpbmQ6OkJ5SWQpCi0gICAgICAgICAgICByZXBhdGNoU2xvd1Bh
dGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkRlbGV0ZUJ5SWRHZW5lcmljKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ss
IHN0dWJJbmZvLCBvcGVyYXRpb25EZWxldGVCeVZhbEdlbmVyaWMpOwotICAgIH0KLX0KLQotaW5s
aW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gYXBwcm9wcmlhdGVPcHRpbWl6aW5nSW5C
eUZ1bmN0aW9uKEluQnlLaW5kIGtpbmQpCi17Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2Fz
ZSBJbkJ5S2luZDo6QnlJZDoKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkluQnlJZE9wdGltaXpl
OwotICAgIGNhc2UgSW5CeUtpbmQ6OkJ5VmFsOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uSW5C
eVZhbE9wdGltaXplOwotICAgIGNhc2UgSW5CeUtpbmQ6OlByaXZhdGVOYW1lOgotICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uSGFzUHJpdmF0ZU5hbWVPcHRpbWl6ZTsKLSAgICB9Ci0gICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotaW5saW5lIEZ1bmN0aW9uUHRyPENGdW5jdGlv
blB0clRhZz4gYXBwcm9wcmlhdGVHZW5lcmljSW5CeUZ1bmN0aW9uKEluQnlLaW5kIGtpbmQpCi17
Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBJbkJ5S2luZDo6QnlJZDoKLSAgICAgICAg
cmV0dXJuIG9wZXJhdGlvbkluQnlJZEdlbmVyaWM7Ci0gICAgY2FzZSBJbkJ5S2luZDo6QnlWYWw6
Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25JbkJ5VmFsR2VuZXJpYzsKLSAgICBjYXNlIEluQnlL
aW5kOjpQcml2YXRlTmFtZToKLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1l
R2VuZXJpYzsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQot
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlSW5CeSgKLSAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2UsIENh
Y2hlYWJsZUlkZW50aWZpZXIgcHJvcGVydHlOYW1lLAotICAgIGJvb2wgd2FzRm91bmQsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBJbkJ5S2lu
ZCBraW5kKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBBY2Nlc3NH
ZW5lcmF0aW9uUmVzdWx0IHJlc3VsdDsKLSAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmll
cjo6ZnJvbVVpZCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKTsKLQotICAgIHsKLSAgICAgICAgR0NT
YWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgdm0pOwotICAg
ICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVy
biBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFiYXNlLT5zdHJ1Y3R1cmUo
dm0pLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkgfHwgKCF3YXNGb3VuZCAmJiAhYmFz
ZS0+c3RydWN0dXJlKHZtKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZUZvckFic2VuY2Uo
KSkpCi0gICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKLSAgICAgICAgCi0gICAgICAg
IGlmICh3YXNGb3VuZCkgewotICAgICAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKHZtKTsKLSAg
ICAgICAgCi0gICAgICAgIFJlZlB0cjxQb2x5UHJvdG9BY2Nlc3NDaGFpbj4gcHJvdG90eXBlQWNj
ZXNzQ2hhaW47Ci0gICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGNvbmRpdGlvblNl
dDsKLSAgICAgICAgaWYgKHdhc0ZvdW5kKSB7Ci0gICAgICAgICAgICBJbmxpbmVDYWNoZUFjdGlv
biBhY3Rpb24gPSBhY3Rpb25Gb3JDZWxsKHZtLCBiYXNlKTsKLSAgICAgICAgICAgIGlmIChhY3Rp
b24gIT0gQXR0ZW1wdFRvQ2FjaGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjsKLQot
ICAgICAgICAgICAgLy8gT3B0aW1pemUgc2VsZiBhY2Nlc3MuCi0gICAgICAgICAgICBpZiAoc3R1
YkluZm8uY2FjaGVUeXBlKCkgPT0gQ2FjaGVUeXBlOjpVbnNldAotICAgICAgICAgICAgICAgICYm
IHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpCi0gICAgICAgICAgICAgICAgJiYgc2xvdC5zbG90QmFz
ZSgpID09IGJhc2UKLSAgICAgICAgICAgICAgICAmJiAhc2xvdC53YXRjaHBvaW50U2V0KCkKLSAg
ICAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIGdlbmVyYXRlZENvZGVJbmxpbmUgPSBJbmxpbmVB
Y2Nlc3M6OmdlbmVyYXRlU2VsZkluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVy
ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRlZENvZGVJbmxpbmUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkJ5U2VsZlBhdGNoLCBzdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLCBpZGVudCwgc2xvdC5zbG90QmFzZSgpID09IGJhc2UpKTsKLSAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMo
dm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgICAgICByZXBhdGNoU2xv
d1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkluQnlJZE9wdGltaXplKTsK
LSAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdEluQnlJZFNlbGYobG9ja2VyLCBjb2Rl
QmxvY2ssIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgcHJvcGVydHlOYW1lKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChzbG90LnNsb3RCYXNlKCkgIT0g
YmFzZSkgewotICAgICAgICAgICAgICAgIGF1dG8gY2FjaGVTdGF0dXMgPSBwcmVwYXJlQ2hhaW5G
b3JDYWNoaW5nKGdsb2JhbE9iamVjdCwgYmFzZSwgc2xvdCk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFjYWNoZVN0YXR1cykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7
Ci0gICAgICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT5mbGF0dGVuZWREaWN0aW9uYXJ5KQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotCi0gICAgICAgICAg
ICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9seVByb3RvKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gUG9seVByb3RvQWNjZXNzQ2hhaW46OnRyeUNyZWF0
ZShnbG9iYWxPYmplY3QsIGJhc2UsIHNsb3QpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXBy
b3RvdHlwZUFjY2Vzc0NoYWluKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVV
cE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNsb3QuaXNDYWNo
ZWFibGVDdXN0b20oKSB8fCBwcm90b3R5cGVBY2Nlc3NDaGFpbi0+c2xvdEJhc2VTdHJ1Y3R1cmUo
dm0sIHN0cnVjdHVyZSktPmdldCh2bSwgcHJvcGVydHlOYW1lLnVpZCgpKSA9PSBzbG90LmNhY2hl
ZE9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAot
ICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHNsb3QuaXNDYWNoZWFibGVDdXN0b20oKSB8fCBjb25kaXRpb25TZXQuc2xvdEJhc2VDb25kaXRp
b24oKS5vZmZzZXQoKSA9PSBzbG90LmNhY2hlZE9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhdXRvIGNhY2hl
U3RhdHVzID0gcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIGJhc2UsIG51bGxw
dHIpOwotICAgICAgICAgICAgaWYgKCFjYWNoZVN0YXR1cykKLSAgICAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKLQotICAgICAgICAgICAgaWYgKGNhY2hlU3RhdHVzLT51c2VzUG9s
eVByb3RvKSB7Ci0gICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBQb2x5UHJv
dG9BY2Nlc3NDaGFpbjo6dHJ5Q3JlYXRlKGdsb2JhbE9iamVjdCwgYmFzZSwgc2xvdCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFwcm90b3R5cGVBY2Nlc3NDaGFpbikKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBj
b25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eU1pc3MoCi0gICAgICAg
ICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBpZGVu
dC5pbXBsKCkpOwotICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICBMT0dfSUMoKElDRXZlbnQ6OkluQWRkQWNjZXNzQ2FzZSwg
c3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlKSk7
Ci0KLSAgICAgICAgUmVmPEFjY2Vzc0Nhc2U+IG5ld0Nhc2UgPSBBY2Nlc3NDYXNlOjpjcmVhdGUo
Ci0gICAgICAgICAgICB2bSwgY29kZUJsb2NrLCB3YXNGb3VuZCA/IEFjY2Vzc0Nhc2U6OkluSGl0
IDogQWNjZXNzQ2FzZTo6SW5NaXNzLCBwcm9wZXJ0eU5hbWUsIHdhc0ZvdW5kID8gc2xvdC5jYWNo
ZWRPZmZzZXQoKSA6IGludmFsaWRPZmZzZXQsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0LCBXVEZN
b3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7Ci0KLSAgICAgICAgcmVzdWx0ID0gc3R1YkluZm8u
YWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6
c3RyaWN0KCksIHByb3BlcnR5TmFtZSwgV1RGTW92ZShuZXdDYXNlKSk7Ci0KLSAgICAgICAgaWYg
KHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAgICAgICBMT0dfSUMoKElDRXZl
bnQ6OkluUmVwbGFjZVdpdGhKdW1wLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgc2xv
dC5zbG90QmFzZSgpID09IGJhc2UpKTsKLQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVz
dWx0LmNvZGUoKSk7Ci0gICAgICAgICAgICBpZiAoa2luZCA9PSBJbkJ5S2luZDo6QnlJZCkKLSAg
ICAgICAgICAgICAgICBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzcyhjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4o
cmVzdWx0LmNvZGUoKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIElubGlu
ZUFjY2Vzczo6cmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29k
ZUJsb2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KHJlc3VsdC5jb2RlKCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZpcmVXYXRjaHBvaW50
c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOwot
ICAgIAotICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkgPyBHaXZlVXBPbkNhY2hl
IDogUmV0cnlDYWNoZUxhdGVyOwotfQotCi12b2lkIHJlcGF0Y2hJbkJ5KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZU9iamVj
dCwgQ2FjaGVhYmxlSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUsIGJvb2wgd2FzRm91bmQsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBJbkJ5S2lu
ZCBraW5kKQotewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNl
KTsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0KLSAgICBpZiAodHJ5Q2FjaGVJ
bkJ5KGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCBiYXNlT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHdh
c0ZvdW5kLCBzbG90LCBzdHViSW5mbywga2luZCkgPT0gR2l2ZVVwT25DYWNoZSkgewotICAgICAg
ICBMT0dfSUMoKElDRXZlbnQ6OkluUmVwbGFjZVdpdGhHZW5lcmljLCBiYXNlT2JqZWN0LT5jbGFz
c0luZm8oZ2xvYmFsT2JqZWN0LT52bSgpKSwgSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgcHJvcGVy
dHlOYW1lLnVpZCgpKSkpOwotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8sIGFwcHJvcHJpYXRlR2VuZXJpY0luQnlGdW5jdGlvbihraW5kKSk7Ci0gICAgfQot
fQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVIYXNQcml2YXRlQnJhbmQoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0
KiBiYXNlLCBDYWNoZWFibGVJZGVudGlmaWVyIGJyYW5kSUQsIGJvb2wgd2FzRm91bmQsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7Ci0gICAgQWNjZXNzR2VuZXJhdGlvblJlc3VsdCByZXN1bHQ7Ci0gICAgSWRlbnRpZmllciBp
ZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIGJyYW5kSUQudWlkKCkpOwotCi0gICAgewot
ICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2Nr
LCB2bSk7Ci0gICAgICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQotICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7Ci0KLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBiYXNlLT5zdHJ1Y3R1cmUodm0pOwotCi0gICAgICAgIElubGluZUNhY2hlQWN0aW9uIGFj
dGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2UpOwotICAgICAgICBpZiAoYWN0aW9uICE9IEF0
dGVtcHRUb0NhY2hlKQotICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjsKLQotICAgICAgICBib29s
IGlzQmFzZVByb3BlcnR5ID0gdHJ1ZTsKLSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbkFkZEFj
Y2Vzc0Nhc2UsIHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQcm9wZXJ0eSkp
OwotCi0gICAgICAgIFJlZjxBY2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRl
KHZtLCBjb2RlQmxvY2ssIHdhc0ZvdW5kID8gQWNjZXNzQ2FzZTo6SW5IaXQgOiBBY2Nlc3NDYXNl
OjpJbk1pc3MsIGJyYW5kSUQsIGludmFsaWRPZmZzZXQsIHN0cnVjdHVyZSwgeyB9LCB7IH0pOwot
Ci0gICAgICAgIHJlc3VsdCA9IHN0dWJJbmZvLmFkZEFjY2Vzc0Nhc2UobG9ja2VyLCBnbG9iYWxP
YmplY3QsIGNvZGVCbG9jaywgRUNNQU1vZGU6OnN0cmljdCgpLCBicmFuZElELCBXVEZNb3ZlKG5l
d0Nhc2UpKTsKLQotICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVDb2RlKCkpIHsKLSAg
ICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5SZXBsYWNlV2l0aEp1bXAsIHN0cnVjdHVyZS0+
Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQcm9wZXJ0eSkpOwotCi0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChyZXN1bHQuY29kZSgpKTsKLSAgICAgICAgICAgIElubGluZUFjY2Vzczo6cmV3
aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHVi
SW5mbywgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KHJlc3VsdC5jb2Rl
KCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1
YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJsb2NrLCByZXN1bHQpOwotCi0gICAgcmV0dXJu
IHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdpdmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0
ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaEhhc1ByaXZhdGVCcmFuZChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2VPYmplY3QsIENh
Y2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwgYm9vbCB3YXNGb3VuZCwgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvKQotewotICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3Bl
KGZhbHNlKTsKLQotICAgIGlmICh0cnlDYWNoZUhhc1ByaXZhdGVCcmFuZChnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgYmFzZU9iamVjdCwgYnJhbmRJRCwgd2FzRm91bmQsIHN0dWJJbmZvKSA9PSBH
aXZlVXBPbkNhY2hlKQotICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1
YkluZm8sIG9wZXJhdGlvbkhhc1ByaXZhdGVCcmFuZEdlbmVyaWMpOwotfQotCi1zdGF0aWMgSW5s
aW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVDaGVja1ByaXZhdGVCcmFuZCgKLSAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNPYmplY3QqIGJhc2Us
IENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwKLSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIEFjY2Vzc0dl
bmVyYXRpb25SZXN1bHQgcmVzdWx0OwotICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVy
Ojpmcm9tVWlkKHZtLCBicmFuZElELnVpZCgpKTsKLQotICAgIHsKLSAgICAgICAgR0NTYWZlQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywgdm0pOwotICAgICAgICBp
ZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBHaXZl
VXBPbkNhY2hlOwotCi0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0
dXJlKHZtKTsKLQotICAgICAgICBJbmxpbmVDYWNoZUFjdGlvbiBhY3Rpb24gPSBhY3Rpb25Gb3JD
ZWxsKHZtLCBiYXNlKTsKLSAgICAgICAgaWYgKGFjdGlvbiAhPSBBdHRlbXB0VG9DYWNoZSkKLSAg
ICAgICAgICAgIHJldHVybiBhY3Rpb247Ci0KLSAgICAgICAgYm9vbCBpc0Jhc2VQcm9wZXJ0eSA9
IHRydWU7Ci0gICAgICAgIExPR19JQygoSUNFdmVudDo6Q2hlY2tQcml2YXRlQnJhbmRBZGRBY2Nl
c3NDYXNlLCBzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLCBpZGVudCwgaXNCYXNlUHJvcGVydHkpKTsK
LQotICAgICAgICBSZWY8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmNyZWF0ZUNo
ZWNrUHJpdmF0ZUJyYW5kKHZtLCBjb2RlQmxvY2ssIGJyYW5kSUQsIHN0cnVjdHVyZSk7Ci0KLSAg
ICAgICAgcmVzdWx0ID0gc3R1YkluZm8uYWRkQWNjZXNzQ2FzZShsb2NrZXIsIGdsb2JhbE9iamVj
dCwgY29kZUJsb2NrLCBFQ01BTW9kZTo6c3RyaWN0KCksIGJyYW5kSUQsIFdURk1vdmUobmV3Q2Fz
ZSkpOwotCi0gICAgICAgIGlmIChyZXN1bHQuZ2VuZXJhdGVkU29tZUNvZGUoKSkgewotICAgICAg
ICAgICAgTE9HX0lDKChJQ0V2ZW50OjpDaGVja1ByaXZhdGVCcmFuZFJlcGxhY2VXaXRoSnVtcCwg
c3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7Ci0KLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAgICAgICAgSW5saW5l
QWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGluZUFjY2Vzcyhjb2Rl
QmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4o
cmVzdWx0LmNvZGUoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmlyZVdhdGNocG9pbnRz
QW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ssIHJlc3VsdCk7Ci0K
LSAgICByZXR1cm4gcmVzdWx0LnNob3VsZEdpdmVVcE5vdygpID8gR2l2ZVVwT25DYWNoZSA6IFJl
dHJ5Q2FjaGVMYXRlcjsKLX0KLQotdm9pZCByZXBhdGNoQ2hlY2tQcml2YXRlQnJhbmQoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTT2JqZWN0KiBi
YXNlT2JqZWN0LCBDYWNoZWFibGVJZGVudGlmaWVyIGJyYW5kSUQsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKLXsKLSAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShm
YWxzZSk7Ci0KLSAgICBpZiAodHJ5Q2FjaGVDaGVja1ByaXZhdGVCcmFuZChnbG9iYWxPYmplY3Qs
IGNvZGVCbG9jaywgYmFzZU9iamVjdCwgYnJhbmRJRCwgc3R1YkluZm8pID09IEdpdmVVcE9uQ2Fj
aGUpCi0gICAgICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3Bl
cmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRHZW5lcmljKTsKLX0KLQotc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeUNhY2hlU2V0UHJpdmF0ZUJyYW5kKAotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENvZGVCbG9jayogY29kZUJsb2NrLCBKU09iamVjdCogYmFzZSwgU3RydWN0dXJl
KiBvbGRTdHJ1Y3R1cmUsIENhY2hlYWJsZUlkZW50aWZpZXIgYnJhbmRJRCwKLSAgICBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8pCi17Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwotICAgIEFjY2Vzc0dlbmVyYXRpb25SZXN1bHQgcmVzdWx0OwotICAgIElkZW50aWZpZXIgaWRl
bnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCBicmFuZElELnVpZCgpKTsKLQotICAgIHsKLSAg
ICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jaywg
dm0pOwotICAgICAgICBpZiAoZm9yY2VJQ0ZhaWx1cmUoZ2xvYmFsT2JqZWN0KSkKLSAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKG9sZFN0
cnVjdHVyZSk7Ci0KLSAgICAgICAgaWYgKG9sZFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0g
ICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotCi0gICAgICAgIElubGluZUNhY2hl
QWN0aW9uIGFjdGlvbiA9IGFjdGlvbkZvckNlbGwodm0sIGJhc2UpOwotICAgICAgICBpZiAoYWN0
aW9uICE9IEF0dGVtcHRUb0NhY2hlKQotICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjsKLSAgICAg
ICAgCi0gICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpzZXRCcmFu
ZFRyYW5zaXRpb25Gcm9tRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkob2xkU3RydWN0dXJl
LCBicmFuZElELnVpZCgpKTsKLSAgICAgICAgaWYgKCFuZXdTdHJ1Y3R1cmUpCi0gICAgICAgICAg
ICByZXR1cm4gUmV0cnlDYWNoZUxhdGVyOwotICAgICAgICBpZiAobmV3U3RydWN0dXJlLT5pc0Rp
Y3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwotICAgICAgICBB
U1NFUlQobmV3U3RydWN0dXJlLT5wcmV2aW91c0lEKCkgPT0gb2xkU3RydWN0dXJlKTsKLSAgICAg
ICAgQVNTRVJUKG5ld1N0cnVjdHVyZS0+dHJhbnNpdGlvbktpbmQoKSA9PSBUcmFuc2l0aW9uS2lu
ZDo6U2V0QnJhbmQpOwotICAgICAgICBBU1NFUlQobmV3U3RydWN0dXJlLT5pc09iamVjdCgpKTsK
LSAgICAgICAgCi0gICAgICAgIGJvb2wgaXNCYXNlUHJvcGVydHkgPSB0cnVlOwotICAgICAgICBM
T0dfSUMoKElDRXZlbnQ6OlNldFByaXZhdGVCcmFuZEFkZEFjY2Vzc0Nhc2UsIG9sZFN0cnVjdHVy
ZS0+Y2xhc3NJbmZvKCksIGlkZW50LCBpc0Jhc2VQcm9wZXJ0eSkpOwotCi0gICAgICAgIFJlZjxB
Y2Nlc3NDYXNlPiBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlU2V0UHJpdmF0ZUJyYW5kKHZt
LCBjb2RlQmxvY2ssIGJyYW5kSUQsIG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlKTsKLQotICAg
ICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xvYmFsT2JqZWN0
LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgYnJhbmRJRCwgV1RGTW92ZShuZXdDYXNl
KSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdC5nZW5lcmF0ZWRTb21lQ29kZSgpKSB7Ci0gICAgICAg
ICAgICBMT0dfSUMoKElDRXZlbnQ6OlNldFByaXZhdGVCcmFuZFJlcGxhY2VXaXRoSnVtcCwgb2xk
U3RydWN0dXJlLT5jbGFzc0luZm8oKSwgaWRlbnQsIGlzQmFzZVByb3BlcnR5KSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAg
ICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGlu
ZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91
dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmly
ZVdhdGNocG9pbnRzQW5kQ2xlYXJTdHViSWZOZWVkZWQodm0sIHN0dWJJbmZvLCBjb2RlQmxvY2ss
IHJlc3VsdCk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdC5zaG91bGRHaXZlVXBOb3coKSA/IEdp
dmVVcE9uQ2FjaGUgOiBSZXRyeUNhY2hlTGF0ZXI7Ci19Ci0KLXZvaWQgcmVwYXRjaFNldFByaXZh
dGVCcmFuZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgSlNPYmplY3QqIGJhc2VPYmplY3QsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBDYWNoZWFi
bGVJZGVudGlmaWVyIGJyYW5kSUQsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKLXsKLSAg
ICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0KLSAgICBpZiAo
dHJ5Q2FjaGVTZXRQcml2YXRlQnJhbmQoZ2xvYmFsT2JqZWN0LCBjb2RlQmxvY2ssIGJhc2VPYmpl
Y3QsIG9sZFN0cnVjdHVyZSwgIGJyYW5kSUQsIHN0dWJJbmZvKSA9PSBHaXZlVXBPbkNhY2hlKQot
ICAgICAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlv
blNldFByaXZhdGVCcmFuZEdlbmVyaWMpOwotfQotCi1zdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24g
dHJ5Q2FjaGVJbnN0YW5jZU9mKAotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlIHZhbHVlVmFsdWUsIEpTVmFsdWUgcHJvdG90eXBl
VmFsdWUsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBib29sIHdhc0ZvdW5kKQot
ewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBBY2Nlc3NHZW5lcmF0aW9u
UmVzdWx0IHJlc3VsdDsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCh2YWx1ZVZhbHVlLmlzQ2Vs
bCgpKTsgLy8gc2hvdWxkQ29uc2lkZXJDYWNoaW5nIHJlamVjdHMgbm9uLWNlbGxzLgotICAgIAot
ICAgIGlmIChmb3JjZUlDRmFpbHVyZShnbG9iYWxPYmplY3QpKQotICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKLSAgICAKLSAgICB7Ci0gICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtKTsKLSAgICAgICAgCi0gICAgICAgIEpTQ2Vs
bCogdmFsdWUgPSB2YWx1ZVZhbHVlLmFzQ2VsbCgpOwotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHZhbHVlLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBSZWZQdHI8QWNjZXNzQ2FzZT4g
bmV3Q2FzZTsKLSAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IGpzRHluYW1pY0Nhc3Q8SlNP
YmplY3QqPih2bSwgcHJvdG90eXBlVmFsdWUpOwotICAgICAgICBpZiAocHJvdG90eXBlKSB7Ci0g
ICAgICAgICAgICBpZiAoIWpzRHluYW1pY0Nhc3Q8SlNPYmplY3QqPih2bSwgdmFsdWUpKSB7Ci0g
ICAgICAgICAgICAgICAgbmV3Q2FzZSA9IEluc3RhbmNlT2ZBY2Nlc3NDYXNlOjpjcmVhdGUoCi0g
ICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIEFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZN
aXNzLCBzdHJ1Y3R1cmUsIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCksCi0gICAgICAgICAg
ICAgICAgICAgIHByb3RvdHlwZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN0cnVjdHVyZS0+
cHJvdG90eXBlUXVlcmllc0FyZUNhY2hlYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklY
TUU6IFRlYWNoIHRoaXMgdG8gZG8gcG9seSBwcm90by4KLSAgICAgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1NjYzCi0gICAgICAgICAgICAg
ICAgcHJlcGFyZUNoYWluRm9yQ2FjaGluZyhnbG9iYWxPYmplY3QsIHZhbHVlLCB3YXNGb3VuZCA/
IHByb3RvdHlwZSA6IG51bGxwdHIpOwotICAgICAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0IGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0Zvckluc3RhbmNlT2Yo
Ci0gICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlLCBwcm90b3R5cGUsIHdhc0ZvdW5kKTsKLQotICAgICAgICAgICAgICAgIGlmIChjb25kaXRp
b25TZXQuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBJbnN0YW5j
ZU9mQWNjZXNzQ2FzZTo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVC
bG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhc0ZvdW5kID8gQWNjZXNzQ2FzZTo6SW5z
dGFuY2VPZkhpdCA6IEFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZNaXNzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIHByb3RvdHlwZSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
IW5ld0Nhc2UpCi0gICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Y3JlYXRlKHZtLCBj
b2RlQmxvY2ssIEFjY2Vzc0Nhc2U6Okluc3RhbmNlT2ZHZW5lcmljLCBDYWNoZWFibGVJZGVudGlm
aWVyKCkpOwotICAgICAgICAKLSAgICAgICAgTE9HX0lDKChJQ0V2ZW50OjpJbnN0YW5jZU9mQWRk
QWNjZXNzQ2FzZSwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcigpKSk7Ci0gICAg
ICAgIAotICAgICAgICByZXN1bHQgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKGxvY2tlciwgZ2xv
YmFsT2JqZWN0LCBjb2RlQmxvY2ssIEVDTUFNb2RlOjpzdHJpY3QoKSwgbnVsbHB0ciwgV1RGTW92
ZShuZXdDYXNlKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAocmVzdWx0LmdlbmVyYXRlZFNvbWVD
b2RlKCkpIHsKLSAgICAgICAgICAgIExPR19JQygoSUNFdmVudDo6SW5zdGFuY2VPZlJlcGxhY2VX
aXRoSnVtcCwgc3RydWN0dXJlLT5jbGFzc0luZm8oKSwgSWRlbnRpZmllcigpKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5jb2RlKCkpOwotICAgICAg
ICAgICAgSW5saW5lQWNjZXNzOjpyZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3NOb3RVc2luZ0lubGlu
ZUFjY2Vzcyhjb2RlQmxvY2ssIHN0dWJJbmZvLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91
dGluZVB0clRhZz4ocmVzdWx0LmNvZGUoKSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAg
IGZpcmVXYXRjaHBvaW50c0FuZENsZWFyU3R1YklmTmVlZGVkKHZtLCBzdHViSW5mbywgY29kZUJs
b2NrLCByZXN1bHQpOwotICAgIAotICAgIHJldHVybiByZXN1bHQuc2hvdWxkR2l2ZVVwTm93KCkg
PyBHaXZlVXBPbkNhY2hlIDogUmV0cnlDYWNoZUxhdGVyOwotfQotCi12b2lkIHJlcGF0Y2hJbnN0
YW5jZU9mKAotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBKU1ZhbHVlIHZhbHVlVmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlVmFsdWUsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywKLSAgICBib29sIHdhc0ZvdW5kKQotewotICAgIFN1cGVy
U2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKLSAgICBpZiAodHJ5Q2FjaGVJ
bnN0YW5jZU9mKGdsb2JhbE9iamVjdCwgY29kZUJsb2NrLCB2YWx1ZVZhbHVlLCBwcm90b3R5cGVW
YWx1ZSwgc3R1YkluZm8sIHdhc0ZvdW5kKSA9PSBHaXZlVXBPbkNhY2hlKQotICAgICAgICByZXBh
dGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8sIG9wZXJhdGlvbkluc3RhbmNlT2ZH
ZW5lcmljKTsKLX0KLQotdm9pZCBsaW5rRGlyZWN0Q2FsbCgKLSAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJs
b2NrLAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyKQot
ewotICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIoKSk7Ci0gICAgCi0gICAgQ29kZUJsb2Nr
KiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotCi0gICAgVk0mIHZt
ID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwotICAgIAotICAgIEFTU0VSVCghY2FsbExpbmtJbmZv
LmlzTGlua2VkKCkpOwotICAgIGNhbGxMaW5rSW5mby5zZXRDb2RlQmxvY2sodm0sIGNhbGxlckNv
ZGVCbG9jaywganNDYXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4oY2FsbGVlQ29kZUJsb2NrKSk7Ci0g
ICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQotICAgICAg
ICBkYXRhTG9nKCJMaW5raW5nIGNhbGwgaW4gIiwgRnVsbENvZGVPcmlnaW4oY2FsbGVyQ29kZUJs
b2NrLCBjYWxsTGlua0luZm8uY29kZU9yaWdpbigpKSwgIiB0byAiLCBwb2ludGVyRHVtcChjYWxs
ZWVDb2RlQmxvY2spLCAiLCBlbnRyeXBvaW50IGF0ICIsIGNvZGVQdHIsICJcbiIpOwotCi0gICAg
Y2FsbExpbmtJbmZvLnNldERpcmVjdENhbGxUYXJnZXQoQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRy
eVB0clRhZz4oY29kZVB0cikpOwotCi0gICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKLSAgICAgICAg
Y2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGNhbGxGcmFtZSwgJmNhbGxMaW5rSW5m
byk7Ci19Ci0KLXZvaWQgbGlua1Nsb3dGb3IoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxMaW5r
SW5mbyYgY2FsbExpbmtJbmZvKQotewotICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0g
Y2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKLSAgICBWTSYgdm0gPSBjYWxs
ZXJDb2RlQmxvY2stPnZtKCk7Ci0gICAgCi0gICAgbGlua1Nsb3dGb3Iodm0sIGNhbGxMaW5rSW5m
byk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxpbmtWaXJ0dWFsRm9yKFZNJiB2bSwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQotewotICAgIENhbGxGcmFtZSog
Y2FsbGVyRnJhbWUgPSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgQ29kZUJsb2NrKiBj
YWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7Ci0KLSAgICBkYXRhTG9n
TG5JZihzaG91bGREdW1wRGlzYXNzZW1ibHlGb3IoY2FsbGVyQ29kZUJsb2NrKSwKLSAgICAgICAg
IkxpbmtpbmcgdmlydHVhbCBjYWxsIGF0ICIsIEZ1bGxDb2RlT3JpZ2luKGNhbGxlckNvZGVCbG9j
aywgY2FsbGVyRnJhbWUtPmNvZGVPcmlnaW4oKSkpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPEpJVFN0dWJSb3V0aW5lUHRyVGFnPiB2aXJ0dWFsVGh1bmsgPSB2bS5nZXRDVElWaXJ0dWFs
Q2FsbChjYWxsTGlua0luZm8uY2FsbE1vZGUoKSk7Ci0gICAgcmV2ZXJ0Q2FsbCh2bSwgY2FsbExp
bmtJbmZvLCB2aXJ0dWFsVGh1bmspOwotICAgIGNhbGxMaW5rSW5mby5zZXRDbGVhcmVkQnlWaXJ0
dWFsKCk7Ci19Ci0KLW5hbWVzcGFjZSB7Ci1zdHJ1Y3QgQ2FsbFRvQ29kZVB0ciB7Ci0gICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGNhbGw7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+IGNvZGVQdHI7Ci19OwotfSAvLyBhbm5vbnltb3VzIG5hbWVzcGFjZQotCi12b2lkIGxp
bmtQb2x5bW9ycGhpY0NhbGwoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDYWxsVmFyaWFudCBuZXdW
YXJpYW50KQotewotICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mby5hbGxvd1N0dWJzKCkp
OwotCi0gICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUo
KTsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0KLSAgICAvLyBEdXJpbmcgZXhl
Y3V0aW9uIG9mIGxpbmtQb2x5bW9ycGhpY0NhbGwsIHdlIHN0cm9uZ2x5IGFzc3VtZSB0aGF0IHdl
IG5ldmVyIGRvIEdDLgotICAgIC8vIEdDIGpldHRpc29ucyBDb2RlQmxvY2tzLCBjaGFuZ2VzIENh
bGxMaW5rSW5mbyBldGMuIGFuZCBicmVha3MgYXNzdW1wdGlvbiBkb25lIGJlZm9yZSBhbmQgYWZ0
ZXIgdGhpcyBjYWxsLgotICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQ0ZvckFXaGlsZSh2bSk7
Ci0gICAgCi0gICAgaWYgKCFuZXdWYXJpYW50KSB7Ci0gICAgICAgIGxpbmtWaXJ0dWFsRm9yKHZt
LCBjYWxsRnJhbWUsIGNhbGxMaW5rSW5mbyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBPdXIgY2FsbGVyIG11c3QgYmUgaGF2ZSBhIGNlbGwgZm9yIGEgY2FsbGVlLiBXaGVuIGNh
bGxpbmcKLSAgICAvLyB0aGlzIGZyb20gV2FzbSwgd2UgZW5zdXJlIHRoZSBjYWxsZWUgaXMgYSBj
ZWxsLgotICAgIEFTU0VSVChjYWxsZXJGcmFtZS0+Y2FsbGVlKCkuaXNDZWxsKCkpOwotCi0gICAg
Q29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7Ci0g
ICAgYm9vbCBpc1dlYkFzc2VtYmx5ID0gaXNXZWJBc3NlbWJseU1vZHVsZShjYWxsZXJGcmFtZS0+
Y2FsbGVlKCkuYXNDZWxsKCkpOwotCi0gICAgLy8gV2ViQXNzZW1ibHkgLT4gSlMgc3R1YnMgZG9u
J3QgaGF2ZSBhIHZhbGlkIENvZGVCbG9jay4KLSAgICBKU0NlbGwqIG93bmVyID0gaXNXZWJBc3Nl
bWJseSA/IHdlYkFzc2VtYmx5T3duZXIoY2FsbGVyRnJhbWUtPmNhbGxlZSgpLmFzQ2VsbCgpKSA6
IGNhbGxlckNvZGVCbG9jazsKLSAgICBBU1NFUlQob3duZXIpOwotCi0gICAgQ2FsbFZhcmlhbnRM
aXN0IGxpc3Q7Ci0gICAgaWYgKFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKiBzdHViID0gY2Fs
bExpbmtJbmZvLnN0dWIoKSkKLSAgICAgICAgbGlzdCA9IHN0dWItPnZhcmlhbnRzKCk7Ci0gICAg
ZWxzZSBpZiAoSlNPYmplY3QqIG9sZENhbGxlZSA9IGNhbGxMaW5rSW5mby5jYWxsZWUoKSkKLSAg
ICAgICAgbGlzdCA9IENhbGxWYXJpYW50TGlzdCB7IENhbGxWYXJpYW50KG9sZENhbGxlZSkgfTsK
LSAgICAKLSAgICBsaXN0ID0gdmFyaWFudExpc3RXaXRoVmFyaWFudChsaXN0LCBuZXdWYXJpYW50
KTsKLQotICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY2xvc3VyZSBjYWxscyB0aGVuIGl0IG1ha2Vz
IHNlbnNlIHRvIHRyZWF0IGFsbCBvZiB0aGVtIGFzIGNsb3N1cmUgY2FsbHMuCi0gICAgLy8gVGhp
cyBtYWtlcyBzd2l0Y2hpbmcgb24gY2FsbGVlIGNoZWFwZXIuIEl0IGFsc28gcHJvZHVjZXMgcHJv
ZmlsaW5nIHRoYXQncyBlYXNpZXIgb24gdGhlIERGRzsKLSAgICAvLyB0aGUgREZHIGRvZXNuJ3Qg
cmVhbGx5IHdhbnQgdG8gZGVhbCB3aXRoIGEgY29tYmluYXRpb24gb2YgY2xvc3VyZSBhbmQgbm9u
LWNsb3N1cmUgY2FsbGVlcy4KLSAgICBib29sIGlzQ2xvc3VyZUNhbGwgPSBmYWxzZTsKLSAgICBm
b3IgKENhbGxWYXJpYW50IHZhcmlhbnQgOiBsaXN0KSAgewotICAgICAgICBpZiAodmFyaWFudC5p
c0Nsb3N1cmVDYWxsKCkpIHsKLSAgICAgICAgICAgIGxpc3QgPSBkZXNwZWNpZmllZFZhcmlhbnRM
aXN0KGxpc3QpOwotICAgICAgICAgICAgaXNDbG9zdXJlQ2FsbCA9IHRydWU7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoaXNDbG9zdXJlQ2FsbCkK
LSAgICAgICAgY2FsbExpbmtJbmZvLnNldEhhc1NlZW5DbG9zdXJlKCk7Ci0gICAgCi0gICAgVmVj
dG9yPFBvbHltb3JwaGljQ2FsbENhc2U+IGNhbGxDYXNlczsKLSAgICBWZWN0b3I8aW50NjRfdD4g
Y2FzZVZhbHVlczsKLSAgICAKLSAgICAvLyBGaWd1cmUgb3V0IHdoYXQgb3VyIGNhc2VzIGFyZS4K
LSAgICBmb3IgKENhbGxWYXJpYW50IHZhcmlhbnQgOiBsaXN0KSB7Ci0gICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKHZhcmlhbnQuZXhlY3V0YWJsZSgp
ICYmICF2YXJpYW50LmV4ZWN1dGFibGUoKS0+aXNIb3N0RnVuY3Rpb24oKSkgewotICAgICAgICAg
ICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSB2YXJpYW50LmV4ZWN1dGFibGUoKTsKLSAg
ICAgICAgICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRh
YmxlKS0+Y29kZUJsb2NrRm9yQ2FsbCgpOwotICAgICAgICAgICAgLy8gSWYgd2UgY2Fubm90IGhh
bmRsZSBhIGNhbGxlZSwgZWl0aGVyIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhIENvZGVCbG9jayBv
ciBiZWNhdXNlIGFyaXR5IG1pc21hdGNoLAotICAgICAgICAgICAgLy8gYXNzdW1lIHRoYXQgaXQn
cyBiZXR0ZXIgZm9yIHRoaXMgd2hvbGUgdGhpbmcgdG8gYmUgYSB2aXJ0dWFsIGNhbGwuCi0gICAg
ICAgICAgICBpZiAoIWNvZGVCbG9jayB8fCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
KSB8fCBjYWxsTGlua0luZm8uaXNWYXJhcmdzKCkpIHsKLSAgICAgICAgICAgICAgICBsaW5rVmly
dHVhbEZvcih2bSwgY2FsbEZyYW1lLCBjYWxsTGlua0luZm8pOwotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGludDY0X3QgbmV3Q2Fz
ZVZhbHVlID0gMDsKLSAgICAgICAgaWYgKGlzQ2xvc3VyZUNhbGwpIHsKLSAgICAgICAgICAgIG5l
d0Nhc2VWYWx1ZSA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odmFyaWFudC5leGVjdXRhYmxlKCkp
OwotICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGFkZCBhIGZhc3QgcGF0aCBmb3IgSW50
ZXJuYWxGdW5jdGlvbiB3aXRoIGNsb3N1cmUgY2FsbC4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzkzMTEKLSAgICAgICAgICAgIGlmICgh
bmV3Q2FzZVZhbHVlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgaWYgKGF1dG8qIGZ1bmN0aW9uID0gdmFyaWFudC5mdW5jdGlvbigpKQot
ICAgICAgICAgICAgICAgIG5ld0Nhc2VWYWx1ZSA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oZnVu
Y3Rpb24pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG5ld0Nhc2VWYWx1ZSA9
IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odmFyaWFudC5pbnRlcm5hbEZ1bmN0aW9uKCkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7Ci0gICAgICAgICAgICBpZiAo
Y2FzZVZhbHVlcy5jb250YWlucyhuZXdDYXNlVmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgZGF0
YUxvZygiRVJST1I6IEF0dGVtcHQgdG8gYWRkIGR1cGxpY2F0ZSBjYXNlIHZhbHVlLlxuIik7Ci0g
ICAgICAgICAgICAgICAgZGF0YUxvZygiRXhpc3RpbmcgY2FzZSB2YWx1ZXM6ICIpOwotICAgICAg
ICAgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8m
IHZhbHVlIDogY2FzZVZhbHVlcykKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhjb21tYSwg
dmFsdWUpOwotICAgICAgICAgICAgICAgIGRhdGFMb2coIlxuIik7Ci0gICAgICAgICAgICAgICAg
ZGF0YUxvZygiQXR0ZW1wdGluZyB0byBhZGQ6ICIsIG5ld0Nhc2VWYWx1ZSwgIlxuIik7Ci0gICAg
ICAgICAgICAgICAgZGF0YUxvZygiVmFyaWFudCBsaXN0OiAiLCBsaXN0RHVtcChjYWxsQ2FzZXMp
LCAiXG4iKTsKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgY2FsbENhc2VzLmFwcGVuZChQb2x5
bW9ycGhpY0NhbGxDYXNlKHZhcmlhbnQsIGNvZGVCbG9jaykpOwotICAgICAgICBjYXNlVmFsdWVz
LmFwcGVuZChuZXdDYXNlVmFsdWUpOwotICAgIH0KLSAgICBBU1NFUlQoY2FsbENhc2VzLnNpemUo
KSA9PSBjYXNlVmFsdWVzLnNpemUoKSk7Ci0KLSAgICAvLyBJZiB3ZSBhcmUgb3ZlciB0aGUgbGlt
aXQsIGp1c3QgdXNlIGEgbm9ybWFsIHZpcnR1YWwgY2FsbC4KLSAgICB1bnNpZ25lZCBtYXhQb2x5
bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemU7Ci0gICAgaWYgKGlzV2ViQXNzZW1ibHkpCi0gICAg
ICAgIG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSA9IE9wdGlvbnM6Om1heFBvbHlt
b3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZUZvcldlYkFzc2VtYmx5VG9KUygpOwotICAgIGVsc2Ug
aWYgKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkK
LSAgICAgICAgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplID0gT3B0aW9uczo6bWF4
UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplRm9yVG9wVGllcigpOwotICAgIGVsc2UKLSAg
ICAgICAgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplID0gT3B0aW9uczo6bWF4UG9s
eW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplKCk7Ci0KLSAgICAvLyBXZSB1c2UgbGlzdC5zaXpl
KCkgaW5zdGVhZCBvZiBjYWxsQ2FzZXMuc2l6ZSgpIGJlY2F1c2Ugd2UgcmVzcGVjdCBDYWxsVmFy
aWFudCBzaXplIGZvciBub3cuCi0gICAgaWYgKGxpc3Quc2l6ZSgpID4gbWF4UG9seW1vcnBoaWND
YWxsVmFyaWFudExpc3RTaXplKSB7Ci0gICAgICAgIGxpbmtWaXJ0dWFsRm9yKHZtLCBjYWxsRnJh
bWUsIGNhbGxMaW5rSW5mbyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBWZWN0b3I8
Q2FsbFRvQ29kZVB0cj4gY2FsbHMoY2FsbENhc2VzLnNpemUoKSk7Ci0gICAgVW5pcXVlQXJyYXk8
dWludDMyX3Q+IGZhc3RDb3VudHM7Ci0KLSAgICBpZiAoIWlzV2ViQXNzZW1ibHkgJiYgY2FsbGVy
Q29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6dG9wVGllckpJVCgpKSB7Ci0gICAgICAg
IGZhc3RDb3VudHMgPSBtYWtlVW5pcXVlQXJyYXk8dWludDMyX3Q+KGNhbGxDYXNlcy5zaXplKCkp
OwotICAgICAgICBtZW1zZXQoZmFzdENvdW50cy5nZXQoKSwgMCwgY2FsbENhc2VzLnNpemUoKSAq
IHNpemVvZih1aW50MzJfdCkpOwotICAgIH0KLSAgICAKLSAgICBHUFJSZWcgY2FsbGVlR1BSID0g
Y2FsbExpbmtJbmZvLmNhbGxlZUdQUigpOwotCi0gICAgYm9vbCBpc0RhdGFJQyA9IGNhbGxMaW5r
SW5mby5pc0RhdGFJQygpOwotICAgIENDYWxsSGVscGVycyBzdHViSml0KGNhbGxlckNvZGVCbG9j
ayk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZXI+IGZyYW1lU2h1ZmZs
ZXI7Ci0gICAgaWYgKGNhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKCkpIHsKLSAgICAgICAg
QVNTRVJUKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpOwotICAgICAgICBmcmFtZVNodWZmbGVy
ID0gbWFrZVVuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlcj4oc3R1YkppdCwgKmNhbGxMaW5rSW5mby5m
cmFtZVNodWZmbGVEYXRhKCkpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIC8vIFdl
IHdvdWxkIGhhdmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhlIGNhbGxlZSBpcyBhIGNlbGwsIGFu
ZCB3ZSBjYW4KLSAgICAgICAgLy8gdXNlIHRoZSBhZGRpdGlvbmFsIHJlZ2lzdGVyIHRoaXMgYnV5
cyB1cy4KLSAgICAgICAgZnJhbWVTaHVmZmxlci0+YXNzdW1lQ2FsbGVlSXNDZWxsKCk7Ci0jZW5k
aWYKLSAgICAgICAgZnJhbWVTaHVmZmxlci0+bG9ja0dQUihjYWxsZWVHUFIpOwotICAgIH0KLQot
ICAgIEdQUlJlZyBjb21wYXJpc29uVmFsdWVHUFI7Ci0gICAgaWYgKGlzQ2xvc3VyZUNhbGwpIHsK
LSAgICAgICAgaWYgKGZyYW1lU2h1ZmZsZXIpCi0gICAgICAgICAgICBjb21wYXJpc29uVmFsdWVH
UFIgPSBmcmFtZVNodWZmbGVyLT5hY3F1aXJlR1BSKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGNvbXBhcmlzb25WYWx1ZUdQUiA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQ
UihjYWxsZWVHUFIpOwotICAgIH0gZWxzZQotICAgICAgICBjb21wYXJpc29uVmFsdWVHUFIgPSBj
YWxsZWVHUFI7Ci0KLSAgICBHUFJSZWcgZmFzdENvdW50c0Jhc2VHUFI7Ci0gICAgaWYgKGZyYW1l
U2h1ZmZsZXIpCi0gICAgICAgIGZhc3RDb3VudHNCYXNlR1BSID0gZnJhbWVTaHVmZmxlci0+YWNx
dWlyZUdQUigpOwotICAgIGVsc2UgewotICAgICAgICBmYXN0Q291bnRzQmFzZUdQUiA9Ci0gICAg
ICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoY2FsbGVlR1BSLCBjb21w
YXJpc29uVmFsdWVHUFIsIEdQUkluZm86OnJlZ1QzKTsKLSAgICB9Ci0gICAgc3R1YkppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihmYXN0Q291bnRzLmdldCgpKSwgZmFzdENvdW50
c0Jhc2VHUFIpOwotCi0gICAgaWYgKCFmcmFtZVNodWZmbGVyICYmIGNhbGxMaW5rSW5mby5pc1Rh
aWxDYWxsKCkpIHsKLSAgICAgICAgLy8gV2Ugc3Ryb25nbHkgYXNzdW1lIHRoYXQgY2FsbGVlR1BS
IGlzIG5vdCBhIGNhbGxlZSBzYXZlIHJlZ2lzdGVyIGluIHRoZSBzbG93IHBhdGguCi0gICAgICAg
IEFTU0VSVCghY2FsbGVyQ29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCktPmZpbmQoY2Fs
bGVlR1BSKSk7Ci0gICAgICAgIHN0dWJKaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAg
IH0KLQotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0gICAgaWYgKGlzQ2xv
c3VyZUNhbGwpIHsKLSAgICAgICAgLy8gVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIGZ1bmN0aW9uIGFu
ZCBzdGFzaCB0aGUgZXhlY3V0YWJsZSBpbiBzY3JhdGNoR1BSLgotI2lmIFVTRShKU1ZBTFVFNjQp
Ci0gICAgICAgIGlmIChjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKQotICAgICAgICAgICAgc2xv
d1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoSWZOb3RDZWxsKGNhbGxlZUdQUiwgRG9Ob3RIYXZl
VGFnUmVnaXN0ZXJzKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChzdHViSml0LmJyYW5jaElmTm90Q2VsbChjYWxsZWVHUFIpKTsKLSNlbHNlCi0gICAgICAgIC8v
IFdlIHdvdWxkIGhhdmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhlIGNhbGxlZSBpcyBhIGNlbGwu
Ci0jZW5kaWYKLSAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGFkZCBhIGZhc3QgcGF0aCBmb3Ig
SW50ZXJuYWxGdW5jdGlvbiB3aXRoIGNsb3N1cmUgY2FsbC4KLSAgICAgICAgc2xvd1BhdGguYXBw
ZW5kKHN0dWJKaXQuYnJhbmNoSWZOb3RGdW5jdGlvbihjYWxsZWVHUFIpKTsKLQotICAgICAgICBz
dHViSml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlv
bjo6b2Zmc2V0T2ZFeGVjdXRhYmxlT3JSYXJlRGF0YSgpKSwgY29tcGFyaXNvblZhbHVlR1BSKTsK
LSAgICAgICAgYXV0byBoYXNFeGVjdXRhYmxlID0gc3R1YkppdC5icmFuY2hUZXN0UHRyKENDYWxs
SGVscGVyczo6WmVybywgY29tcGFyaXNvblZhbHVlR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZykpOwotICAgICAgICBzdHViSml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNvbXBhcmlzb25WYWx1ZUdQUiwgRnVuY3Rpb25SYXJlRGF0
YTo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkgLSBKU0Z1bmN0aW9uOjpyYXJlRGF0YVRhZyksIGNvbXBh
cmlzb25WYWx1ZUdQUik7Ci0gICAgICAgIGhhc0V4ZWN1dGFibGUubGluaygmc3R1YkppdCk7Ci0g
ICAgfQotCi0gICAgQmluYXJ5U3dpdGNoIGJpbmFyeVN3aXRjaChjb21wYXJpc29uVmFsdWVHUFIs
IGNhc2VWYWx1ZXMsIEJpbmFyeVN3aXRjaDo6SW50UHRyKTsKLSAgICBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0IGRvbmU7Ci0gICAgd2hpbGUgKGJpbmFyeVN3aXRjaC5hZHZhbmNlKHN0dWJKaXQpKSB7
Ci0gICAgICAgIHNpemVfdCBjYXNlSW5kZXggPSBiaW5hcnlTd2l0Y2guY2FzZUluZGV4KCk7Ci0g
ICAgICAgIAotICAgICAgICBDYWxsVmFyaWFudCB2YXJpYW50ID0gY2FsbENhc2VzW2Nhc2VJbmRl
eF0udmFyaWFudCgpOwotICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGNvZGVQdHI7Ci0gICAgICAgIGlmICh2YXJpYW50LmV4ZWN1dGFibGUoKSkg
ewotICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQuZXhlY3V0YWJsZSgpLT5oYXNKSVRDb2RlRm9y
Q2FsbCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY29kZVB0ciA9IGpzVG9XYXNtSUND
b2RlUHRyKHZtLCBjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCksIHZhcmlhbnQuZnVu
Y3Rpb24oKSk7Ci0gICAgICAgICAgICBpZiAoIWNvZGVQdHIpCi0gICAgICAgICAgICAgICAgY29k
ZVB0ciA9IHZhcmlhbnQuZXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLT5h
ZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVxdWlyZWQpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQuaW50ZXJuYWxGdW5jdGlvbigpKTsKLSAgICAgICAg
ICAgIGNvZGVQdHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2Rl
Rm9yQ2FsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChmYXN0Q291bnRzKSB7
Ci0gICAgICAgICAgICBzdHViSml0LmFkZDMyKAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDEpLAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhmYXN0Q291bnRzQmFzZUdQUiwgY2FzZUluZGV4ICogc2l6ZW9mKHVpbnQzMl90KSkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgYm9vbCBuZWVkc0RvbmVKdW1wID0gZmFsc2U7Ci0gICAgICAgIGlm
IChmcmFtZVNodWZmbGVyKSB7Ci0gICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihzdHViSml0
LCBmcmFtZVNodWZmbGVyLT5zbmFwc2hvdCgpKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKLSAgICAg
ICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY2FsbCA9IHN0dWJKaXQubmVhclRhaWxDYWxsKCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkgewotICAgICAgICAg
ICAgc3R1YkppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7Ci0gICAgICAgICAgICBjYWxsc1tj
YXNlSW5kZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJUYWlsQ2FsbCgpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgaWYgKGlzRGF0YUlDKQotICAgICAgICAgICAgICAgIGNhbGxzW2Nhc2VJ
bmRleF0uY2FsbCA9IHN0dWJKaXQubmVhclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJDYWxs
KCk7Ci0gICAgICAgICAgICAgICAgbmVlZHNEb25lSnVtcCA9IHRydWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jb2RlUHRyID0gY29kZVB0cjsK
LSAgICAgICAgaWYgKG5lZWRzRG9uZUp1bXApIHsKLSAgICAgICAgICAgIEFTU0VSVCghaXNEYXRh
SUMpOwotICAgICAgICAgICAgZG9uZS5hcHBlbmQoc3R1YkppdC5qdW1wKCkpOwotICAgICAgICB9
Ci0gICAgfQotICAgIAotICAgIHNsb3dQYXRoLmxpbmsoJnN0dWJKaXQpOwotICAgIGJpbmFyeVN3
aXRjaC5mYWxsVGhyb3VnaCgpLmxpbmsoJnN0dWJKaXQpOwotCi0gICAgaWYgKGZyYW1lU2h1ZmZs
ZXIpIHsKLSAgICAgICAgZnJhbWVTaHVmZmxlci0+cmVsZWFzZUdQUihjYWxsZWVHUFIpOwotICAg
ICAgICBmcmFtZVNodWZmbGVyLT5yZWxlYXNlR1BSKGNvbXBhcmlzb25WYWx1ZUdQUik7Ci0gICAg
ICAgIGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VHUFIoZmFzdENvdW50c0Jhc2VHUFIpOwotI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGZyYW1lU2h1ZmZsZXItPnNldENhbGxlZUpTVmFsdWVS
ZWdzKEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCkpOwotI2Vsc2UK
LSAgICAgICAgZnJhbWVTaHVmZmxlci0+c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3Mo
R1BSSW5mbzo6cmVnVDApKTsKLSNlbmRpZgotICAgICAgICBmcmFtZVNodWZmbGVyLT5wcmVwYXJl
Rm9yU2xvd1BhdGgoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdHViSml0Lm1vdmUoY2FsbGVl
R1BSLCBHUFJJbmZvOjpyZWdUMCk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgc3R1
YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBH
UFJJbmZvOjpyZWdUMSk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgc3R1YkppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBHUFJJbmZvOjpyZWdUMyk7Ci0gICAg
c3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY2FsbExpbmtJbmZvKSwg
R1BSSW5mbzo6cmVnVDIpOwotCi0gICAgLy8gMS4gSWYgaXQgaXMgbm90IERhdGFJQywgbGlua1Jl
Z2lzdGVyIGlzIG5vdCBwb2ludGluZyB0aGUgZG9uZUxvY2F0aW9uLgotICAgIC8vIDIuIElmIGl0
IGlzIHRhaWwtY2FsbCwgbGlua1JlZ2lzdGVyIGlzIG5vdCBwb2ludGluZyB0aGUgZG9uZUxvY2F0
aW9uIGZvciBzbG93LWNhbGwgY2FzZS4gQnV0IHNpbmNlIHdlIGFyZSBub3QgZXhlY3V0aW5nIHBy
ZXBhcmVGb3JUYWlsQ2FsbCwgd2Ugc3RpbGwgc3RhY2sgZW50cmllcyBmb3IgdGhlIGNhbGxlcidz
IGZyYW1lLgotICAgIC8vIDMuIElmIHdlJ3JlIGEgZGF0YSBJQywgdGhlbiB0aGUgcmV0dXJuIGFk
ZHJlc3MgaXMgYWxyZWFkeSBjb3JyZWN0Ci0gICAgLy8gVGh1cyB3ZSBuZWVkIHRvIHB1dCBpdCBm
b3IgdGhlIHNsb3ctcGF0aCBjYWxsLgotICAgIGlmICghaXNEYXRhSUMpIHsKLSAgICAgICAgc3R1
YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8uZG9uZUxv
Y2F0aW9uKCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSwgR1BSSW5mbzo6cmVnVDQpOwot
ICAgICAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86
OnJlZ1Q0KTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBGSVhNRTogV2UgYXJlIG5vdCBkb2lu
ZyBhIHJlYWwgdGFpbC1jYWxsIGluIHRoaXMgY2FzZS4gV2UgbGVhdmUgc3RhY2sgZW50cmllcyBp
biB0aGUgY2FsbGVyLCBhbmQgd2UgYXJlIG5vdCBydW5uaW5nIHByZXBhcmVGb3JUYWlsQ2FsbCwg
dGh1cywKLSAgICAgICAgLy8gd2Ugd2lsbCByZXR1cm4gdG8gdGhlIGNhbGxlciBhZnRlciB0aGUg
Y2FsbGVlIGZpbmlzaGVzLiBXZSBzaG91bGQgbWFrZSBpdCBhIHJlYWwgdGFpbC1jYWxsIGZvciB0
aGlzIHNsb3cgcGF0aCBjYXNlLgotICAgICAgICBpZiAoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwo
KSkgewotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgICAgICAgICAvLyBJdCBuZWVkcyB0byBiZSBM
TEludCBvciBCYXNlbGluZSBzaW5jZSB3ZSBhcmUgdXNpbmcgcmV0dXJuRnJvbUJhc2VsaW5lR2Vu
ZXJhdG9yLgotICAgICAgICAgICAgaWYgKCFpc1dlYkFzc2VtYmx5KQotICAgICAgICAgICAgICAg
IEFTU0VSVCghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxlckNvZGVCbG9jay0+aml0VHlw
ZSgpKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIodm0uZ2V0Q1RJU3R1YihKSVQ6OnJldHVybkZyb21CYXNlbGluZUdlbmVyYXRv
cikuY29kZSgpLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsK
LSAgICAgICAgICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BS
SW5mbzo6cmVnVDQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQXNzZW1ibHlIZWxwZXJzOjpK
dW1wIHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcihzdHViSml0LCBvd25lciwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUs
IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0gICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0Fs
bG9jYXRlKCkpIHsKLSAgICAgICAgbGlua1ZpcnR1YWxGb3Iodm0sIGNhbGxGcmFtZSwgY2FsbExp
bmtJbmZvKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VS
VChjYWxsQ2FzZXMuc2l6ZSgpID09IGNhbGxzLnNpemUoKSk7Ci0gICAgZm9yIChDYWxsVG9Db2Rl
UHRyIGNhbGxUb0NvZGVQdHIgOiBjYWxscykgewotI2lmIENQVShBUk1fVEhVTUIyKQotICAgICAg
ICAvLyBUYWlsIGNhbGwgc3BlY2lhbC1jYXNpbmcgZW5zdXJlcyBwcm9wZXIgbGlua2luZyBvbiBB
Uk0gVGh1bWIyLCB3aGVyZSBhIHRhaWwgY2FsbCBqdW1wcyB0byBhbiBhZGRyZXNzCi0gICAgICAg
IC8vIHdpdGggYSBub24tZGVjb3JhdGVkIGJvdHRvbSBiaXQgYnV0IGEgbm9ybWFsIGNhbGwgY2Fs
bHMgYW4gYWRkcmVzcyB3aXRoIGEgZGVjb3JhdGVkIGJvdHRvbSBiaXQuCi0gICAgICAgIGJvb2wg
aXNUYWlsQ2FsbCA9IGNhbGxUb0NvZGVQdHIuY2FsbC5pc0ZsYWdTZXQoQ0NhbGxIZWxwZXJzOjpD
YWxsOjpUYWlsKTsKLSAgICAgICAgdm9pZCogdGFyZ2V0ID0gaXNUYWlsQ2FsbCA/IGNhbGxUb0Nv
ZGVQdHIuY29kZVB0ci5kYXRhTG9jYXRpb24oKSA6IGNhbGxUb0NvZGVQdHIuY29kZVB0ci5leGVj
dXRhYmxlQWRkcmVzcygpOwotICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxUb0NvZGVQdHIu
Y2FsbCwgRnVuY3Rpb25QdHI8SlNFbnRyeVB0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3ModGFyZ2V0KSkpOwotI2Vs
c2UKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9u
UHRyPEpTRW50cnlQdHJUYWc+KGNhbGxUb0NvZGVQdHIuY29kZVB0cikpOwotI2VuZGlmCi0gICAg
fQotCi0gICAgaWYgKCFkb25lLmVtcHR5KCkpIHsKLSAgICAgICAgQVNTRVJUKCFpc0RhdGFJQyk7
Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmRvbmVMb2NhdGlv
bigpKTsKLSAgICB9Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJl
bDxKSVRUaHVua1B0clRhZz4odm0uZ2V0Q1RJU3R1YihsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtH
ZW5lcmF0b3IpLmNvZGUoKSkpOwotICAgIAotICAgIGF1dG8gc3R1YlJvdXRpbmUgPSBhZG9wdFJl
ZigqbmV3IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKAotICAgICAgICBGSU5BTElaRV9DT0RF
X0ZPUigKLSAgICAgICAgICAgIGNhbGxlckNvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJS
b3V0aW5lUHRyVGFnLAotICAgICAgICAgICAgIlBvbHltb3JwaGljIGNhbGwgc3R1YiBmb3IgJXMs
IHJldHVybiBwb2ludCAlcCwgdGFyZ2V0cyAlcyIsCi0gICAgICAgICAgICAgICAgaXNXZWJBc3Nl
bWJseSA/ICJXZWJBc3NlbWJseSIgOiB0b0NTdHJpbmcoKmNhbGxlckNvZGVCbG9jaykuZGF0YSgp
LCBjYWxsTGlua0luZm8uZG9uZUxvY2F0aW9uKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAg
ICAgICAgICAgICB0b0NTdHJpbmcobGlzdER1bXAoY2FsbENhc2VzKSkuZGF0YSgpKSwKLSAgICAg
ICAgdm0sIG93bmVyLCBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCksIGNhbGxMaW5rSW5mbywgY2Fs
bENhc2VzLAotICAgICAgICBXVEZNb3ZlKGZhc3RDb3VudHMpKSk7Ci0KLSAgICAvLyBUaGUgb3Jp
Z2luYWwgc2xvdyBwYXRoIGlzIHVucmVhY2hhYmxlIG9uIDY0LWJpdHMsIGJ1dCBzdGlsbAotICAg
IC8vIHJlYWNoYWJsZSBvbiAzMi1iaXRzIHNpbmNlIGEgbm9uLWNlbGwgY2FsbGVlIHdpbGwgYWx3
YXlzCi0gICAgLy8gdHJpZ2dlciB0aGUgc2xvdyBwYXRoCi0gICAgbGlua1Nsb3dGb3Iodm0sIGNh
bGxMaW5rSW5mbyk7Ci0KLSAgICAvLyBJZiB0aGVyZSBoYWQgYmVlbiBhIHByZXZpb3VzIHN0dWIg
cm91dGluZSwgdGhhdCBvbmUgd2lsbCBkaWUgYXMgc29vbiBhcyB0aGUgR0MgcnVucyBhbmQgc2Vl
cwotICAgIC8vIHRoYXQgaXQncyBubyBsb25nZXIgb24gc3RhY2suCi0gICAgY2FsbExpbmtJbmZv
LnNldFN0dWIoV1RGTW92ZShzdHViUm91dGluZSkpOwotICAgIAotICAgIC8vIFRoZSBjYWxsIGxp
bmsgaW5mbyBubyBsb25nZXIgaGFzIGEgY2FsbCBjYWNoZSBhcGFydCBmcm9tIHRoZSBqdW1wIHRv
IHRoZSBwb2x5bW9ycGhpYyBjYWxsCi0gICAgLy8gc3R1Yi4KLSAgICBpZiAoY2FsbExpbmtJbmZv
LmlzT25MaXN0KCkpCi0gICAgICAgIGNhbGxMaW5rSW5mby5yZW1vdmUoKTsKLX0KLQotdm9pZCBy
ZXNldEdldEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIEdldEJ5S2luZCBraW5kKQotewotICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2Nr
LCBzdHViSW5mbywgYXBwcm9wcmlhdGVPcHRpbWl6aW5nR2V0QnlGdW5jdGlvbihraW5kKSk7Ci0g
ICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OkJ5SWQ6Ci0gICAgY2FzZSBH
ZXRCeUtpbmQ6OkJ5SWRXaXRoVGhpczoKLSAgICBjYXNlIEdldEJ5S2luZDo6VHJ5QnlJZDoKLSAg
ICBjYXNlIEdldEJ5S2luZDo6QnlJZERpcmVjdDoKLSAgICBjYXNlIEdldEJ5S2luZDo6UHJpdmF0
ZU5hbWVCeUlkOgotICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNz
KGNvZGVCbG9jaywgc3R1YkluZm8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdldEJ5S2lu
ZDo6QnlWYWw6Ci0gICAgY2FzZSBHZXRCeUtpbmQ6OlByaXZhdGVOYW1lOgotICAgICAgICBJbmxp
bmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29k
ZUJsb2NrLCBzdHViSW5mbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCByZXNl
dFB1dEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8s
IFB1dEJ5S2luZCBraW5kKQotewotICAgIEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4gb3B0
aW1pemVkRnVuY3Rpb247Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBQdXRCeUtpbmQ6
OkJ5SWQ6IHsKLSAgICAgICAgdXNpbmcgRnVuY3Rpb25UeXBlID0gZGVjbHR5cGUoJm9wZXJhdGlv
blB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSk7Ci0gICAgICAgIEZ1bmN0aW9uVHlwZSB1bm9w
dGltaXplZEZ1bmN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KHJlYWRQdXRJ
Q0NhbGxUYXJnZXQoY29kZUJsb2NrLCBzdHViSW5mbykuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0g
ICAgICAgIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3Qg
fHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUp
Ci0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTdHJpY3RP
cHRpbWl6ZTsKLSAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0IHx8IHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0
QnlJZE5vblN0cmljdE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBv
cGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2UgaWYgKHVub3B0
aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCB8fCB1bm9wdGlt
aXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZSkKLSAg
ICAgICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmlj
dE9wdGltaXplOwotICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJh
dGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRTdHJpY3QgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9
PSBvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemUpCi0gICAgICAg
ICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWRTZXRQcml2YXRlRmllbGRT
dHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeUlkRGVmaW5lUHJpdmF0ZUZpZWxkU3RyaWN0IHx8IHVub3B0aW1pemVkRnVu
Y3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERlZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXpl
KQotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeUlkRGVmaW5l
UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1pemU7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
QVNTRVJUKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0
cmljdCB8fCB1bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25T
dHJpY3RPcHRpbWl6ZSk7Ci0gICAgICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlv
blB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgY2FzZSBQdXRCeUtpbmQ6OkJ5VmFsOiB7Ci0gICAgICAgIHVzaW5nIEZ1
bmN0aW9uVHlwZSA9IGRlY2x0eXBlKCZvcGVyYXRpb25QdXRCeVZhbFN0cmljdE9wdGltaXplKTsK
LSAgICAgICAgRnVuY3Rpb25UeXBlIHVub3B0aW1pemVkRnVuY3Rpb24gPSByZWludGVycHJldF9j
YXN0PEZ1bmN0aW9uVHlwZT4ocmVhZFB1dElDQ2FsbFRhcmdldChjb2RlQmxvY2ssIHN0dWJJbmZv
KS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rpb24g
PT0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSkKLSAgICAgICAgICAgIG9wdGltaXpl
ZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZTsKLSAgICAgICAgZWxz
ZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdEdl
bmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmlj
dE9wdGltaXplKQotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRC
eVZhbE5vblN0cmljdE9wdGltaXplOwotICAgICAgICBlbHNlIGlmICh1bm9wdGltaXplZEZ1bmN0
aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0R2VuZXJpYyB8fCB1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpCi0gICAg
ICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsU3RyaWN0
T3B0aW1pemU7Ci0gICAgICAgIGVsc2UgaWYgKHVub3B0aW1pemVkRnVuY3Rpb24gPT0gb3BlcmF0
aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRHZW5lcmljIHx8IHVub3B0aW1pemVkRnVuY3Rp
b24gPT0gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRlRmllbGRPcHRpbWl6ZSkKLSAgICAg
ICAgICAgIG9wdGltaXplZEZ1bmN0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEZWZpbmVQcml2YXRl
RmllbGRPcHRpbWl6ZTsKLSAgICAgICAgZWxzZSBpZiAodW5vcHRpbWl6ZWRGdW5jdGlvbiA9PSBv
cGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZEdlbmVyaWMgfHwgdW5vcHRpbWl6ZWRGdW5j
dGlvbiA9PSBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplKQotICAgICAg
ICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25QdXRCeVZhbFNldFByaXZhdGVGaWVs
ZE9wdGltaXplOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCh1bm9wdGltaXpl
ZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0R2VuZXJpYyB8fCB1
bm9wdGltaXplZEZ1bmN0aW9uID09IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsTm9uU3RyaWN0T3B0
aW1pemUpOwotICAgICAgICAgICAgb3B0aW1pemVkRnVuY3Rpb24gPSBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbE5vblN0cmljdE9wdGltaXplOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICB9Ci0KLSAgICByZXBhdGNoU2xvd1BhdGhDYWxsKGNvZGVCbG9jaywgc3R1YkluZm8s
IG9wdGltaXplZEZ1bmN0aW9uKTsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIFB1dEJ5
S2luZDo6QnlJZDoKLSAgICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vz
cyhjb2RlQmxvY2ssIHN0dWJJbmZvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQdXRCeUtp
bmQ6OkJ5VmFsOgotICAgICAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNz
Tm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLX0KLQotdm9pZCByZXNldERlbEJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIERlbEJ5S2luZCBraW5kKQotewotICAgIGlmIChraW5k
ID09IERlbEJ5S2luZDo6QnlJZCkKLSAgICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBvcGVyYXRpb25EZWxldGVCeUlkT3B0aW1pemUpOwotICAgIGVsc2UKLSAg
ICAgICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25E
ZWxldGVCeVZhbE9wdGltaXplKTsKLSAgICBJbmxpbmVBY2Nlc3M6OnJlc2V0U3R1YkFzSnVtcElu
QWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBzdHViSW5mbyk7Ci19Ci0KLXZv
aWQgcmVzZXRJbkJ5KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIEluQnlLaW5kIGtpbmQpCi17Ci0gICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLCBhcHByb3ByaWF0ZU9wdGltaXppbmdJbkJ5RnVuY3Rpb24oa2luZCkpOwot
ICAgIGlmIChraW5kID09IEluQnlLaW5kOjpCeUlkKQotICAgICAgICBJbmxpbmVBY2Nlc3M6OnJl
c2V0U3R1YkFzSnVtcEluQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotICAgIGVsc2UKLSAg
ICAgICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5l
QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotfQotCi12b2lkIHJlc2V0SGFzUHJpdmF0ZUJy
YW5kKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCi17
Ci0gICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBvcGVyYXRpb25I
YXNQcml2YXRlQnJhbmRPcHRpbWl6ZSk7Ci0gICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1
bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotfQot
Ci12b2lkIHJlc2V0SW5zdGFuY2VPZihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvKQotewotICAgIHJlcGF0Y2hTbG93UGF0aENhbGwoY29kZUJsb2NrLCBz
dHViSW5mbywgb3BlcmF0aW9uSW5zdGFuY2VPZk9wdGltaXplKTsKLSAgICBJbmxpbmVBY2Nlc3M6
OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJsb2NrLCBz
dHViSW5mbyk7Ci19Ci0KLXZvaWQgcmVzZXRDaGVja1ByaXZhdGVCcmFuZChDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQotewotICAgIHJlcGF0Y2hTbG93
UGF0aENhbGwoY29kZUJsb2NrLCBzdHViSW5mbywgb3BlcmF0aW9uQ2hlY2tQcml2YXRlQnJhbmRP
cHRpbWl6ZSk7Ci0gICAgSW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVz
aW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8pOwotfQotCi12b2lkIHJlc2V0U2V0
UHJpdmF0ZUJyYW5kKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8pCi17Ci0gICAgcmVwYXRjaFNsb3dQYXRoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLCBv
cGVyYXRpb25TZXRQcml2YXRlQnJhbmRPcHRpbWl6ZSk7Ci0gICAgSW5saW5lQWNjZXNzOjpyZXNl
dFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNzKGNvZGVCbG9jaywgc3R1Yklu
Zm8pOwotfQotCi0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2EwMzY1MzI2YWJm
YmVkZWUwNTc1ODljNDU0MDliMmViMzY1ODk1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCisr
KyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQ2FjaGVh
YmxlSWRlbnRpZmllci5oIgotI2luY2x1ZGUgIkNhbGxWYXJpYW50LmgiCi0jaW5jbHVkZSAiUHV0
S2luZC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgU3RydWN0dXJlU3R1YkluZm87Ci0K
LWVudW0gY2xhc3MgR2V0QnlLaW5kIHsKLSAgICBCeUlkLAotICAgIEJ5VmFsLAotICAgIFRyeUJ5
SWQsCi0gICAgQnlJZFdpdGhUaGlzLAotICAgIEJ5SWREaXJlY3QsCi0gICAgUHJpdmF0ZU5hbWUs
Ci0gICAgUHJpdmF0ZU5hbWVCeUlkLAotfTsKLQotZW51bSBjbGFzcyBQdXRCeUtpbmQgewotICAg
IEJ5SWQsCi0gICAgQnlWYWwsCi19OwotCi1lbnVtIGNsYXNzIERlbEJ5S2luZCB7Ci0gICAgQnlJ
ZCwKLSAgICBCeVZhbAotfTsKLQotZW51bSBjbGFzcyBJbkJ5S2luZCB7Ci0gICAgQnlJZCwKLSAg
ICBCeVZhbCwKLSAgICBQcml2YXRlTmFtZQotfTsKLQotdm9pZCByZXBhdGNoQXJyYXlHZXRCeVZh
bChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBpbmRl
eCwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVwYXRjaEdldEJ5KEpTR2xvYmFsT2JqZWN0
KiwgQ29kZUJsb2NrKiwgSlNWYWx1ZSwgQ2FjaGVhYmxlSWRlbnRpZmllciwgY29uc3QgUHJvcGVy
dHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBHZXRCeUtpbmQpOwotdm9pZCByZXBhdGNoQXJy
YXlQdXRCeVZhbChKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUgYmFzZSwgSlNW
YWx1ZSBpbmRleCwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kLCBFQ01BTW9kZSk7Ci12b2lk
IHJlcGF0Y2hQdXRCeShKU0dsb2JhbE9iamVjdCosIENvZGVCbG9jayosIEpTVmFsdWUsIFN0cnVj
dHVyZSosIENhY2hlYWJsZUlkZW50aWZpZXIsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVj
dHVyZVN0dWJJbmZvJiwgUHV0QnlLaW5kLCBQdXRLaW5kKTsKLXZvaWQgcmVwYXRjaERlbGV0ZUJ5
KEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgRGVsZXRlUHJvcGVydHlTbG90JiwgSlNWYWx1
ZSwgU3RydWN0dXJlKiwgQ2FjaGVhYmxlSWRlbnRpZmllciwgU3RydWN0dXJlU3R1YkluZm8mLCBE
ZWxCeUtpbmQsIEVDTUFNb2RlKTsKLXZvaWQgcmVwYXRjaEluQnkoSlNHbG9iYWxPYmplY3QqLCBD
b2RlQmxvY2sqLCBKU09iamVjdCosIENhY2hlYWJsZUlkZW50aWZpZXIsIGJvb2wgd2FzRm91bmQs
IGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgSW5CeUtpbmQpOwotdm9p
ZCByZXBhdGNoSGFzUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29kZUJsb2NrKiwgSlNP
YmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBib29sIHdhc0ZvdW5kLCAgU3RydWN0dXJlU3R1
YkluZm8mKTsKLXZvaWQgcmVwYXRjaENoZWNrUHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0Kiwg
Q29kZUJsb2NrKiwgSlNPYmplY3QqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwotdm9pZCByZXBhdGNoU2V0UHJpdmF0ZUJyYW5kKEpTR2xvYmFsT2JqZWN0KiwgQ29k
ZUJsb2NrKiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBDYWNoZWFibGVJZGVudGlmaWVyLCBTdHJ1
Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXBhdGNoSW5zdGFuY2VPZihKU0dsb2JhbE9iamVjdCos
IENvZGVCbG9jayosIEpTVmFsdWUgdmFsdWUsIEpTVmFsdWUgcHJvdG90eXBlLCBTdHJ1Y3R1cmVT
dHViSW5mbyYsIGJvb2wgd2FzRm91bmQpOwotdm9pZCBsaW5rTW9ub21vcnBoaWNDYWxsKFZNJiwg
Q2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNPYmplY3QqIGNhbGxlZSwg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKLXZvaWQgbGlua0RpcmVjdENh
bGwoQ2FsbEZyYW1lKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+KTsKLXZvaWQgbGlua1Nsb3dGb3IoQ2FsbEZyYW1lKiwgQ2Fs
bExpbmtJbmZvJik7Ci12b2lkIHVubGlua0NhbGwoVk0mLCBDYWxsTGlua0luZm8mKTsKLXZvaWQg
bGlua1BvbHltb3JwaGljQ2FsbChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIENhbGxMaW5r
SW5mbyYsIENhbGxWYXJpYW50KTsKLXZvaWQgcmVzZXRHZXRCeShDb2RlQmxvY2sqLCBTdHJ1Y3R1
cmVTdHViSW5mbyYsIEdldEJ5S2luZCk7Ci12b2lkIHJlc2V0UHV0QnkoQ29kZUJsb2NrKiwgU3Ry
dWN0dXJlU3R1YkluZm8mLCBQdXRCeUtpbmQpOwotdm9pZCByZXNldERlbEJ5KENvZGVCbG9jayos
IFN0cnVjdHVyZVN0dWJJbmZvJiwgRGVsQnlLaW5kKTsKLXZvaWQgcmVzZXRJbkJ5KENvZGVCbG9j
ayosIFN0cnVjdHVyZVN0dWJJbmZvJiwgSW5CeUtpbmQpOwotdm9pZCByZXNldEhhc1ByaXZhdGVC
cmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXNldEluc3RhbmNl
T2YoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKLXZvaWQgcmVzZXRDaGVja1ByaXZh
dGVCcmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCByZXNldFNldFBy
aXZhdGVCcmFuZChDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwotdm9pZCBmdGxUaHVu
a0F3YXJlUmVwYXRjaENhbGwoQ29kZUJsb2NrKiwgQ29kZUxvY2F0aW9uQ2FsbDxKU0ludGVybmFs
UHRyVGFnPiwgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBuZXdDYWxsZWVGdW5jdGlvbik7
Ci1NYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNUb1dhc21JQ0NvZGVQdHIo
Vk0mLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKU09iamVjdCogY2FsbGVlKTsKLQotCi19IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaElubGluZXMu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVmZTdiMWIzMzc2NGJkZjQyYjJlNGYw
MmQ0ZGYwY2Q5ZTgxYzQ5ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2hJbmxpbmVzLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwyMTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiUmVwYXRjaC5oIgotCi1u
YW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBoYW5kbGVIb3N0Q2Fs
bChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lLCBK
U1ZhbHVlIGNhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCi17Ci0gICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLQotICAgIGNhbGxlZUZyYW1lLT5zZXRDb2RlQmxvY2sobnVsbHB0cik7Ci0KLSAg
ICBpZiAoY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ2FsbCkg
ewotICAgICAgICBhdXRvIGNhbGxEYXRhID0gZ2V0Q2FsbERhdGEodm0sIGNhbGxlZSk7Ci0gICAg
ICAgIEFTU0VSVChjYWxsRGF0YS50eXBlICE9IENhbGxEYXRhOjpUeXBlOjpKUyk7Ci0KLSAgICAg
ICAgaWYgKGNhbGxEYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5hdGl2ZSkgewotICAgICAg
ICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbGVlRnJhbWUpOwotICAg
ICAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlZShhc09iamVjdChjYWxsZWUpKTsKLSAgICAg
ICAgICAgIHZtLmVuY29kZWRIb3N0Q2FsbFJldHVyblZhbHVlID0gY2FsbERhdGEubmF0aXZlLmZ1
bmN0aW9uKGFzT2JqZWN0KGNhbGxlZSktPmdsb2JhbE9iamVjdCh2bSksIGNhbGxlZUZyYW1lKTsK
LSAgICAgICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsKLSAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2Rl
UmVzdWx0KAotICAgICAgICAgICAgICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2VwdGlvbkZyb21D
YWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgICAgICAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoCi0gICAgICAgICAgICAgICAg
TExJbnQ6OmdldEhvc3RDYWxsUmV0dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksCi0gICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2Fs
bExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6
IEtlZXBUaGVGcmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKGNhbGxEYXRhLnR5
cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOwotICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9i
YWxPYmplY3QsIHNjb3BlLCBjcmVhdGVOb3RBRnVuY3Rpb25FcnJvcihnbG9iYWxPYmplY3QsIGNh
bGxlZSkpOwotICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KAotICAgICAgICAgICAgdm0uZ2V0
Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCksCi0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUp
KTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQo
KSA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLQotICAgIGF1dG8gY29uc3RydWN0RGF0YSA9IGdldENv
bnN0cnVjdERhdGEodm0sIGNhbGxlZSk7Ci0gICAgQVNTRVJUKGNvbnN0cnVjdERhdGEudHlwZSAh
PSBDYWxsRGF0YTo6VHlwZTo6SlMpOwotCi0gICAgaWYgKGNvbnN0cnVjdERhdGEudHlwZSA9PSBD
YWxsRGF0YTo6VHlwZTo6TmF0aXZlKSB7Ci0gICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxlZUZyYW1lKTsKLSAgICAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlZShh
c09iamVjdChjYWxsZWUpKTsKLSAgICAgICAgdm0uZW5jb2RlZEhvc3RDYWxsUmV0dXJuVmFsdWUg
PSBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbihhc09iamVjdChjYWxsZWUpLT5nbG9iYWxP
YmplY3Qodm0pLCBjYWxsZWVGcmFtZSk7Ci0gICAgICAgIERpc2FsbG93R0MgZGlzYWxsb3dHQzsK
LSAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewotICAgICAgICAgICAg
cmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgICAgICAgICB2bS5nZXRDVElUaHJvd0V4Y2Vw
dGlvbkZyb21DYWxsU2xvd1BhdGgoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAg
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoTExJbnQ6OmdldEhvc3RDYWxsUmV0
dXJuVmFsdWVFbnRyeXBvaW50KCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkpOwotICAgIH0KLQotICAgIEFTU0VSVChjb25z
dHJ1Y3REYXRhLnR5cGUgPT0gQ2FsbERhdGE6OlR5cGU6Ok5vbmUpOwotICAgIHRocm93RXhjZXB0
aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2Jh
bE9iamVjdCwgY2FsbGVlKSk7Ci0gICAgcmV0dXJuIGVuY29kZVJlc3VsdCgKLSAgICAgICAgdm0u
Z2V0Q1RJVGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCksCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEtlZXBUaGVGcmFtZSkp
OwotfQotCi1BTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSBsaW5rRm9yKENhbGxGcmFt
ZSogY2FsbGVlRnJhbWUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxMaW5rSW5m
byogY2FsbExpbmtJbmZvKQotewotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbGVlRnJh
bWUtPmNhbGxlckZyYW1lKCk7Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kID0gY2FsbExpbmtJbmZvLT5zcGVjaWFsaXphdGlvbktpbmQo
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotCi0g
ICAgUkVMRUFTRV9BU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNEaXJlY3QoKSk7Ci0KLSAgICBKU1Zh
bHVlIGNhbGxlZUFzVmFsdWUgPSBjYWxsZWVGcmFtZS0+Z3VhcmFudGVlZEpTVmFsdWVDYWxsZWUo
KTsKLSAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxs
ZWVBc1ZhbHVlKTsKLSAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBpbnRlcm5hbEZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9u
Kj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8SlNFbnRyeVB0clRhZz4gY29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFt
cG9saW5lRm9yKGtpbmQpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoISFjb2RlUHRyKTsK
LQotICAgICAgICAgICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCi0gICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgbGlua01vbm9tb3JwaGljQ2FsbCh2bSwgY2FsbGVlRnJhbWUsICpjYWxsTGlua0lu
Zm8sIG51bGxwdHIsIGludGVybmFsRnVuY3Rpb24sIGNvZGVQdHIpOwotCi0gICAgICAgICAgICB2
b2lkKiBsaW5rZWRUYXJnZXQgPSBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGxpbmtlZFRhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oY2FsbExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VU
aGVGcmFtZSA6IEtlZXBUaGVGcmFtZSkpOwotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQU5E
X1JFVFVSTih0aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxlZUZy
YW1lLCBjYWxsZWVBc1ZhbHVlLCBjYWxsTGlua0luZm8pKTsKLSAgICB9Ci0KLSAgICBKU0Z1bmN0
aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsK
LSAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxlZS0+c2NvcGVVbmNoZWNrZWQoKTsKLSAgICBFeGVj
dXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpOwotCi0gICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7Ci0gICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBudWxscHRyOwotICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlv
bigpKSB7Ci0gICAgICAgIGNvZGVQdHIgPSBqc1RvV2FzbUlDQ29kZVB0cih2bSwga2luZCwgY2Fs
bGVlKTsKLSAgICAgICAgaWYgKCFjb2RlUHRyKQotICAgICAgICAgICAgY29kZVB0ciA9IGV4ZWN1
dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGlj
X2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7Ci0KLSAgICAgICAgYXV0byBo
YW5kbGVUaHJvd0V4Y2VwdGlvbiA9IFsmXSAoKSB7Ci0gICAgICAgICAgICB2b2lkKiB0aHJvd1Rh
cmdldCA9IHZtLmdldENUSVRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aCgpLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICAgICAgcmV0dXJuIGVuY29kZVJlc3VsdCh0aHJv
d1RhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oS2VlcFRoZUZyYW1lKSk7Ci0gICAgICAg
IH07Ci0KLSAgICAgICAgaWYgKCFpc0NhbGwoa2luZCkgJiYgZnVuY3Rpb25FeGVjdXRhYmxlLT5j
b25zdHJ1Y3RBYmlsaXR5KCkgPT0gQ29uc3RydWN0QWJpbGl0eTo6Q2Fubm90Q29uc3RydWN0KSB7
Ci0gICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIGNy
ZWF0ZU5vdEFDb25zdHJ1Y3RvckVycm9yKGdsb2JhbE9iamVjdCwgY2FsbGVlKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gaGFuZGxlVGhyb3dFeGNlcHRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAg
IENvZGVCbG9jayoqIGNvZGVCbG9ja1Nsb3QgPSBjYWxsZWVGcmFtZS0+YWRkcmVzc09mQ29kZUJs
b2NrKCk7Ci0gICAgICAgIGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbjxG
dW5jdGlvbkV4ZWN1dGFibGU+KHZtLCBjYWxsZWUsIHNjb3BlLCBraW5kLCAqY29kZUJsb2NrU2xv
dCk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgaGFuZGxlVGhyb3dF
eGNlcHRpb24oKSk7Ci0KLSAgICAgICAgY29kZUJsb2NrID0gKmNvZGVCbG9ja1Nsb3Q7Ci0gICAg
ICAgIEFTU0VSVChjb2RlQmxvY2spOwotCi0gICAgICAgIEFyaXR5Q2hlY2tNb2RlIGFyaXR5Owot
ICAgICAgICBpZiAoY2FsbGVlRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPCBz
dGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSB8fCBjYWxsTGlu
a0luZm8tPmlzVmFyYXJncygpKQotICAgICAgICAgICAgYXJpdHkgPSBNdXN0Q2hlY2tBcml0eTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVxdWlyZWQ7
Ci0gICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2lu
ZCwgYXJpdHkpOwotICAgIH0KLQotICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQot
ICAgICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsKLSAgICBlbHNlCi0gICAgICAgIGxpbmtN
b25vbW9ycGhpY0NhbGwodm0sIGNhbGxlZUZyYW1lLCAqY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ss
IGNhbGxlZSwgY29kZVB0cik7Ci0KLSAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGNvZGVQdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2FsbExpbmtJbmZvLT5j
YWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6IEtlZXBUaGVGcmFt
ZSkpOwotfQotCi1BTFdBWVNfSU5MSU5FIFNsb3dQYXRoUmV0dXJuVHlwZSB2aXJ0dWFsRm9yV2l0
aEZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbGVl
RnJhbWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBKU0NlbGwqJiBjYWxsZWVBc0Z1bmN0
aW9uQ2VsbCkKLXsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxlZUZyYW1lLT5jYWxs
ZXJGcmFtZSgpOwotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCA9IGNhbGxMaW5rSW5mby0+c3BlY2lhbGl6YXRpb25LaW5kKCk7Ci0gICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLQotICAgIEpTVmFs
dWUgY2FsbGVlQXNWYWx1ZSA9IGNhbGxlZUZyYW1lLT5ndWFyYW50ZWVkSlNWYWx1ZUNhbGxlZSgp
OwotICAgIGNhbGxlZUFzRnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihjYWxsZWVBc1ZhbHVl
KTsKLSAgICBpZiAoVU5MSUtFTFkoIWNhbGxlZUFzRnVuY3Rpb25DZWxsKSkgewotICAgICAgICBp
ZiAoanNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4odm0sIGNhbGxlZUFzVmFsdWUpKSB7
Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0
ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKGtpbmQpOwotICAgICAg
ICAgICAgQVNTRVJUKCEhY29kZVB0cik7Ci0gICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0
KGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY2Fs
bExpbmtJbmZvLT5jYWxsTW9kZSgpID09IENhbGxNb2RlOjpUYWlsID8gUmV1c2VUaGVGcmFtZSA6
IEtlZXBUaGVGcmFtZSkpOwotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0
aHJvd1Njb3BlLCBoYW5kbGVIb3N0Q2FsbChnbG9iYWxPYmplY3QsIGNhbGxlZUZyYW1lLCBjYWxs
ZWVBc1ZhbHVlLCBjYWxsTGlua0luZm8pKTsKLSAgICB9Ci0KLSAgICBKU0Z1bmN0aW9uKiBmdW5j
dGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwotICAgIEpT
U2NvcGUqIHNjb3BlID0gZnVuY3Rpb24tPnNjb3BlVW5jaGVja2VkKCk7Ci0gICAgRXhlY3V0YWJs
ZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOwotICAgIGlmIChVTkxJ
S0VMWSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZvcihraW5kKSkpIHsKLSAgICAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4
ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLQotICAgICAgICBhdXRvIGhhbmRsZVRocm93RXhjZXB0
aW9uID0gWyZdICgpIHsKLSAgICAgICAgICAgIHZvaWQqIHRocm93VGFyZ2V0ID0gdm0uZ2V0Q1RJ
VGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCk7Ci0gICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KHRocm93VGFyZ2V0LCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihLZWVwVGhlRnJhbWUpKTsKLSAgICAgICAgfTsKLQotICAgICAgICBp
ZiAoIWlzQ2FsbChraW5kKSAmJiBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbnN0cnVjdEFiaWxpdHko
KSA9PSBDb25zdHJ1Y3RBYmlsaXR5OjpDYW5ub3RDb25zdHJ1Y3QpIHsKLSAgICAgICAgICAgIHRo
cm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwgY3JlYXRlTm90QUNvbnN0cnVj
dG9yRXJyb3IoZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbikpOwotICAgICAgICAgICAgcmV0dXJuIGhh
bmRsZVRocm93RXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBDb2RlQmxvY2sqKiBj
b2RlQmxvY2tTbG90ID0gY2FsbGVlRnJhbWUtPmFkZHJlc3NPZkNvZGVCbG9jaygpOwotICAgICAg
ICBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb248RnVuY3Rpb25FeGVjdXRh
YmxlPih2bSwgZnVuY3Rpb24sIHNjb3BlLCBraW5kLCAqY29kZUJsb2NrU2xvdCk7Ci0gICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgaGFuZGxlVGhyb3dFeGNlcHRpb24oKSk7
Ci0gICAgfQotICAgIC8vIEZJWE1FOiBTdXBwb3J0IHdhc20gSUMuCi0gICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDMzOQotICAgIHJldHVybiBlbmNvZGVS
ZXN1bHQoZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcigKLSAgICAgICAga2luZCwgTXVzdENoZWNr
QXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCksCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGNhbGxMaW5rSW5mby0+Y2FsbE1vZGUoKSA9PSBDYWxsTW9kZTo6VGFpbCA/IFJldXNlVGhl
RnJhbWUgOiBLZWVwVGhlRnJhbWUpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCg==
</data>
<flag name="review"
          id="470006"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>