<?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>22639</bug_id>
          
          <creation_ts>2008-12-03 16:57:58 -0800</creation_ts>
          <short_desc>Allow JIT to function without call repatching.</short_desc>
          <delta_ts>2008-12-03 21:43:24 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>101276</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-12-03 16:57:58 -0800</bug_when>
    <thetext>I would also compile out all associated datastructures, but right now this results in gcc dying in a fire.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101277</commentid>
    <comment_count>1</comment_count>
      <attachid>25726</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-12-03 17:00:30 -0800</bug_when>
    <thetext>Created attachment 25726
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101291</commentid>
    <comment_count>2</comment_count>
      <attachid>25726</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-12-03 19:40:23 -0800</bug_when>
    <thetext>Comment on attachment 25726
The patch

You should add jit/JITInlineMethods.h to the VS project file, and also add the correct files to the GTK makefiles.

With those changes, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101294</commentid>
    <comment_count>3</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-12-03 21:43:24 -0800</bug_when>
    <thetext>Sending        JavaScriptCore/ChangeLog
Sending        JavaScriptCore/GNUmakefile.am
Sending        JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj
Sending        JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
Sending        JavaScriptCore/jit/JIT.cpp
Sending        JavaScriptCore/jit/JIT.h
Adding         JavaScriptCore/jit/JITCall.cpp
Adding         JavaScriptCore/jit/JITInlineMethods.h
Sending        JavaScriptCore/wtf/Platform.h
Transmitting file data .........
Committed revision 38984.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25726</attachid>
            <date>2008-12-03 17:00:30 -0800</date>
            <delta_ts>2008-12-03 19:40:23 -0800</delta_ts>
            <desc>The patch</desc>
            <filename>patch.jitcall.txt</filename>
            <type>text/plain</type>
            <size>697091</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM4OTc4
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMDgtMTIt
MDMgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsbG93IEpJVCB0byBvcGVy
YXRlIHdpdGhvdXQgdGhlIGNhbGwtcmVwYXRjaGluZyBvcHRpbWl6YXRpb24uCisgICAgICAgIENv
bnRyb2xsZWQgYnkgRU5BQkxFKEpJVF9PUFRJTUlaRV9DQUxMKSwgZGVmYXVsdHMgb24sIGRpc2Fi
bGluZworICAgICAgICB0aGlzIGxlYWRzIHRvIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIHJlZ3Jl
c3Npb24uCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyNjM5CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAg
ICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6IENvcGllZCBmcm9tIGppdC9KSVQuY3BwLgorICAgICAg
ICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYW1lKToKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2V0dXBBcmdzKToKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlT3BDYWxsRXZhbFNldHVwQXJncyk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9w
Q29uc3RydWN0U2V0dXBBcmdzKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsKToK
KyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UpOgorICAgICAgICAoSlND
Ojp1bnJlYWNoYWJsZSk6CisgICAgICAgICogaml0L0pJVElubGluZU1ldGhvZHMuaDogQ29waWVk
IGZyb20gaml0L0pJVC5jcHAuCisgICAgICAgIChKU0M6OkpJVDo6Y2hlY2tTdHJ1Y3R1cmUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGYXN0QXJpdGhQb3RlbnRpYWxseVJlVGFnSW1tZWRpYXRl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0VGFnQXNCb29sSW1tZWRpYXRlKToKKyAgICAgICAg
KiB3dGYvUGxhdGZvcm0uaDoKKwogMjAwOC0xMi0wMyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIEZpeCBidWlsZC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkocmV2
aXNpb24gMzg5NzcpCisrKyBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjU0LDYgKzEyNTQsMTggQEAK
IAkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXGppdFxKSVRDYWxsLmNwcCINCisJCQkJPg0KKwkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2VfUEdPfFdpbjMyIg0KKwkJCQkJPg0KKwkJ
CQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCVdob2xlUHJv
Z3JhbU9wdGltaXphdGlvbj0iZmFsc2UiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGpp
dFxKSVQuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkluZGV4OiBKYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDM4OTc3KQorKysgSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMyw4
IEBACiAJCTg2OTA4MzE2MEU2NTE4RDcwMDBEMzZFRCAvKiBXUkVDLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjkwODMxNDBFNjUxOEQ3MDAwRDM2RUQg
LyogV1JFQy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTg2OUVCQ0I3MEU4QzZENEEwMDg3MjJDQyAvKiBSZXN1bHRUeXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjlFQkNCNjBFOEM2RDRBMDA4NzIy
Q0MgLyogUmVzdWx0VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTg2QzM2RUVBMEVFMTI4OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZDMzZFRTkw
RUUxMjg5RDAwQjNERjU5IC8qIE1hY3JvQXNzZW1ibGVyLmggKi87IH07CisJCTg2Q0M4NERCMEVF
NzI4QjkwMDI4ODY4MiAvKiBKSVRJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkNDODREQTBFRTcyOEI5MDAyODg2ODIgLyogSklU
SW5saW5lTWV0aG9kcy5oICovOyB9OworCQk4NkNDODRERDBFRTczMUVFMDAyODg2ODIgLyogSklU
Q2FsbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
NkNDODREQzBFRTczMUVFMDAyODg2ODIgLyogSklUQ2FsbC5jcHAgKi87IH07CiAJCTkwNUIwMkFF
MEUyODY0MEYwMDZERjg4MiAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTA1QjAyQUQwRTI4NjQwRjAwNkRG
ODgyIC8qIFJlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAgKi87IH07CiAJCTkwRDM0NjlDMEUyODUy
ODAwMDk0OTJFRSAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDM0NjlCMEUyODUyODAwMDk0OTJFRSAvKiBS
ZWZDb3VudGVkTGVha0NvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk5MzA3NTRDMTA4QjBGNjgwMDBBQjMwNTYgLyogcGNyZV9jb21waWxl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMDc1
NEJGMDhCMEY2ODAwMEFCMzA1NiAvKiBwY3JlX2NvbXBpbGUuY3BwICovOyB9OwpAQCAtNTQ4LDYg
KzU1MCw4IEBACiAJCTg2OTA4MzE0MEU2NTE4RDcwMDBEMzZFRCAvKiBXUkVDLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdSRUMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODY5RUJDQjYwRThDNkQ0QTAwODcyMkNDIC8qIFJlc3VsdFR5cGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzdWx0VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NkMzNkVFOTBFRTEyODlEMDBCM0RGNTkgLyogTWFjcm9Bc3NlbWJsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODZDQzg0REEwRUU3MjhCOTAwMjg4NjgyIC8qIEpJVElu
bGluZU1ldGhvZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUSW5saW5l
TWV0aG9kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkNDODREQzBFRTczMUVF
MDAyODg2ODIgLyogSklUQ2FsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKSVRDYWxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTA1QjAyQUQw
RTI4NjQwRjAwNkRGODgyIC8qIFJlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MEQzNDY5QjBFMjg1MjgwMDA5NDkyRUUgLyogUmVm
Q291bnRlZExlYWtDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
ZkNvdW50ZWRMZWFrQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzAz
RjU2NzA5OTExOEZBMDBBRDcxQjggLyogT3duUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE93blB0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTEyLDYg
KzkxNiw4IEBACiAJCTE0MjlEOTJDMEVEMjJENzAwMEI4OTYxOSAvKiBqaXQgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTg2Q0M4NERDMEVFNzMxRUUwMDI4
ODY4MiAvKiBKSVRDYWxsLmNwcCAqLywKKwkJCQk4NkNDODREQTBFRTcyOEI5MDAyODg2ODIgLyog
SklUSW5saW5lTWV0aG9kcy5oICovLAogCQkJCTE0MjlEOTJEMEVEMjJENzAwMEI4OTYxOSAvKiBK
SVQuY3BwICovLAogCQkJCTE0MjlEOTJFMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuaCAqLywKIAkJ
CSk7CkBAIC0xNjI0LDYgKzE2MzAsNyBAQAogCQkJCTE0MjlEQUUwMEVEMjY0NUIwMEI4OTYxOSAv
KiBXUkVDR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NkE3NDY0MTBFRERGNzA2MDA5
MDQ3NzkgLyogRXNjYXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDMzZFRUEwRUUxMjg5RDAw
QjNERjU5IC8qIE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkNDODREQjBF
RTcyOEI5MDAyODg2ODIgLyogSklUSW5saW5lTWV0aG9kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0x
OTYzLDYgKzE5NzAsNyBAQAogCQkJCTE0MjlEQTgyMEVEMjQ4MjkwMEI4OTYxOSAvKiBXUkVDRnVu
Y3RvcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOURBQzAwRUQyNjNFNzAwQjg5NjE5IC8q
IFdSRUNQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOURBRTEwRUQyNjQ1QjAwQjg5
NjE5IC8qIFdSRUNHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODZDQzg0REQwRUU3
MzFFRTAwMjg4NjgyIC8qIEpJVENhbGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBqaXQvSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBqaXQvSklULmNwcAkocmV2aXNpb24gMzg5NzcpCisrKyBqaXQv
SklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShKSVQp
CiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJKSVRJbmxpbmVNZXRob2RzLmgi
CiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRl
ICJJbnRlcnByZXRlci5oIgpAQCAtMzksMjMgKzQwLDEwIEBACiAjaW5jbHVkZSA8c3RkaW8uaD4K
ICNlbmRpZgogCi0jZGVmaW5lIF9fIG1fYXNzZW1ibGVyLiAKLQotI2lmIFBMQVRGT1JNKFdJTikK
LSN1bmRlZiBGSUVMRF9PRkZTRVQgLy8gRml4IGNvbmZsaWN0IHdpdGggd2lubnQuaC4KLSNlbmRp
ZgotCi0vLyBGSUVMRF9PRkZTRVQ6IExpa2UgdGhlIEMrKyBvZmZzZXRvZiBtYWNybywgYnV0IHlv
dSBjYW4gdXNlIGl0IHdpdGggY2xhc3Nlcy4KLS8vIFRoZSBtYWdpYyBudW1iZXIgMHg0MDAwIGlz
IGluc2lnbmlmaWNhbnQuIFdlIHVzZSBpdCB0byBhdm9pZCB1c2luZyBOVUxMLCBzaW5jZQotLy8g
TlVMTCBjYW4gY2F1c2UgY29tcGlsZXIgcHJvYmxlbXMsIGVzcGVjaWFsbHkgaW4gY2FzZXMgb2Yg
bXVsdGlwbGUgaW5oZXJpdGFuY2UuCi0jZGVmaW5lIEZJRUxEX09GRlNFVChjbGFzcywgZmllbGQp
IChyZWludGVycHJldF9jYXN0PHB0cmRpZmZfdD4oJihyZWludGVycHJldF9jYXN0PGNsYXNzKj4o
MHg0MDAwKS0+ZmllbGQpKSAtIDB4NDAwMCkKLQogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLXR5cGVkZWYgWDg2QXNzZW1ibGVyOjpKbXBTcmMgSm1wU3JjOwotCiAj
aWYgUExBVEZPUk0oTUFDKQogCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNTU0UyUHJlc2VudCgpCkBA
IC0xODAsMTM5ICsxNjgsNiBAQCBleHRlcm4gIkMiIHsKIAogI2VuZGlmCiAKLXN0YXRpYyBBTFdB
WVNfSU5MSU5FIHVpbnRwdHJfdCBhc0ludGVnZXIoSlNWYWx1ZSogdmFsdWUpCi17Ci0gICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih2YWx1ZSk7Ci19Ci0KLUFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKQotewotICAgIG1fbGFzdFJlc3Vs
dEJ5dGVjb2RlUmVnaXN0ZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwotfQot
Ci0vLyBnZXQgYXJnIHB1dHMgYW4gYXJnIGZyb20gdGhlIFNGIHJlZ2lzdGVyIGFycmF5IGludG8g
YSBoL3cgcmVnaXN0ZXIKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QsIHVuc2lnbmVkIGN1cnJlbnRJbnN0cnVjdGlv
bkluZGV4KQotewotICAgIC8vIFRPRE86IHdlIHdhbnQgdG8gcmV1c2UgdmFsdWVzIHRoYXQgYXJl
IGFscmVhZHkgaW4gcmVnaXN0ZXJzIGlmIHdlIGNhbiAtIGFkZCBhIHJlZ2lzdGVyIGFsbG9jYXRv
ciEKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsK
LSAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsK
LSAgICAgICAgX18gbW92bF9pMzJyKGFzSW50ZWdlcih2YWx1ZSksIGRzdCk7Ci0gICAgICAgIGtp
bGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChzcmMgPT0gbV9sYXN0UmVzdWx0Qnl0ZWNvZGVSZWdpc3RlciAmJiBtX2NvZGVCbG9jay0+aXNU
ZW1wb3JhcnlSZWdpc3RlckluZGV4KHNyYykpIHsKLSAgICAgICAgYm9vbCBhdEp1bXBUYXJnZXQg
PSBmYWxzZTsKLSAgICAgICAgd2hpbGUgKG1fanVtcFRhcmdldHNQb3NpdGlvbiA8IG1fY29kZUJs
b2NrLT5qdW1wVGFyZ2V0cy5zaXplKCkgJiYgbV9jb2RlQmxvY2stPmp1bXBUYXJnZXRzW21fanVt
cFRhcmdldHNQb3NpdGlvbl0gPD0gY3VycmVudEluc3RydWN0aW9uSW5kZXgpIHsKLSAgICAgICAg
ICAgIGlmIChtX2NvZGVCbG9jay0+anVtcFRhcmdldHNbbV9qdW1wVGFyZ2V0c1Bvc2l0aW9uXSA9
PSBjdXJyZW50SW5zdHJ1Y3Rpb25JbmRleCkKLSAgICAgICAgICAgICAgICBhdEp1bXBUYXJnZXQg
PSB0cnVlOwotICAgICAgICAgICAgKyttX2p1bXBUYXJnZXRzUG9zaXRpb247Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoIWF0SnVtcFRhcmdldCkgewotICAgICAgICAgICAgLy8gVGhlIGFyZ3Vt
ZW50IHdlIHdhbnQgaXMgYWxyZWFkeSBzdG9yZWQgaW4gZWF4Ci0gICAgICAgICAgICBpZiAoZHN0
ICE9IFg4Njo6ZWF4KQotICAgICAgICAgICAgICAgIF9fIG1vdmxfcnIoWDg2OjplYXgsIGRzdCk7
Ci0gICAgICAgICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBfXyBtb3ZsX21yKHNyYyAqIHNpemVvZihSZWdp
c3RlciksIFg4Njo6ZWRpLCBkc3QpOwotICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKLX0K
LQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW50IHNy
YzEsIFJlZ2lzdGVySUQgZHN0MSwgaW50IHNyYzIsIFJlZ2lzdGVySUQgZHN0MiwgdW5zaWduZWQg
aSkKLXsKLSAgICBpZiAoc3JjMiA9PSBtX2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lzdGVyKSB7Ci0g
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgZHN0MiwgaSk7Ci0gICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgZHN0MSwgaSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBkc3QxLCBpKTsKLSAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyLCBpKTsKLSAgICB9Ci19Ci0KLS8vIGdldCBhcmcg
cHV0cyBhbiBhcmcgZnJvbSB0aGUgU0YgcmVnaXN0ZXIgYXJyYXkgb250byB0aGUgc3RhY2ssIGFz
IGFuIGFyZyB0byBhIGNvbnRleHQgdGhyZWFkZWQgZnVuY3Rpb24uCi1BTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rlcih1bnNpZ25lZCBzcmMsIHVu
c2lnbmVkIG9mZnNldCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQotewotICAgIGlmIChtX2NvZGVCbG9j
ay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkgewotICAgICAgICBKU1ZhbHVlKiB2YWx1
ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBfXyBtb3ZsX2kzMm0o
YXNJbnRlZ2VyKHZhbHVlKSwgb2Zmc2V0ICsgc2l6ZW9mKHZvaWQqKSwgWDg2Ojplc3ApOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIF9fIG1vdmxfbXIoc3JjICogc2l6ZW9mKFJlZ2lzdGVyKSwgWDg2
OjplZGksIHNjcmF0Y2gpOwotICAgICAgICBfXyBtb3ZsX3JtKHNjcmF0Y2gsIG9mZnNldCArIHNp
emVvZih2b2lkKiksIFg4Njo6ZXNwKTsKLSAgICB9Ci0KLSAgICBraWxsTGFzdFJlc3VsdFJlZ2lz
dGVyKCk7Ci19Ci0KLS8vIHB1dHMgYW4gYXJnIG9udG8gdGhlIHN0YWNrLCBhcyBhbiBhcmcgdG8g
YSBjb250ZXh0IHRocmVhZGVkIGZ1bmN0aW9uLgotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dFB1dENUSUFyZyhSZWdpc3RlcklEIHNyYywgdW5zaWduZWQgb2Zmc2V0KQotewotICAgIF9fIG1v
dmxfcm0oc3JjLCBvZmZzZXQgKyBzaXplb2Yodm9pZCopLCBYODY6OmVzcCk7Ci19Ci0KLUFMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRDVElBcmcodW5zaWduZWQgb2Zmc2V0LCBSZWdpc3Rl
cklEIGRzdCkKLXsKLSAgICBfXyBtb3ZsX21yKG9mZnNldCArIHNpemVvZih2b2lkKiksIFg4Njo6
ZXNwLCBkc3QpOwotfQotCi0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRDVElBcmdD
b25zdGFudCh1bnNpZ25lZCB2YWx1ZSwgdW5zaWduZWQgb2Zmc2V0KQotewotICAgIF9fIG1vdmxf
aTMybSh2YWx1ZSwgb2Zmc2V0ICsgc2l6ZW9mKHZvaWQqKSwgWDg2Ojplc3ApOwotfQotCi1BTFdB
WVNfSU5MSU5FIEpTVmFsdWUqIEpJVDo6Z2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHVu
c2lnbmVkIHNyYykKLXsKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3Rlcklu
ZGV4KHNyYykpIHsKLSAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29u
c3RhbnQoc3JjKTsKLSAgICAgICAgcmV0dXJuIEpTSW1tZWRpYXRlOjppc051bWJlcih2YWx1ZSkg
PyB2YWx1ZSA6IG5vVmFsdWUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5vVmFsdWUoKTsKLX0KLQot
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dENUSVBhcmFtKHZvaWQqIHZhbHVlLCB1bnNp
Z25lZCBuYW1lKQotewotICAgIF9fIG1vdmxfaTMybShyZWludGVycHJldF9jYXN0PGludHB0cl90
Pih2YWx1ZSksIG5hbWUgKiBzaXplb2Yodm9pZCopLCBYODY6OmVzcCk7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRDVElQYXJhbShSZWdpc3RlcklEIGZyb20sIHVuc2lnbmVk
IG5hbWUpCi17Ci0gICAgX18gbW92bF9ybShmcm9tLCBuYW1lICogc2l6ZW9mKHZvaWQqKSwgWDg2
Ojplc3ApOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0Q1RJUGFyYW0odW5z
aWduZWQgbmFtZSwgUmVnaXN0ZXJJRCB0bykKLXsKLSAgICBfXyBtb3ZsX21yKG5hbWUgKiBzaXpl
b2Yodm9pZCopLCBYODY6OmVzcCwgdG8pOwotICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsK
LX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJl
Z2lzdGVySUQgZnJvbSwgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSkK
LXsKLSAgICBfXyBtb3ZsX3JtKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSwgWDg2Ojpl
ZGkpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlcihSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5LCBSZWdpc3RlcklE
IHRvKQotewotICAgIF9fIG1vdmxfbXIoZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpLCBYODY6OmVk
aSwgdG8pOwotICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKLX0KLQotQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcih1bnNpZ25lZCBkc3QsIFJlZ2lzdGVy
SUQgZnJvbSkKLXsKLSAgICBfXyBtb3ZsX3JtKGZyb20sIGRzdCAqIHNpemVvZihSZWdpc3Rlciks
IFg4Njo6ZWRpKTsKLSAgICBtX2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lzdGVyID0gKGZyb20gPT0g
WDg2OjplYXgpID8gZHN0IDogc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLSAgICAv
LyBGSVhNRTogI2lmbmRlZiBOREVCVUcsIFdyaXRlIHRoZSBjb3JyZWN0IG1fdHlwZSB0byB0aGUg
cmVnaXN0ZXIuCi19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIo
dW5zaWduZWQgZHN0KQotewotICAgIF9fIG1vdmxfaTMybShhc0ludGVnZXIoanNVbmRlZmluZWQo
KSksIGRzdCAqIHNpemVvZihSZWdpc3RlciksIFg4Njo6ZWRpKTsKLSAgICAvLyBGSVhNRTogI2lm
bmRlZiBOREVCVUcsIFdyaXRlIHRoZSBjb3JyZWN0IG1fdHlwZSB0byB0aGUgcmVnaXN0ZXIuCi19
Ci0KIHZvaWQgY3RpU2V0UmV0dXJuQWRkcmVzcyh2b2lkKiogd2hlcmUsIHZvaWQqIHdoYXQpCiB7
CiAgICAgKndoZXJlID0gd2hhdDsKQEAgLTM2MSwyMzMgKzIxNiw2IEBAIHZvaWQgSklUOjpwcmlu
dEJ5dGVjb2RlT3BlcmFuZFR5cGVzKHVuc2kKIAogI2VuZGlmCiAKLUFMV0FZU19JTkxJTkUgSm1w
U3JjIEpJVDo6ZW1pdE5ha2VkQ2FsbCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBYODY6OlJlZ2lz
dGVySUQgcikKLXsKLSAgICBKbXBTcmMgY2FsbCA9IF9fIGNhbGwocik7Ci0gICAgbV9jYWxscy5h
cHBlbmQoQ2FsbFJlY29yZChjYWxsLCBieXRlY29kZUluZGV4KSk7Ci0KLSAgICByZXR1cm4gY2Fs
bDsKLX0KLQotQUxXQVlTX0lOTElORSAgSm1wU3JjIEpJVDo6ZW1pdE5ha2VkQ2FsbCh1bnNpZ25l
ZCBieXRlY29kZUluZGV4LCB2b2lkKiBmdW5jdGlvbikKLXsKLSAgICBKbXBTcmMgY2FsbCA9IF9f
IGNhbGwoKTsKLSAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIHJlaW50ZXJwcmV0
X2Nhc3Q8Q1RJSGVscGVyX3Y+KGZ1bmN0aW9uKSwgYnl0ZWNvZGVJbmRleCkpOwotICAgIHJldHVy
biBjYWxsOwotfQotCi1BTFdBWVNfSU5MSU5FIEptcFNyYyBKSVQ6OmVtaXRDVElDYWxsKHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgsIENUSUhlbHBlcl9qIGhlbHBlcikKLXsKLSNpZiBFTkFCTEUoT1BD
T0RFX1NBTVBMSU5HKQotICAgIF9fIG1vdmxfaTMybShtX2ludGVycHJldGVyLT5zYW1wbGVyKCkt
PmVuY29kZVNhbXBsZShtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29k
ZUluZGV4LCB0cnVlKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpOwot
I2VuZGlmCi0gICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgZW1pdFB1dENU
SVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOwotICAgIEptcFNyYyBjYWxsID0g
X18gY2FsbCgpOwotICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwgaGVscGVyLCBi
eXRlY29kZUluZGV4KSk7Ci0jaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKLSAgICBfXyBtb3Zs
X2kzMm0obV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucy5iZWdpbigpICsgYnl0ZWNvZGVJbmRleCwgZmFsc2UpLCBtX2ludGVycHJl
dGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7Ci0jZW5kaWYKLSAgICBraWxsTGFzdFJlc3Vs
dFJlZ2lzdGVyKCk7Ci0KLSAgICByZXR1cm4gY2FsbDsKLX0KLQotQUxXQVlTX0lOTElORSBKbXBT
cmMgSklUOjplbWl0Q1RJQ2FsbCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDVElIZWxwZXJfbyBo
ZWxwZXIpCi17Ci0jaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKLSAgICBfXyBtb3ZsX2kzMm0o
bV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucy5iZWdpbigpICsgYnl0ZWNvZGVJbmRleCwgdHJ1ZSksIG1faW50ZXJwcmV0ZXItPnNh
bXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKLSNlbmRpZgotICAgIF9fIHJlc3RvcmVBcmd1bWVudFJl
ZmVyZW5jZSgpOwotICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJX0FSR1NfY2FsbEZy
YW1lKTsKLSAgICBKbXBTcmMgY2FsbCA9IF9fIGNhbGwoKTsKLSAgICBtX2NhbGxzLmFwcGVuZChD
YWxsUmVjb3JkKGNhbGwsIGhlbHBlciwgYnl0ZWNvZGVJbmRleCkpOwotI2lmIEVOQUJMRShPUENP
REVfU0FNUExJTkcpCi0gICAgX18gbW92bF9pMzJtKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+
ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIGJ5dGVjb2Rl
SW5kZXgsIGZhbHNlKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpOwot
I2VuZGlmCi0gICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwotCi0gICAgcmV0dXJuIGNhbGw7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgSm1wU3JjIEpJVDo6ZW1pdENUSUNhbGwodW5zaWduZWQgYnl0
ZWNvZGVJbmRleCwgQ1RJSGVscGVyX3AgaGVscGVyKQotewotI2lmIEVOQUJMRShPUENPREVfU0FN
UExJTkcpCi0gICAgX18gbW92bF9pMzJtKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2Rl
U2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXgs
IHRydWUpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7Ci0jZW5kaWYK
LSAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBlbWl0UHV0Q1RJUGFyYW0o
WDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7Ci0gICAgSm1wU3JjIGNhbGwgPSBfXyBjYWxs
KCk7Ci0gICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBoZWxwZXIsIGJ5dGVjb2Rl
SW5kZXgpKTsKLSNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotICAgIF9fIG1vdmxfaTMybSht
X2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29kZUluZGV4LCBmYWxzZSksIG1faW50ZXJwcmV0ZXItPnNh
bXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKLSNlbmRpZgotICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0
ZXIoKTsKLQotICAgIHJldHVybiBjYWxsOwotfQotCi1BTFdBWVNfSU5MSU5FIEptcFNyYyBKSVQ6
OmVtaXRDVElDYWxsKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENUSUhlbHBlcl9iIGhlbHBlcikK
LXsKLSNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotICAgIF9fIG1vdmxfaTMybShtX2ludGVy
cHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
LmJlZ2luKCkgKyBieXRlY29kZUluZGV4LCB0cnVlKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigp
LT5zYW1wbGVTbG90KCkpOwotI2VuZGlmCi0gICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNl
KCk7Ci0gICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOwot
ICAgIEptcFNyYyBjYWxsID0gX18gY2FsbCgpOwotICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNv
cmQoY2FsbCwgaGVscGVyLCBieXRlY29kZUluZGV4KSk7Ci0jaWYgRU5BQkxFKE9QQ09ERV9TQU1Q
TElORykKLSAgICBfXyBtb3ZsX2kzMm0obV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNvZGVT
YW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgYnl0ZWNvZGVJbmRleCwg
ZmFsc2UpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7Ci0jZW5kaWYK
LSAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Ci0KLSAgICByZXR1cm4gY2FsbDsKLX0KLQot
QUxXQVlTX0lOTElORSBKbXBTcmMgSklUOjplbWl0Q1RJQ2FsbCh1bnNpZ25lZCBieXRlY29kZUlu
ZGV4LCBDVElIZWxwZXJfdiBoZWxwZXIpCi17Ci0jaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykK
LSAgICBfXyBtb3ZsX2kzMm0obV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUo
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgYnl0ZWNvZGVJbmRleCwgdHJ1ZSks
IG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKLSNlbmRpZgotICAgIF9f
IHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVk
aSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKLSAgICBKbXBTcmMgY2FsbCA9IF9fIGNhbGwoKTsKLSAg
ICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIGhlbHBlciwgYnl0ZWNvZGVJbmRleCkp
OwotI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgX18gbW92bF9pMzJtKG1faW50ZXJw
cmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMu
YmVnaW4oKSArIGJ5dGVjb2RlSW5kZXgsIGZhbHNlKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigp
LT5zYW1wbGVTbG90KCkpOwotI2VuZGlmCi0gICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwot
Ci0gICAgcmV0dXJuIGNhbGw7Ci19Ci0KLUFMV0FZU19JTkxJTkUgSm1wU3JjIEpJVDo6ZW1pdENU
SUNhbGwodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ1RJSGVscGVyX3MgaGVscGVyKQotewotI2lm
IEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgX18gbW92bF9pMzJtKG1faW50ZXJwcmV0ZXIt
PnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4o
KSArIGJ5dGVjb2RlSW5kZXgsIHRydWUpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBs
ZVNsb3QoKSk7Ci0jZW5kaWYKLSAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAg
ICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7Ci0gICAgSm1w
U3JjIGNhbGwgPSBfXyBjYWxsKCk7Ci0gICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxs
LCBoZWxwZXIsIGJ5dGVjb2RlSW5kZXgpKTsKLSNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQot
ICAgIF9fIG1vdmxfaTMybShtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZSht
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29kZUluZGV4LCBmYWxzZSks
IG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKLSNlbmRpZgotICAgIGtp
bGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKLQotICAgIHJldHVybiBjYWxsOwotfQotCi1BTFdBWVNf
SU5MSU5FIEptcFNyYyBKSVQ6OmVtaXRDVElDYWxsKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENU
SUhlbHBlcl8yIGhlbHBlcikKLXsKLSNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotICAgIF9f
IG1vdmxfaTMybShtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29kZUluZGV4LCB0cnVlKSwgbV9pbnRl
cnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpOwotI2VuZGlmCi0gICAgX18gcmVzdG9y
ZUFyZ3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElf
QVJHU19jYWxsRnJhbWUpOwotICAgIEptcFNyYyBjYWxsID0gX18gY2FsbCgpOwotICAgIG1fY2Fs
bHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwgaGVscGVyLCBieXRlY29kZUluZGV4KSk7Ci0jaWYg
RU5BQkxFKE9QQ09ERV9TQU1QTElORykKLSAgICBfXyBtb3ZsX2kzMm0obV9pbnRlcnByZXRlci0+
c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigp
ICsgYnl0ZWNvZGVJbmRleCwgZmFsc2UpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBs
ZVNsb3QoKSk7Ci0jZW5kaWYKLSAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Ci0KLSAgICBy
ZXR1cm4gY2FsbDsKLX0KLQotSm1wU3JjIEpJVDo6Y2hlY2tTdHJ1Y3R1cmUoUmVnaXN0ZXJJRCBy
ZWcsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotewotICAgIF9fIGNtcGxfaTMybShyZWludGVycHJl
dF9jYXN0PHVpbnQzMl90PihzdHJ1Y3R1cmUpLCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVj
dHVyZSksIHJlZyk7Ci0gICAgcmV0dXJuIF9fIGpuZSgpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFn
TWFzaywgcmVnKTsKLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUo
KSwgYnl0ZWNvZGVJbmRleCkpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgsIGludCB2UmVnKQotewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0
ZSh2UmVnKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZywgYnl0ZWNvZGVJbmRleCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omxp
bmtTbG93Q2FzZUlmTm90SlNDZWxsKGNvbnN0IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIsIGludCB2UmVnKQotewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNLbm93bk5vdElt
bWVkaWF0ZSh2UmVnKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIF9fIGxpbmso
aXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShSZWdpc3RlcklEIHJl
ZywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRp
YXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgcmVnKTsKLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xv
d0Nhc2VFbnRyeShfXyBqZSgpLCBieXRlY29kZUluZGV4KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bXMoUmVnaXN0ZXJJRCByZWcxLCBS
ZWdpc3RlcklEIHJlZzIsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgX18gbW92bF9y
cihyZWcxLCBYODY6OmVjeCk7Ci0gICAgX18gYW5kbF9ycihyZWcyLCBYODY6OmVjeCk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWN4LCBieXRlY29kZUluZGV4KTsKLX0K
LQotQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKSVQ6OmdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlh
dGUoSlNWYWx1ZSogaW1tKQotewotICAgIEFTU0VSVChKU0ltbWVkaWF0ZTo6aXNOdW1iZXIoaW1t
KSk7Ci0gICAgcmV0dXJuIGFzSW50ZWdlcihpbW0pICYgfkpTSW1tZWRpYXRlOjpUYWdCaXRUeXBl
SW50ZWdlcjsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEZhc3RBcml0aERlVGFn
SW1tZWRpYXRlKFJlZ2lzdGVySUQgcmVnKQotewotICAgIF9fIHN1YmxfaThyKEpTSW1tZWRpYXRl
OjpUYWdCaXRUeXBlSW50ZWdlciwgcmVnKTsKLX0KLQotQUxXQVlTX0lOTElORSBKbXBTcmMgSklU
OjplbWl0RmFzdEFyaXRoRGVUYWdJbW1lZGlhdGVKdW1wSWZaZXJvKFJlZ2lzdGVySUQgcmVnKQot
ewotICAgIF9fIHN1YmxfaThyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgcmVnKTsK
LSAgICByZXR1cm4gX18gamUoKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEZh
c3RBcml0aFJlVGFnSW1tZWRpYXRlKFJlZ2lzdGVySUQgcmVnKQotewotICAgIF9fIGFkZGxfaThy
KEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgcmVnKTsKLX0KLQotQUxXQVlTX0lOTElO
RSB2b2lkIEpJVDo6ZW1pdEZhc3RBcml0aFBvdGVudGlhbGx5UmVUYWdJbW1lZGlhdGUoUmVnaXN0
ZXJJRCByZWcpCi17Ci0gICAgX18gb3JsX2k4cihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVn
ZXIsIHJlZyk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRGYXN0QXJpdGhJbW1U
b0ludChSZWdpc3RlcklEIHJlZykKLXsKLSAgICBfXyBzYXJsX2k4cigxLCByZWcpOwotfQotCi1B
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0RmFzdEFyaXRoSW50VG9JbW1PclNsb3dDYXNlKFJl
Z2lzdGVySUQgcmVnLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQotewotICAgIF9fIGFkZGxfcnIo
cmVnLCByZWcpOwotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCks
IGJ5dGVjb2RlSW5kZXgpKTsKLSAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUocmVnKTsK
LX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVj
ayhSZWdpc3RlcklEIHJlZykKLXsKLSAgICBfXyBhZGRsX3JyKHJlZywgcmVnKTsKLSAgICBlbWl0
RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUocmVnKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdFRhZ0FzQm9vbEltbWVkaWF0ZShSZWdpc3RlcklEIHJlZykKLXsKLSAgICBfXyBzaGxf
aThyKEpTSW1tZWRpYXRlOjpFeHRlbmRlZFBheWxvYWRTaGlmdCwgcmVnKTsKLSAgICBfXyBvcmxf
aThyKEpTSW1tZWRpYXRlOjpGdWxsVGFnVHlwZUJvb2wsIHJlZyk7Ci19Ci0KIEpJVDo6SklUKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgOiBtX2lu
dGVycHJldGVyKGdsb2JhbERhdGEtPmludGVycHJldGVyKQogICAgICwgbV9nbG9iYWxEYXRhKGds
b2JhbERhdGEpCkBAIC02MTksMTI4ICsyNDcsNiBAQCBKSVQ6OkpJVChKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIENvZGVCCiAgICAgICAgIGJyZWFrOyBcCiAgICAgfQogCi1zdGF0aWMgdm9pZCB1
bnJlYWNoYWJsZSgpCi17Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgZXhpdCgxKTsK
LX0KLQotdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYW1lKCkKLXsKLSAg
ICBfXyBtb3ZsX3JtKFg4Njo6ZWR4LCBSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6OmVkaSk7Ci0KLSAgICBfXyBtb3Zs
X21yKEZJRUxEX09GRlNFVChKU0Z1bmN0aW9uLCBtX3Njb3BlQ2hhaW4pICsgRklFTERfT0ZGU0VU
KFNjb3BlQ2hhaW4sIG1fbm9kZSksIFg4Njo6ZWN4LCBYODY6OmVkeCk7IC8vIG5ld1Njb3BlQ2hh
aW4KLQotICAgIF9fIG1vdmxfaTMybShhc0ludGVnZXIobm9WYWx1ZSgpKSwgUmVnaXN0ZXJGaWxl
OjpPcHRpb25hbENhbGxlZUFyZ3VtZW50cyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSksIFg4Njo6ZWRpKTsKLSAgICBfXyBtb3ZsX3JtKFg4Njo6ZWN4LCBSZWdpc3RlckZpbGU6
OkNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSksIFg4Njo6ZWRpKTsK
LSAgICBfXyBtb3ZsX3JtKFg4Njo6ZWR4LCBSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4gKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6OmVkaSk7Ci19Ci0KLXZvaWQgSklU
Ojpjb21waWxlT3BDYWxsU2V0dXBBcmdzKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKLXsKLSAg
ICBpbnQgYXJnQ291bnQgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHJlZ2lz
dGVyT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwotCi0gICAgLy8gZWN4IGhvbGRz
IGZ1bmMKLSAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWN4LCAwKTsKLSAgICBlbWl0UHV0Q1RJQXJn
Q29uc3RhbnQocmVnaXN0ZXJPZmZzZXQsIDQpOwotICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChh
cmdDb3VudCwgOCk7Ci0gICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQ+KGluc3RydWN0aW9uKSwgMTIpOwotfQotCi12b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bEV2YWxTZXR1cEFyZ3MoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQotewotICAgIGludCBhcmdD
b3VudCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpbnQgcmVnaXN0ZXJPZmZzZXQg
PSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7Ci0KLSAgICAvLyBlY3ggaG9sZHMgZnVuYwotICAg
IGVtaXRQdXRDVElBcmcoWDg2OjplY3gsIDApOwotICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChy
ZWdpc3Rlck9mZnNldCwgNCk7Ci0gICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGFyZ0NvdW50LCA4
KTsKLSAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4o
aW5zdHJ1Y3Rpb24pLCAxMik7Ci19Ci0KLXZvaWQgSklUOjpjb21waWxlT3BDb25zdHJ1Y3RTZXR1
cEFyZ3MoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQotewotICAgIGludCBhcmdDb3VudCA9IGlu
c3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBpbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3RvID0gaW5zdHJ1Y3Rpb25bNV0udS5vcGVy
YW5kOwotICAgIGludCB0aGlzUmVnaXN0ZXIgPSBpbnN0cnVjdGlvbls2XS51Lm9wZXJhbmQ7Ci0K
LSAgICAvLyBlY3ggaG9sZHMgZnVuYwotICAgIGVtaXRQdXRDVElBcmcoWDg2OjplY3gsIDApOwot
ICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWdpc3Rlck9mZnNldCwgNCk7Ci0gICAgZW1pdFB1
dENUSUFyZ0NvbnN0YW50KGFyZ0NvdW50LCA4KTsKLSAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1
YWxSZWdpc3Rlcihwcm90bywgMTIsIFg4Njo6ZWF4KTsKLSAgICBlbWl0UHV0Q1RJQXJnQ29uc3Rh
bnQodGhpc1JlZ2lzdGVyLCAxNik7Ci0gICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQ+KGluc3RydWN0aW9uKSwgMjApOwotfQotCi12b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1
bnNpZ25lZCBpLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKLXsKLSAgICBpbnQgZHN0ID0g
aW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBjYWxsZWUgPSBpbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7Ci0gICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OwotICAgIGludCByZWdpc3Rlck9mZnNldCA9IGluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKLQot
ICAgIC8vIEhhbmRsZSBldmFsCi0gICAgSm1wU3JjIHdhc0V2YWw7Ci0gICAgaWYgKG9wY29kZUlE
ID09IG9wX2NhbGxfZXZhbCkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxl
ZSwgWDg2OjplY3gsIGkpOwotICAgICAgICBjb21waWxlT3BDYWxsRXZhbFNldHVwQXJncyhpbnN0
cnVjdGlvbik7Ci0KLSAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9j
YWxsX2V2YWwpOwotICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjpp
bXBvc3NpYmxlVmFsdWUoKSksIFg4Njo6ZWF4KTsKLSAgICAgICAgd2FzRXZhbCA9IF9fIGpuZSgp
OwotICAgIH0KLQotICAgIC8vIFRoaXMgcGxhbnRzIGEgY2hlY2sgZm9yIGEgY2FjaGVkIEpTRnVu
Y3Rpb24gdmFsdWUsIHNvIHdlIGNhbiBwbGFudCBhIGZhc3QgbGluayB0byB0aGUgY2FsbGVlLgot
ICAgIC8vIFRoaXMgZGVsaWJlcmF0ZWx5IGxlYXZlcyB0aGUgY2FsbGVlIGluIGVjeCwgdXNlZCB3
aGVuIHNldHRpbmcgdXAgdGhlIHN0YWNrIGZyYW1lIGJlbG93Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihjYWxsZWUsIFg4Njo6ZWN4LCBpKTsKLSAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2Vy
KEpTSW1tZWRpYXRlOjppbXBvc3NpYmxlVmFsdWUoKSksIFg4Njo6ZWN4KTsKLSAgICBKbXBEc3Qg
YWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjayA9IF9fIGxhYmVsKCk7Ci0gICAgbV9zbG93Q2Fz
ZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKLSAgICBBU1NFUlQoWDg2QXNz
ZW1ibGVyOjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhhZGRyZXNzT2ZMaW5rZWRGdW5jdGlv
bkNoZWNrLCBfXyBsYWJlbCgpKSA9PSByZXBhdGNoT2Zmc2V0T3BDYWxsQ2FsbCk7Ci0gICAgbV9j
YWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0
aEJlZ2luID0gYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKLQotICAgIC8vIFRoZSBmb2xs
b3dpbmcgaXMgdGhlIGZhc3QgY2FzZSwgb25seSB1c2VkIHdoYW4gYSBjYWxsZWUgY2FuIGJlIGxp
bmtlZC4KLQotICAgIC8vIEluIHRoZSBjYXNlIG9mIE9wQ29uc3RydWN0LCBjYWxsIG91dCB0byBh
IGN0aV8gZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBuZXcgb2JqZWN0LgotICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF9jb25zdHJ1Y3QpIHsKLSAgICAgICAgaW50IHByb3RvID0gaW5zdHJ1Y3Rpb25bNV0u
dS5vcGVyYW5kOwotICAgICAgICBpbnQgdGhpc1JlZ2lzdGVyID0gaW5zdHJ1Y3Rpb25bNl0udS5v
cGVyYW5kOwotCi0gICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplY3gsIDApOwotICAgICAgICBl
bWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rlcihwcm90bywgMTIsIFg4Njo6ZWF4KTsKLSAg
ICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9jb25zdHJ1Y3RfSlNDb25z
dHJ1Y3QpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHRoaXNSZWdpc3Rlcik7Ci0g
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBYODY6OmVjeCwgaSk7Ci0gICAg
fQotCi0gICAgLy8gRmFzdCB2ZXJzaW9uIG9mIHN0YWNrIGZyYW1lIGluaXRpYWxpemF0aW9uLCBk
aXJlY3RseSByZWxhdGl2ZSB0byBlZGkuCi0gICAgLy8gTm90ZSB0aGF0IHRoaXMgb21pdHMgdG8g
c2V0IHVwIFJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrLCB3aGljaCBpcyBzZXQgaW4gdGhlIGNhbGxl
ZQotICAgIF9fIG1vdmxfaTMybShhc0ludGVnZXIobm9WYWx1ZSgpKSwgKHJlZ2lzdGVyT2Zmc2V0
ICsgUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50cykgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6OmVkaSk7Ci0gICAgX18gbW92bF9ybShYODY6OmVj
eCwgKHJlZ2lzdGVyT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZWUpICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkpOwotICAgIF9fIG1vdmxfbXIoRklFTERf
T0ZGU0VUKEpTRnVuY3Rpb24sIG1fc2NvcGVDaGFpbikgKyBGSUVMRF9PRkZTRVQoU2NvcGVDaGFp
biwgbV9ub2RlKSwgWDg2OjplY3gsIFg4Njo6ZWR4KTsgLy8gbmV3U2NvcGVDaGFpbgotICAgIF9f
IG1vdmxfaTMybShhcmdDb3VudCwgKHJlZ2lzdGVyT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpBcmd1
bWVudENvdW50KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSksIFg4Njo6ZWRp
KTsKLSAgICBfXyBtb3ZsX3JtKFg4Njo6ZWRpLCAocmVnaXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZp
bGU6OkNhbGxlckZyYW1lKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSksIFg4
Njo6ZWRpKTsKLSAgICBfXyBtb3ZsX3JtKFg4Njo6ZWR4LCAocmVnaXN0ZXJPZmZzZXQgKyBSZWdp
c3RlckZpbGU6OlNjb3BlQ2hhaW4pICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIp
KSwgWDg2OjplZGkpOwotICAgIF9fIGFkZGxfaTMycihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihS
ZWdpc3RlciksIFg4Njo6ZWRpKTsKLQotICAgIC8vIENhbGwgdG8gdGhlIGNhbGxlZQotICAgIG1f
Y2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBh
dGhPdGhlciA9IGVtaXROYWtlZENhbGwoaSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odW5yZWFj
aGFibGUpKTsKLSAgICAKLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKQotICAgICAg
ICBfXyBsaW5rKHdhc0V2YWwsIF9fIGxhYmVsKCkpOwotCi0gICAgLy8gUHV0IHRoZSByZXR1cm4g
dmFsdWUgaW4gZHN0LiBJbiB0aGUgaW50ZXJwcmV0ZXIsIG9wX3JldCBkb2VzIHRoaXMuCi0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCi0jaWYgRU5BQkxFKENPREVCTE9DS19TQU1Q
TElORykKLSAgICAgICAgX18gbW92bF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG1f
Y29kZUJsb2NrKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5jb2RlQmxvY2tTbG90KCkpOwot
I2VuZGlmCi19Ci0KIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIHVuc2lnbmVkIGksIENvbXBpbGVPcFN0cmljdEVxVHlwZSB0eXBlKQogewogICAg
IGJvb2wgbmVnYXRlZCA9ICh0eXBlID09IE9wTlN0cmljdEVxKTsKQEAgLTI4MTMsOTQgKzIzMTks
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBjYXNlIG9w
X2NhbGw6CiAgICAgICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgogICAgICAgICBjYXNlIG9wX2NvbnN0
cnVjdDogewotICAgICAgICAgICAgaW50IGRzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBpbnQgY2FsbGVlID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBpbnN0cnVjdGlvbltpICsgNF0u
dS5vcGVyYW5kOwotCi0gICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkp
OwotCi0gICAgICAgICAgICAvLyBUaGUgYXJndW1lbnRzIGhhdmUgYmVlbiBzZXQgdXAgb24gdGhl
IGhvdCBwYXRoIGZvciBvcF9jYWxsX2V2YWwKLSAgICAgICAgICAgIGlmIChvcGNvZGVJRCA9PSBv
cF9jYWxsKQotICAgICAgICAgICAgICAgIGNvbXBpbGVPcENhbGxTZXR1cEFyZ3MoaW5zdHJ1Y3Rp
b24gKyBpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCkK
LSAgICAgICAgICAgICAgICBjb21waWxlT3BDb25zdHJ1Y3RTZXR1cEFyZ3MoaW5zdHJ1Y3Rpb24g
KyBpKTsKLQotICAgICAgICAgICAgLy8gRmFzdCBjaGVjayBmb3IgSlMgZnVuY3Rpb24uCi0gICAg
ICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVjeCk7Ci0g
ICAgICAgICAgICBKbXBTcmMgY2FsbExpbmtGYWlsTm90T2JqZWN0ID0gX18gam5lKCk7Ci0gICAg
ICAgICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9pbnRlcnBy
ZXRlci0+bV9qc0Z1bmN0aW9uVnB0ciksIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIEptcFNyYyBj
YWxsTGlua0ZhaWxOb3RKU0Z1bmN0aW9uID0gX18gam5lKCk7Ci0KLSAgICAgICAgICAgIC8vIEZp
cnN0LCBpbiB0aGUgY2FzZSBvZiBhIGNvbnN0cnVjdCwgYWxsb2NhdGUgdGhlIG5ldyBvYmplY3Qu
Ci0gICAgICAgICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0KSB7Ci0gICAgICAgICAg
ICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9jb25zdHJ1Y3RfSlNDb25z
dHJ1Y3QpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJP
ZmZzZXQgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBhcmdDb3VudCk7Ci0g
ICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIFg4Njo6ZWN4LCBp
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgX18gbW92bF9pMzJyKGFyZ0NvdW50LCBY
ODY6OmVkeCk7Ci0KLSAgICAgICAgICAgIC8vIFNwZWN1bGF0aXZlbHkgcm9sbCB0aGUgY2FsbGZy
YW1lLCBhc3N1bWluZyBhcmdDb3VudCB3aWxsIG1hdGNoIHRoZSBhcml0eS4KLSAgICAgICAgICAg
IF9fIG1vdmxfcm0oWDg2OjplZGksIChSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lICsgcmVnaXN0
ZXJPZmZzZXQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkp
OwotICAgICAgICAgICAgX18gYWRkbF9pMzJyKHJlZ2lzdGVyT2Zmc2V0ICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkpOwotCi0gICAgICAgICAgICBtX2NhbGxT
dHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJu
TG9jYXRpb24gPQotICAgICAgICAgICAgICAgIGVtaXROYWtlZENhbGwoaSwgbV9pbnRlcnByZXRl
ci0+bV9jdGlWaXJ0dWFsQ2FsbFByZUxpbmspOwotCi0gICAgICAgICAgICBKbXBTcmMgc3RvcmVS
ZXN1bHRGb3JGaXJzdFJ1biA9IF9fIGptcCgpOwotCi0gICAgICAgICAgICAvLyBUaGlzIGlzIHRo
ZSBhZGRyZXNzIGZvciB0aGUgY29sZCBwYXRoICphZnRlciogdGhlIGZpcnN0IHJ1biAod2hpY2gg
dHJpZXMgdG8gbGluayB0aGUgY2FsbCkuCi0gICAgICAgICAgICBtX2NhbGxTdHJ1Y3R1cmVTdHVi
Q29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jb2xkUGF0aE90aGVyID0gX18gbGFi
ZWwoKTsKLQotICAgICAgICAgICAgLy8gVGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gc2V0IHVwIG9u
IHRoZSBob3QgcGF0aCBmb3Igb3BfY2FsbF9ldmFsCi0gICAgICAgICAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfY2FsbCkKLSAgICAgICAgICAgICAgICBjb21waWxlT3BDYWxsU2V0dXBBcmdzKGluc3Ry
dWN0aW9uICsgaSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1
Y3QpCi0gICAgICAgICAgICAgICAgY29tcGlsZU9wQ29uc3RydWN0U2V0dXBBcmdzKGluc3RydWN0
aW9uICsgaSk7Ci0KLSAgICAgICAgICAgIC8vIENoZWNrIGZvciBKU0Z1bmN0aW9ucy4KLSAgICAg
ICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWN4KTsKLSAg
ICAgICAgICAgIEptcFNyYyBpc05vdE9iamVjdCA9IF9fIGpuZSgpOwotICAgICAgICAgICAgX18g
Y21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG1faW50ZXJwcmV0ZXItPm1fanNG
dW5jdGlvblZwdHIpLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBKbXBTcmMgaXNKU0Z1bmN0aW9u
ID0gX18gamUoKTsKLQotICAgICAgICAgICAgLy8gVGhpcyBoYW5kbGVzIGhvc3QgZnVuY3Rpb25z
Ci0gICAgICAgICAgICBKbXBEc3Qgbm90SlNGdW5jdGlvbmxhYmVsID0gX18gbGFiZWwoKTsKLSAg
ICAgICAgICAgIF9fIGxpbmsoaXNOb3RPYmplY3QsIG5vdEpTRnVuY3Rpb25sYWJlbCk7Ci0gICAg
ICAgICAgICBfXyBsaW5rKGNhbGxMaW5rRmFpbE5vdE9iamVjdCwgbm90SlNGdW5jdGlvbmxhYmVs
KTsKLSAgICAgICAgICAgIF9fIGxpbmsoY2FsbExpbmtGYWlsTm90SlNGdW5jdGlvbiwgbm90SlNG
dW5jdGlvbmxhYmVsKTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksICgob3Bjb2RlSUQgPT0g
b3BfY29uc3RydWN0KSA/IEludGVycHJldGVyOjpjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3Ry
dWN0IDogSW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pKTsKLSAgICAgICAg
ICAgIEptcFNyYyB3YXNOb3RKU0Z1bmN0aW9uID0gX18gam1wKCk7Ci0KLSAgICAgICAgICAgIC8v
IE5leHQsIGhhbmRsZSBKU0Z1bmN0aW9ucy4uLgotICAgICAgICAgICAgX18gbGluayhpc0pTRnVu
Y3Rpb24sIF9fIGxhYmVsKCkpOwotCi0gICAgICAgICAgICAvLyBGaXJzdCwgaW4gdGhlIGNhc2Ug
b2YgYSBjb25zdHJ1Y3QsIGFsbG9jYXRlIHRoZSBuZXcgb2JqZWN0LgotICAgICAgICAgICAgaWYg
KG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCkgewotICAgICAgICAgICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3BfY29uc3RydWN0X0pTQ29uc3RydWN0KTsKLSAgICAgICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0IC0gUmVnaXN0ZXJG
aWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0gYXJnQ291bnQpOwotICAgICAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBYODY6OmVjeCwgaSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIC8vIFNwZWN1bGF0aXZlbHkgcm9sbCB0aGUgY2FsbGZyYW1lLCBhc3N1
bWluZyBhcmdDb3VudCB3aWxsIG1hdGNoIHRoZSBhcml0eS4KLSAgICAgICAgICAgIF9fIG1vdmxf
cm0oWDg2OjplZGksIChSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lICsgcmVnaXN0ZXJPZmZzZXQp
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkpOwotICAgICAg
ICAgICAgX18gYWRkbF9pMzJyKHJlZ2lzdGVyT2Zmc2V0ICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkpOwotICAgICAgICAgICAgX18gbW92bF9pMzJyKGFyZ0Nv
dW50LCBYODY6OmVkeCk7Ci0KLSAgICAgICAgICAgIGVtaXROYWtlZENhbGwoaSwgbV9pbnRlcnBy
ZXRlci0+bV9jdGlWaXJ0dWFsQ2FsbCk7Ci0KLSAgICAgICAgICAgIC8vIFB1dCB0aGUgcmV0dXJu
IHZhbHVlIGluIGRzdC4gSW4gdGhlIGludGVycHJldGVyLCBvcF9yZXQgZG9lcyB0aGlzLgotICAg
ICAgICAgICAgSm1wRHN0IHN0b3JlUmVzdWx0ID0gX18gbGFiZWwoKTsKLSAgICAgICAgICAgIF9f
IGxpbmsod2FzTm90SlNGdW5jdGlvbiwgc3RvcmVSZXN1bHQpOwotICAgICAgICAgICAgX18gbGlu
ayhzdG9yZVJlc3VsdEZvckZpcnN0UnVuLCBzdG9yZVJlc3VsdCk7Ci0gICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KLSNpZiBFTkFCTEUoQ09ERUJMT0NLX1NBTVBMSU5H
KQotICAgICAgICAgICAgX18gbW92bF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG1f
Y29kZUJsb2NrKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5jb2RlQmxvY2tTbG90KCkpOwot
I2VuZGlmCi0gICAgICAgICAgICArK2NhbGxMaW5rSW5mb0luZGV4OwotCisgICAgICAgICAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2UoaW5zdHJ1Y3Rpb24gKyBpLCBpLCBpdGVyLCBjYWxsTGlua0lu
Zm9JbmRleCsrLCBvcGNvZGVJRCk7CiAgICAgICAgICAgICBpICs9IChvcGNvZGVJRCA9PSBvcF9j
b25zdHJ1Y3QgPyA3IDogNSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzQ2
NCwzMSArMjg4Myw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8K
ICAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBjb2RlKTsK
IH0KIAotdm9pZCBKSVQ6OnVubGlua0NhbGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCi17
Ci0gICAgLy8gV2hlbiB0aGUgSlNGdW5jdGlvbiBpcyBkZWxldGVkIHRoZSBwb2ludGVyIGVtYmVk
ZGVkIGluIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0gd2lsbCBubyBsb25nZXIgYmUgdmFsaWQKLSAg
ICAvLyAoYW5kLCBpZiBhIG5ldyBKU0Z1bmN0aW9uIGhhcHBlbmVkIHRvIGJlIGNvbnN0cnVjdGVk
IGF0IHRoZSBzYW1lIGxvY2F0aW9uLCB3ZSBjb3VsZCBnZXQgYSBmYWxzZSBwb3NpdGl2ZQotICAg
IC8vIG1hdGNoKS4gIFJlc2V0IHRoZSBjaGVjayBzbyBpdCBubyBsb25nZXIgbWF0Y2hlcy4KLSAg
ICByZWludGVycHJldF9jYXN0PHZvaWQqKj4oY2FsbExpbmtJbmZvLT5ob3RQYXRoQmVnaW4pWy0x
XSA9IGFzUG9pbnRlcihKU0ltbWVkaWF0ZTo6aW1wb3NzaWJsZVZhbHVlKCkpOwotfQotCi12b2lk
IEpJVDo6bGlua0NhbGwoSlNGdW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVC
bG9jaywgdm9pZCogY3RpQ29kZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIGludCBjYWxs
ZXJBcmdDb3VudCkKLXsKLSAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBsaW5rIGNhbGxzIHdpdGgg
dGhlIGV4YWN0IG51bWJlciBvZiBhcmd1bWVudHMuCi0gICAgaWYgKGNhbGxlckFyZ0NvdW50ID09
IGNhbGxlZUNvZGVCbG9jay0+bnVtUGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoIWNhbGxM
aW5rSW5mby0+aXNMaW5rZWQoKSk7Ci0gICAgCi0gICAgICAgIGNhbGxlZUNvZGVCbG9jay0+YWRk
Q2FsbGVyKGNhbGxMaW5rSW5mbyk7Ci0gICAgCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCoqPihjYWxsTGlua0luZm8tPmhvdFBhdGhCZWdpbilbLTFdID0gY2FsbGVlOwotICAgICAgICBj
dGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsTGlua0luZm8tPmhvdFBhdGhPdGhlciwg
Y3RpQ29kZSk7Ci0gICAgfQotCi0gICAgLy8gcmVwYXRjaCB0aGUgaW5zdHJ1Y3Rpb24gdGhhdCBq
dW1wcyBvdXQgdG8gdGhlIGNvbGQgcGF0aCwgc28gdGhhdCB3ZSBvbmx5IHRyeSB0byBsaW5rIG9u
Y2UuCi0gICAgdm9pZCogcmVwYXRjaENoZWNrID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVp
bnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KGNhbGxMaW5rSW5mby0+aG90UGF0aEJlZ2luKSArIHJl
cGF0Y2hPZmZzZXRPcENhbGxDYWxsKTsKLSAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVz
cyhyZXBhdGNoQ2hlY2ssIGNhbGxMaW5rSW5mby0+Y29sZFBhdGhPdGhlcik7Ci19Ci0KIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcygpCiB7CiAgICAgLy8gKDEp
IFRoZSBmaXJzdCBmdW5jdGlvbiBwcm92aWRlcyBmYXN0IHByb3BlcnR5IGFjY2VzcyBmb3IgYXJy
YXkgbGVuZ3RoCkluZGV4OiBqaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaml0L0pJVC5oCShyZXZp
c2lvbiAzODk3NykKKysrIGppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzk2LDYgKzM5Niw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxJbml0aWFsaXpl
Q2FsbEZyYW1lKCk7CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNldHVwQXJncyhJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxFdmFsU2V0dXBBcmdzKEluc3RydWN0
aW9uKik7CisgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgdW5zaWduZWQgaSwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgsIE9wY29kZUlEIG9wY29kZUlEKTsKICAg
ICAgICAgdm9pZCBjb21waWxlT3BDb25zdHJ1Y3RTZXR1cEFyZ3MoSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgZW51bSBDb21waWxlT3BTdHJpY3RFcVR5cGUgeyBPcFN0cmljdEVxLCBPcE5TdHJpY3RF
cSB9OwogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVxKEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiwgdW5zaWduZWQgaSwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpOwpJbmRleDogaml0
L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMzg5
MjcpCShmcm9tIGppdC9KSVQuY3BwOjM4OTI3KQorKysgaml0L0pJVENhbGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzc3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSklULmgiCisK
KyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSlNB
cnJheS5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJJbnRlcnByZXRlci5o
IgorI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKKyNpbmNsdWRlICJTYW1wbGluZ1Rvb2wuaCIKKwor
I2lmbmRlZiBOREVCVUcKKyNpbmNsdWRlIDxzdGRpby5oPgorI2VuZGlmCisKKyNkZWZpbmUgX18g
bV9hc3NlbWJsZXIuIAorCisjaWYgUExBVEZPUk0oV0lOKQorI3VuZGVmIEZJRUxEX09GRlNFVCAv
LyBGaXggY29uZmxpY3Qgd2l0aCB3aW5udC5oLgorI2VuZGlmCisKKy8vIEZJRUxEX09GRlNFVDog
TGlrZSB0aGUgQysrIG9mZnNldG9mIG1hY3JvLCBidXQgeW91IGNhbiB1c2UgaXQgd2l0aCBjbGFz
c2VzLgorLy8gVGhlIG1hZ2ljIG51bWJlciAweDQwMDAgaXMgaW5zaWduaWZpY2FudC4gV2UgdXNl
IGl0IHRvIGF2b2lkIHVzaW5nIE5VTEwsIHNpbmNlCisvLyBOVUxMIGNhbiBjYXVzZSBjb21waWxl
ciBwcm9ibGVtcywgZXNwZWNpYWxseSBpbiBjYXNlcyBvZiBtdWx0aXBsZSBpbmhlcml0YW5jZS4K
KyNkZWZpbmUgRklFTERfT0ZGU0VUKGNsYXNzLCBmaWVsZCkgKHJlaW50ZXJwcmV0X2Nhc3Q8cHRy
ZGlmZl90PigmKHJlaW50ZXJwcmV0X2Nhc3Q8Y2xhc3MqPigweDQwMDApLT5maWVsZCkpIC0gMHg0
MDAwKQorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRl
ZiBYODZBc3NlbWJsZXI6OkptcFNyYyBKbXBTcmM7CisKKyNpZiBQTEFURk9STShNQUMpCisKK3N0
YXRpYyBpbmxpbmUgYm9vbCBpc1NTRTJQcmVzZW50KCkKK3sKKyAgICByZXR1cm4gdHJ1ZTsgLy8g
QWxsIFg4NiBNYWNzIGFyZSBndWFyYW50ZWVkIHRvIHN1cHBvcnQgYXQgbGVhc3QgU1NFMgorfQor
CisjZWxzZQorCitzdGF0aWMgYm9vbCBpc1NTRTJQcmVzZW50KCkKK3sKKyAgICBzdGF0aWMgY29u
c3QgaW50IFNTRTJGZWF0dXJlQml0ID0gMSA8PCAyNjsKKyAgICBzdHJ1Y3QgU1NFMkNoZWNrIHsK
KyAgICAgICAgU1NFMkNoZWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGZsYWdzOwor
I2lmIENPTVBJTEVSKE1TVkMpCisgICAgICAgICAgICBfYXNtIHsKKyAgICAgICAgICAgICAgICBt
b3YgZWF4LCAxIC8vIGNwdWlkIGZ1bmN0aW9uIDEgZ2l2ZXMgdXMgdGhlIHN0YW5kYXJkIGZlYXR1
cmUgc2V0CisgICAgICAgICAgICAgICAgY3B1aWQ7CisgICAgICAgICAgICAgICAgbW92IGZsYWdz
LCBlZHg7CisgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgZmxhZ3MgPSAwOworICAg
ICAgICAgICAgLy8gRklYTUU6IEFkZCBHQ0MgY29kZSB0byBkbyBhYm92ZSBhc20KKyNlbmRpZgor
ICAgICAgICAgICAgcHJlc2VudCA9IChmbGFncyAmIFNTRTJGZWF0dXJlQml0KSAhPSAwOworICAg
ICAgICB9CisgICAgICAgIGJvb2wgcHJlc2VudDsKKyAgICB9OworICAgIHN0YXRpYyBTU0UyQ2hl
Y2sgY2hlY2s7CisgICAgcmV0dXJuIGNoZWNrLnByZXNlbnQ7Cit9CisKKyNlbmRpZgorCitDT01Q
SUxFX0FTU0VSVChDVElfQVJHU19jb2RlID09IDB4QywgQ1RJX0FSR1NfY29kZV9pc19DKTsKK0NP
TVBJTEVfQVNTRVJUKENUSV9BUkdTX2NhbGxGcmFtZSA9PSAweEUsIENUSV9BUkdTX2NhbGxGcmFt
ZV9pc19FKTsKKworI2lmIENPTVBJTEVSKEdDQykgJiYgUExBVEZPUk0oWDg2KQorCisjaWYgUExB
VEZPUk0oREFSV0lOKQorI2RlZmluZSBTWU1CT0xfU1RSSU5HKG5hbWUpICJfIiAjbmFtZQorI2Vs
c2UKKyNkZWZpbmUgU1lNQk9MX1NUUklORyhuYW1lKSAjbmFtZQorI2VuZGlmCisKK2FzbSgKKyIu
Z2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xpbmUpICJcbiIKK1NZTUJPTF9TVFJJTkco
Y3RpVHJhbXBvbGluZSkgIjoiICJcbiIKKyAgICAicHVzaGwgJWVzaSIgIlxuIgorICAgICJwdXNo
bCAlZWRpIiAiXG4iCisgICAgInB1c2hsICVlYngiICJcbiIKKyAgICAic3VibCAkMHgyMCwgJWVz
cCIgIlxuIgorICAgICJtb3ZsICQ1MTIsICVlc2kiICJcbiIKKyAgICAibW92bCAweDM4KCVlc3Ap
LCAlZWRpIiAiXG4iIC8vIE94MzggPSAweDBFICogNCwgMHgwRSA9IENUSV9BUkdTX2NhbGxGcmFt
ZSAoc2VlIGFzc2VydGlvbiBhYm92ZSkKKyAgICAiY2FsbCAqMHgzMCglZXNwKSIgIlxuIiAvLyBP
eDMwID0gMHgwQyAqIDQsIDB4MEMgPSBDVElfQVJHU19jb2RlIChzZWUgYXNzZXJ0aW9uIGFib3Zl
KQorICAgICJhZGRsICQweDIwLCAlZXNwIiAiXG4iCisgICAgInBvcGwgJWVieCIgIlxuIgorICAg
ICJwb3BsICVlZGkiICJcbiIKKyAgICAicG9wbCAlZXNpIiAiXG4iCisgICAgInJldCIgIlxuIgor
KTsKKworYXNtKAorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xpbmUp
ICJcbiIKK1NZTUJPTF9TVFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xpbmUpICI6IiAiXG4iCisjaWYg
VVNFKENUSV9BUkdVTUVOVCkKKyNpZiBVU0UoRkFTVF9DQUxMX0NUSV9BUkdVTUVOVCkKKyAgICAi
bW92bCAlZXNwLCAlZWN4IiAiXG4iCisjZWxzZQorICAgICJtb3ZsICVlc3AsIDAoJWVzcCkiICJc
biIKKyNlbmRpZgorICAgICJjYWxsICIgU1lNQk9MX1NUUklORyhfWk4zSlNDMTFJbnRlcnByZXRl
cjEyY3RpX3ZtX3Rocm93RVBQdikgIlxuIgorI2Vsc2UKKyAgICAiY2FsbCAiIFNZTUJPTF9TVFJJ
TkcoX1pOM0pTQzExSW50ZXJwcmV0ZXIxMmN0aV92bV90aHJvd0VQdnopICJcbiIKKyNlbmRpZgor
ICAgICJhZGRsICQweDIwLCAlZXNwIiAiXG4iCisgICAgInBvcGwgJWVieCIgIlxuIgorICAgICJw
b3BsICVlZGkiICJcbiIKKyAgICAicG9wbCAlZXNpIiAiXG4iCisgICAgInJldCIgIlxuIgorKTsK
KyAgICAKKyNlbGlmIENPTVBJTEVSKE1TVkMpCisKK2V4dGVybiAiQyIgeworICAgIAorICAgIF9f
ZGVjbHNwZWMobmFrZWQpIEpTVmFsdWUqIGN0aVRyYW1wb2xpbmUodm9pZCogY29kZSwgUmVnaXN0
ZXJGaWxlKiwgQ2FsbEZyYW1lKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbiwgUHJvZmlsZXIqKiwgSlNH
bG9iYWxEYXRhKikKKyAgICB7CisgICAgICAgIF9fYXNtIHsKKyAgICAgICAgICAgIHB1c2ggZXNp
OworICAgICAgICAgICAgcHVzaCBlZGk7CisgICAgICAgICAgICBwdXNoIGVieDsKKyAgICAgICAg
ICAgIHN1YiBlc3AsIDB4MjA7CisgICAgICAgICAgICBtb3YgZXNpLCA1MTI7CisgICAgICAgICAg
ICBtb3YgZWN4LCBlc3A7CisgICAgICAgICAgICBtb3YgZWRpLCBbZXNwICsgMHgzOF07CisgICAg
ICAgICAgICBjYWxsIFtlc3AgKyAweDMwXTsgLy8gT3gzMCA9IDB4MEMgKiA0LCAweDBDID0gQ1RJ
X0FSR1NfY29kZSAoc2VlIGFzc2VydGlvbiBhYm92ZSkKKyAgICAgICAgICAgIGFkZCBlc3AsIDB4
MjA7CisgICAgICAgICAgICBwb3AgZWJ4OworICAgICAgICAgICAgcG9wIGVkaTsKKyAgICAgICAg
ICAgIHBvcCBlc2k7CisgICAgICAgICAgICByZXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgX19kZWNsc3BlYyhuYWtlZCkgdm9pZCBjdGlWTVRocm93VHJhbXBvbGluZSgpCisgICAgewor
ICAgICAgICBfX2FzbSB7CisgICAgICAgICAgICBtb3YgZWN4LCBlc3A7CisgICAgICAgICAgICBj
YWxsIEpTQzo6SW50ZXJwcmV0ZXI6OmN0aV92bV90aHJvdzsKKyAgICAgICAgICAgIGFkZCBlc3As
IDB4MjA7CisgICAgICAgICAgICBwb3AgZWJ4OworICAgICAgICAgICAgcG9wIGVkaTsKKyAgICAg
ICAgICAgIHBvcCBlc2k7CisgICAgICAgICAgICByZXQ7CisgICAgICAgIH0KKyAgICB9CisgICAg
Cit9CisKKyNlbmRpZgorCitzdGF0aWMgQUxXQVlTX0lOTElORSB1aW50cHRyX3QgYXNJbnRlZ2Vy
KEpTVmFsdWUqIHZhbHVlKQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4odmFsdWUpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpraWxsTGFzdFJlc3VsdFJl
Z2lzdGVyKCkKK3sKKyAgICBtX2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lzdGVyID0gc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptYXgoKTsKK30KKworLy8gZ2V0IGFyZyBwdXRzIGFuIGFyZyBmcm9t
IHRoZSBTRiByZWdpc3RlciBhcnJheSBpbnRvIGEgaC93IHJlZ2lzdGVyCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIFJlZ2lzdGVySUQgZHN0
LCB1bnNpZ25lZCBjdXJyZW50SW5zdHJ1Y3Rpb25JbmRleCkKK3sKKyAgICAvLyBUT0RPOiB3ZSB3
YW50IHRvIHJldXNlIHZhbHVlcyB0aGF0IGFyZSBhbHJlYWR5IGluIHJlZ2lzdGVycyBpZiB3ZSBj
YW4gLSBhZGQgYSByZWdpc3RlciBhbGxvY2F0b3IhCisgICAgaWYgKG1fY29kZUJsb2NrLT5pc0Nv
bnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKSB7CisgICAgICAgIEpTVmFsdWUqIHZhbHVlID0gbV9j
b2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgICAgIF9fIG1vdmxfaTMycihhc0ludGVn
ZXIodmFsdWUpLCBkc3QpOworICAgICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc3JjID09IG1fbGFzdFJlc3VsdEJ5dGVjb2Rl
UmVnaXN0ZXIgJiYgbV9jb2RlQmxvY2stPmlzVGVtcG9yYXJ5UmVnaXN0ZXJJbmRleChzcmMpKSB7
CisgICAgICAgIGJvb2wgYXRKdW1wVGFyZ2V0ID0gZmFsc2U7CisgICAgICAgIHdoaWxlIChtX2p1
bXBUYXJnZXRzUG9zaXRpb24gPCBtX2NvZGVCbG9jay0+anVtcFRhcmdldHMuc2l6ZSgpICYmIG1f
Y29kZUJsb2NrLT5qdW1wVGFyZ2V0c1ttX2p1bXBUYXJnZXRzUG9zaXRpb25dIDw9IGN1cnJlbnRJ
bnN0cnVjdGlvbkluZGV4KSB7CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPmp1bXBUYXJn
ZXRzW21fanVtcFRhcmdldHNQb3NpdGlvbl0gPT0gY3VycmVudEluc3RydWN0aW9uSW5kZXgpCisg
ICAgICAgICAgICAgICAgYXRKdW1wVGFyZ2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICsrbV9qdW1w
VGFyZ2V0c1Bvc2l0aW9uOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFhdEp1bXBUYXJnZXQp
IHsKKyAgICAgICAgICAgIC8vIFRoZSBhcmd1bWVudCB3ZSB3YW50IGlzIGFscmVhZHkgc3RvcmVk
IGluIGVheAorICAgICAgICAgICAgaWYgKGRzdCAhPSBYODY6OmVheCkKKyAgICAgICAgICAgICAg
ICBfXyBtb3ZsX3JyKFg4Njo6ZWF4LCBkc3QpOworICAgICAgICAgICAga2lsbExhc3RSZXN1bHRS
ZWdpc3RlcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAg
X18gbW92bF9tcihzcmMgKiBzaXplb2YoUmVnaXN0ZXIpLCBYODY6OmVkaSwgZHN0KTsKKyAgICBr
aWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGludCBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIGludCBzcmMy
LCBSZWdpc3RlcklEIGRzdDIsIHVuc2lnbmVkIGkpCit7CisgICAgaWYgKHNyYzIgPT0gbV9sYXN0
UmVzdWx0Qnl0ZWNvZGVSZWdpc3RlcikgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyYzIsIGRzdDIsIGkpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIGRz
dDEsIGkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
MSwgZHN0MSwgaSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgZHN0Miwg
aSk7CisgICAgfQorfQorCisvLyBnZXQgYXJnIHB1dHMgYW4gYXJnIGZyb20gdGhlIFNGIHJlZ2lz
dGVyIGFycmF5IG9udG8gdGhlIHN0YWNrLCBhcyBhbiBhcmcgdG8gYSBjb250ZXh0IHRocmVhZGVk
IGZ1bmN0aW9uLgorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dENUSUFyZ0Zyb21WaXJ0
dWFsUmVnaXN0ZXIodW5zaWduZWQgc3JjLCB1bnNpZ25lZCBvZmZzZXQsIFJlZ2lzdGVySUQgc2Ny
YXRjaCkKK3sKKyAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNy
YykpIHsKKyAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQo
c3JjKTsKKyAgICAgICAgX18gbW92bF9pMzJtKGFzSW50ZWdlcih2YWx1ZSksIG9mZnNldCArIHNp
emVvZih2b2lkKiksIFg4Njo6ZXNwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBfXyBtb3ZsX21y
KHNyYyAqIHNpemVvZihSZWdpc3RlciksIFg4Njo6ZWRpLCBzY3JhdGNoKTsKKyAgICAgICAgX18g
bW92bF9ybShzY3JhdGNoLCBvZmZzZXQgKyBzaXplb2Yodm9pZCopLCBYODY6OmVzcCk7CisgICAg
fQorCisgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOworfQorCisvLyBwdXRzIGFuIGFyZyBv
bnRvIHRoZSBzdGFjaywgYXMgYW4gYXJnIHRvIGEgY29udGV4dCB0aHJlYWRlZCBmdW5jdGlvbi4K
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRDVElBcmcoUmVnaXN0ZXJJRCBzcmMsIHVu
c2lnbmVkIG9mZnNldCkKK3sKKyAgICBfXyBtb3ZsX3JtKHNyYywgb2Zmc2V0ICsgc2l6ZW9mKHZv
aWQqKSwgWDg2Ojplc3ApOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0Q1RJ
QXJnKHVuc2lnbmVkIG9mZnNldCwgUmVnaXN0ZXJJRCBkc3QpCit7CisgICAgX18gbW92bF9tcihv
ZmZzZXQgKyBzaXplb2Yodm9pZCopLCBYODY6OmVzcCwgZHN0KTsKK30KKworCitBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0UHV0Q1RJQXJnQ29uc3RhbnQodW5zaWduZWQgdmFsdWUsIHVuc2ln
bmVkIG9mZnNldCkKK3sKKyAgICBfXyBtb3ZsX2kzMm0odmFsdWUsIG9mZnNldCArIHNpemVvZih2
b2lkKiksIFg4Njo6ZXNwKTsKK30KKworQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBKSVQ6OmdldENv
bnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyh1bnNpZ25lZCBzcmMpCit7CisgICAgaWYgKG1fY29k
ZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKSB7CisgICAgICAgIEpTVmFsdWUq
IHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7CisgICAgICAgIHJldHVybiBK
U0ltbWVkaWF0ZTo6aXNOdW1iZXIodmFsdWUpID8gdmFsdWUgOiBub1ZhbHVlKCk7CisgICAgfQor
ICAgIHJldHVybiBub1ZhbHVlKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQ
dXRDVElQYXJhbSh2b2lkKiB2YWx1ZSwgdW5zaWduZWQgbmFtZSkKK3sKKyAgICBfXyBtb3ZsX2kz
Mm0ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odmFsdWUpLCBuYW1lICogc2l6ZW9mKHZvaWQq
KSwgWDg2Ojplc3ApOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0Q1RJUGFy
YW0oUmVnaXN0ZXJJRCBmcm9tLCB1bnNpZ25lZCBuYW1lKQoreworICAgIF9fIG1vdmxfcm0oZnJv
bSwgbmFtZSAqIHNpemVvZih2b2lkKiksIFg4Njo6ZXNwKTsKK30KKworQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEdldENUSVBhcmFtKHVuc2lnbmVkIG5hbWUsIFJlZ2lzdGVySUQgdG8pCit7
CisgICAgX18gbW92bF9tcihuYW1lICogc2l6ZW9mKHZvaWQqKSwgWDg2Ojplc3AsIHRvKTsKKyAg
ICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFJlZ2lzdGVyRmlsZTo6
Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnkpCit7CisgICAgX18gbW92bF9ybShmcm9tLCBlbnRy
eSAqIHNpemVvZihSZWdpc3RlciksIFg4Njo6ZWRpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVI
ZWFkZXJFbnRyeSBlbnRyeSwgUmVnaXN0ZXJJRCB0bykKK3sKKyAgICBfXyBtb3ZsX21yKGVudHJ5
ICogc2l6ZW9mKFJlZ2lzdGVyKSwgWDg2OjplZGksIHRvKTsKKyAgICBraWxsTGFzdFJlc3VsdFJl
Z2lzdGVyKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIodW5zaWduZWQgZHN0LCBSZWdpc3RlcklEIGZyb20pCit7CisgICAgX18gbW92bF9ybShm
cm9tLCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpLCBYODY6OmVkaSk7CisgICAgbV9sYXN0UmVzdWx0
Qnl0ZWNvZGVSZWdpc3RlciA9IChmcm9tID09IFg4Njo6ZWF4KSA/IGRzdCA6IHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWF4KCk7CisgICAgLy8gRklYTUU6ICNpZm5kZWYgTkRFQlVHLCBXcml0
ZSB0aGUgY29ycmVjdCBtX3R5cGUgdG8gdGhlIHJlZ2lzdGVyLgorfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0SW5pdFJlZ2lzdGVyKHVuc2lnbmVkIGRzdCkKK3sKKyAgICBfXyBtb3Zs
X2kzMm0oYXNJbnRlZ2VyKGpzVW5kZWZpbmVkKCkpLCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpLCBY
ODY6OmVkaSk7CisgICAgLy8gRklYTUU6ICNpZm5kZWYgTkRFQlVHLCBXcml0ZSB0aGUgY29ycmVj
dCBtX3R5cGUgdG8gdGhlIHJlZ2lzdGVyLgorfQorCit2b2lkIGN0aVNldFJldHVybkFkZHJlc3Mo
dm9pZCoqIHdoZXJlLCB2b2lkKiB3aGF0KQoreworICAgICp3aGVyZSA9IHdoYXQ7Cit9CisKK3Zv
aWQgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3Modm9pZCogd2hlcmUsIHZvaWQqIHdoYXQp
Cit7CisgICAgKHN0YXRpY19jYXN0PHZvaWQqKj4od2hlcmUpKVstMV0gPSByZWludGVycHJldF9j
YXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4od2hhdCkgLSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4od2hlcmUpKTsKK30KKworI2lmbmRlZiBOREVCVUcKKwordm9pZCBK
SVQ6OnByaW50Qnl0ZWNvZGVPcGVyYW5kVHlwZXModW5zaWduZWQgc3JjMSwgdW5zaWduZWQgc3Jj
MikKK3sKKyAgICBjaGFyIHdoaWNoMSA9ICcqJzsKKyAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29u
c3RhbnRSZWdpc3RlckluZGV4KHNyYzEpKSB7CisgICAgICAgIEpTVmFsdWUqIHZhbHVlID0gbV9j
b2RlQmxvY2stPmdldENvbnN0YW50KHNyYzEpOworICAgICAgICB3aGljaDEgPSAKKyAgICAgICAg
ICAgIEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2YWx1ZSkgPworICAgICAgICAgICAgICAgIChK
U0ltbWVkaWF0ZTo6aXNOdW1iZXIodmFsdWUpID8gJ2knIDoKKyAgICAgICAgICAgICAgICBKU0lt
bWVkaWF0ZTo6aXNCb29sZWFuKHZhbHVlKSA/ICdiJyA6CisgICAgICAgICAgICAgICAgdmFsdWUt
PmlzVW5kZWZpbmVkKCkgPyAndScgOgorICAgICAgICAgICAgICAgIHZhbHVlLT5pc051bGwoKSA/
ICduJyA6ICc/JykKKyAgICAgICAgICAgICAgICA6CisgICAgICAgICAgICAodmFsdWUtPmlzU3Ry
aW5nKCkgPyAncycgOgorICAgICAgICAgICAgdmFsdWUtPmlzT2JqZWN0KCkgPyAnbycgOgorICAg
ICAgICAgICAgJ2snKTsKKyAgICB9CisgICAgY2hhciB3aGljaDIgPSAnKic7CisgICAgaWYgKG1f
Y29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMyKSkgeworICAgICAgICBKU1Zh
bHVlKiB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMyKTsKKyAgICAgICAgd2hp
Y2gyID0gCisgICAgICAgICAgICBKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodmFsdWUpID8KKyAg
ICAgICAgICAgICAgICAoSlNJbW1lZGlhdGU6OmlzTnVtYmVyKHZhbHVlKSA/ICdpJyA6CisgICAg
ICAgICAgICAgICAgSlNJbW1lZGlhdGU6OmlzQm9vbGVhbih2YWx1ZSkgPyAnYicgOgorICAgICAg
ICAgICAgICAgIHZhbHVlLT5pc1VuZGVmaW5lZCgpID8gJ3UnIDoKKyAgICAgICAgICAgICAgICB2
YWx1ZS0+aXNOdWxsKCkgPyAnbicgOiAnPycpCisgICAgICAgICAgICAgICAgOgorICAgICAgICAg
ICAgKHZhbHVlLT5pc1N0cmluZygpID8gJ3MnIDoKKyAgICAgICAgICAgIHZhbHVlLT5pc09iamVj
dCgpID8gJ28nIDoKKyAgICAgICAgICAgICdrJyk7CisgICAgfQorICAgIGlmICgod2hpY2gxICE9
ICcqJykgfCAod2hpY2gyICE9ICcqJykpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVHlwZXMg
JWMgJWNcbiIsIHdoaWNoMSwgd2hpY2gyKTsKK30KKworI2VuZGlmCisKK0FMV0FZU19JTkxJTkUg
Sm1wU3JjIEpJVDo6ZW1pdE5ha2VkQ2FsbCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBYODY6OlJl
Z2lzdGVySUQgcikKK3sKKyAgICBKbXBTcmMgY2FsbCA9IF9fIGNhbGwocik7CisgICAgbV9jYWxs
cy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBieXRlY29kZUluZGV4KSk7CisKKyAgICByZXR1cm4g
Y2FsbDsKK30KKworQUxXQVlTX0lOTElORSAgSm1wU3JjIEpJVDo6ZW1pdE5ha2VkQ2FsbCh1bnNp
Z25lZCBieXRlY29kZUluZGV4LCB2b2lkKiBmdW5jdGlvbikKK3sKKyAgICBKbXBTcmMgY2FsbCA9
IF9fIGNhbGwoKTsKKyAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIHJlaW50ZXJw
cmV0X2Nhc3Q8Q1RJSGVscGVyX3Y+KGZ1bmN0aW9uKSwgYnl0ZWNvZGVJbmRleCkpOworICAgIHJl
dHVybiBjYWxsOworfQorCitBTFdBWVNfSU5MSU5FIEptcFNyYyBKSVQ6OmVtaXRDVElDYWxsKHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENUSUhlbHBlcl9qIGhlbHBlcikKK3sKKyNpZiBFTkFCTEUo
T1BDT0RFX1NBTVBMSU5HKQorICAgIF9fIG1vdmxfaTMybShtX2ludGVycHJldGVyLT5zYW1wbGVy
KCktPmVuY29kZVNhbXBsZShtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBieXRl
Y29kZUluZGV4LCB0cnVlKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkp
OworI2VuZGlmCisgICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CisgICAgZW1pdFB1
dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOworICAgIEptcFNyYyBjYWxs
ID0gX18gY2FsbCgpOworICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwgaGVscGVy
LCBieXRlY29kZUluZGV4KSk7CisjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKKyAgICBfXyBt
b3ZsX2kzMm0obV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2RlQmxv
Y2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgYnl0ZWNvZGVJbmRleCwgZmFsc2UpLCBtX2ludGVy
cHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7CisjZW5kaWYKKyAgICBraWxsTGFzdFJl
c3VsdFJlZ2lzdGVyKCk7CisKKyAgICByZXR1cm4gY2FsbDsKK30KKworQUxXQVlTX0lOTElORSBK
bXBTcmMgSklUOjplbWl0Q1RJQ2FsbCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDVElIZWxwZXJf
byBoZWxwZXIpCit7CisjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKKyAgICBfXyBtb3ZsX2kz
Mm0obV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmlu
c3RydWN0aW9ucy5iZWdpbigpICsgYnl0ZWNvZGVJbmRleCwgdHJ1ZSksIG1faW50ZXJwcmV0ZXIt
PnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKKyNlbmRpZgorICAgIF9fIHJlc3RvcmVBcmd1bWVu
dFJlZmVyZW5jZSgpOworICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJX0FSR1NfY2Fs
bEZyYW1lKTsKKyAgICBKbXBTcmMgY2FsbCA9IF9fIGNhbGwoKTsKKyAgICBtX2NhbGxzLmFwcGVu
ZChDYWxsUmVjb3JkKGNhbGwsIGhlbHBlciwgYnl0ZWNvZGVJbmRleCkpOworI2lmIEVOQUJMRShP
UENPREVfU0FNUExJTkcpCisgICAgX18gbW92bF9pMzJtKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIo
KS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIGJ5dGVj
b2RlSW5kZXgsIGZhbHNlKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkp
OworI2VuZGlmCisgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOworCisgICAgcmV0dXJuIGNh
bGw7Cit9CisKK0FMV0FZU19JTkxJTkUgSm1wU3JjIEpJVDo6ZW1pdENUSUNhbGwodW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCwgQ1RJSGVscGVyX3AgaGVscGVyKQoreworI2lmIEVOQUJMRShPUENPREVf
U0FNUExJTkcpCisgICAgX18gbW92bF9pMzJtKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5j
b2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIGJ5dGVjb2RlSW5k
ZXgsIHRydWUpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7CisjZW5k
aWYKKyAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKKyAgICBlbWl0UHV0Q1RJUGFy
YW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7CisgICAgSm1wU3JjIGNhbGwgPSBfXyBj
YWxsKCk7CisgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBoZWxwZXIsIGJ5dGVj
b2RlSW5kZXgpKTsKKyNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQorICAgIF9fIG1vdmxfaTMy
bShtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29kZUluZGV4LCBmYWxzZSksIG1faW50ZXJwcmV0ZXIt
PnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKKyNlbmRpZgorICAgIGtpbGxMYXN0UmVzdWx0UmVn
aXN0ZXIoKTsKKworICAgIHJldHVybiBjYWxsOworfQorCitBTFdBWVNfSU5MSU5FIEptcFNyYyBK
SVQ6OmVtaXRDVElDYWxsKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENUSUhlbHBlcl9iIGhlbHBl
cikKK3sKKyNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQorICAgIF9fIG1vdmxfaTMybShtX2lu
dGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zLmJlZ2luKCkgKyBieXRlY29kZUluZGV4LCB0cnVlKSwgbV9pbnRlcnByZXRlci0+c2FtcGxl
cigpLT5zYW1wbGVTbG90KCkpOworI2VuZGlmCisgICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJl
bmNlKCk7CisgICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUp
OworICAgIEptcFNyYyBjYWxsID0gX18gY2FsbCgpOworICAgIG1fY2FsbHMuYXBwZW5kKENhbGxS
ZWNvcmQoY2FsbCwgaGVscGVyLCBieXRlY29kZUluZGV4KSk7CisjaWYgRU5BQkxFKE9QQ09ERV9T
QU1QTElORykKKyAgICBfXyBtb3ZsX2kzMm0obV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNv
ZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgYnl0ZWNvZGVJbmRl
eCwgZmFsc2UpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7CisjZW5k
aWYKKyAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CisKKyAgICByZXR1cm4gY2FsbDsKK30K
KworQUxXQVlTX0lOTElORSBKbXBTcmMgSklUOjplbWl0Q1RJQ2FsbCh1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBDVElIZWxwZXJfdiBoZWxwZXIpCit7CisjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElO
RykKKyAgICBfXyBtb3ZsX2kzMm0obV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNvZGVTYW1w
bGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgYnl0ZWNvZGVJbmRleCwgdHJ1
ZSksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKKyNlbmRpZgorICAg
IF9fIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOworICAgIGVtaXRQdXRDVElQYXJhbShYODY6
OmVkaSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKKyAgICBKbXBTcmMgY2FsbCA9IF9fIGNhbGwoKTsK
KyAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIGhlbHBlciwgYnl0ZWNvZGVJbmRl
eCkpOworI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCisgICAgX18gbW92bF9pMzJtKG1faW50
ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXgsIGZhbHNlKSwgbV9pbnRlcnByZXRlci0+c2FtcGxl
cigpLT5zYW1wbGVTbG90KCkpOworI2VuZGlmCisgICAga2lsbExhc3RSZXN1bHRSZWdpc3Rlcigp
OworCisgICAgcmV0dXJuIGNhbGw7Cit9CisKK0FMV0FZU19JTkxJTkUgSm1wU3JjIEpJVDo6ZW1p
dENUSUNhbGwodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ1RJSGVscGVyX3MgaGVscGVyKQorewor
I2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCisgICAgX18gbW92bF9pMzJtKG1faW50ZXJwcmV0
ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVn
aW4oKSArIGJ5dGVjb2RlSW5kZXgsIHRydWUpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNh
bXBsZVNsb3QoKSk7CisjZW5kaWYKKyAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsK
KyAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7CisgICAg
Sm1wU3JjIGNhbGwgPSBfXyBjYWxsKCk7CisgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChj
YWxsLCBoZWxwZXIsIGJ5dGVjb2RlSW5kZXgpKTsKKyNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5H
KQorICAgIF9fIG1vdmxfaTMybShtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBs
ZShtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29kZUluZGV4LCBmYWxz
ZSksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKKyNlbmRpZgorICAg
IGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKKworICAgIHJldHVybiBjYWxsOworfQorCitBTFdB
WVNfSU5MSU5FIEptcFNyYyBKSVQ6OmVtaXRDVElDYWxsKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgs
IENUSUhlbHBlcl8yIGhlbHBlcikKK3sKKyNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQorICAg
IF9fIG1vdmxfaTMybShtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29kZUluZGV4LCB0cnVlKSwgbV9p
bnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpOworI2VuZGlmCisgICAgX18gcmVz
dG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CisgICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBD
VElfQVJHU19jYWxsRnJhbWUpOworICAgIEptcFNyYyBjYWxsID0gX18gY2FsbCgpOworICAgIG1f
Y2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwgaGVscGVyLCBieXRlY29kZUluZGV4KSk7Cisj
aWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKKyAgICBfXyBtb3ZsX2kzMm0obV9pbnRlcnByZXRl
ci0+c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdp
bigpICsgYnl0ZWNvZGVJbmRleCwgZmFsc2UpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNh
bXBsZVNsb3QoKSk7CisjZW5kaWYKKyAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CisKKyAg
ICByZXR1cm4gY2FsbDsKK30KKworSm1wU3JjIEpJVDo6Y2hlY2tTdHJ1Y3R1cmUoUmVnaXN0ZXJJ
RCByZWcsIFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIF9fIGNtcGxfaTMybShyZWludGVy
cHJldF9jYXN0PHVpbnQzMl90PihzdHJ1Y3R1cmUpLCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0
cnVjdHVyZSksIHJlZyk7CisgICAgcmV0dXJuIF9fIGpuZSgpOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgpCit7CisgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6
VGFnTWFzaywgcmVnKTsKKyAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBq
bmUoKSwgYnl0ZWNvZGVJbmRleCkpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJRCByZWcsIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgsIGludCB2UmVnKQoreworICAgIGlmIChtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVk
aWF0ZSh2UmVnKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZywgYnl0ZWNvZGVJbmRleCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6
OmxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGNvbnN0IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIsIGludCB2UmVnKQoreworICAgIGlmIChtX2NvZGVCbG9jay0+aXNLbm93bk5v
dEltbWVkaWF0ZSh2UmVnKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIF9fIGxp
bmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0FMV0FZ
U19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShSZWdpc3RlcklE
IHJlZywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK3sKKyAgICBfXyB0ZXN0bF9pMzJyKEpTSW1t
ZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgcmVnKTsKKyAgICBtX3Nsb3dDYXNlcy5hcHBlbmQo
U2xvd0Nhc2VFbnRyeShfXyBqZSgpLCBieXRlY29kZUluZGV4KSk7Cit9CisKK0FMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bXMoUmVnaXN0ZXJJRCByZWcx
LCBSZWdpc3RlcklEIHJlZzIsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCit7CisgICAgX18gbW92
bF9ycihyZWcxLCBYODY6OmVjeCk7CisgICAgX18gYW5kbF9ycihyZWcyLCBYODY6OmVjeCk7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWN4LCBieXRlY29kZUluZGV4KTsK
K30KKworQUxXQVlTX0lOTElORSB1bnNpZ25lZCBKSVQ6OmdldERlVGFnZ2VkQ29uc3RhbnRJbW1l
ZGlhdGUoSlNWYWx1ZSogaW1tKQoreworICAgIEFTU0VSVChKU0ltbWVkaWF0ZTo6aXNOdW1iZXIo
aW1tKSk7CisgICAgcmV0dXJuIGFzSW50ZWdlcihpbW0pICYgfkpTSW1tZWRpYXRlOjpUYWdCaXRU
eXBlSW50ZWdlcjsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEZhc3RBcml0aERl
VGFnSW1tZWRpYXRlKFJlZ2lzdGVySUQgcmVnKQoreworICAgIF9fIHN1YmxfaThyKEpTSW1tZWRp
YXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgcmVnKTsKK30KKworQUxXQVlTX0lOTElORSBKbXBTcmMg
SklUOjplbWl0RmFzdEFyaXRoRGVUYWdJbW1lZGlhdGVKdW1wSWZaZXJvKFJlZ2lzdGVySUQgcmVn
KQoreworICAgIF9fIHN1YmxfaThyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgcmVn
KTsKKyAgICByZXR1cm4gX18gamUoKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKFJlZ2lzdGVySUQgcmVnKQoreworICAgIF9fIGFkZGxf
aThyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgcmVnKTsKK30KKworQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEZhc3RBcml0aFBvdGVudGlhbGx5UmVUYWdJbW1lZGlhdGUoUmVn
aXN0ZXJJRCByZWcpCit7CisgICAgX18gb3JsX2k4cihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUlu
dGVnZXIsIHJlZyk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRGYXN0QXJpdGhJ
bW1Ub0ludChSZWdpc3RlcklEIHJlZykKK3sKKyAgICBfXyBzYXJsX2k4cigxLCByZWcpOworfQor
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0RmFzdEFyaXRoSW50VG9JbW1PclNsb3dDYXNl
KFJlZ2lzdGVySUQgcmVnLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQoreworICAgIF9fIGFkZGxf
cnIocmVnLCByZWcpOworICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpv
KCksIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUocmVn
KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEZhc3RBcml0aEludFRvSW1tTm9D
aGVjayhSZWdpc3RlcklEIHJlZykKK3sKKyAgICBfXyBhZGRsX3JyKHJlZywgcmVnKTsKKyAgICBl
bWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUocmVnKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdFRhZ0FzQm9vbEltbWVkaWF0ZShSZWdpc3RlcklEIHJlZykKK3sKKyAgICBfXyBz
aGxfaThyKEpTSW1tZWRpYXRlOjpFeHRlbmRlZFBheWxvYWRTaGlmdCwgcmVnKTsKKyAgICBfXyBv
cmxfaThyKEpTSW1tZWRpYXRlOjpGdWxsVGFnVHlwZUJvb2wsIHJlZyk7Cit9CisKK0pJVDo6SklU
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgOiBt
X2ludGVycHJldGVyKGdsb2JhbERhdGEtPmludGVycHJldGVyKQorICAgICwgbV9nbG9iYWxEYXRh
KGdsb2JhbERhdGEpCisgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCisgICAgLCBtX2xhYmVs
cyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmluc3RydWN0aW9ucy5zaXplKCkgOiAwKQorICAgICwg
bV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mbyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPnBy
b3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKSA6IDApCisgICAgLCBtX2NhbGxTdHJ1Y3R1
cmVTdHViQ29tcGlsYXRpb25JbmZvKGNvZGVCbG9jayA/IGNvZGVCbG9jay0+Y2FsbExpbmtJbmZv
cy5zaXplKCkgOiAwKQorICAgICwgbV9sYXN0UmVzdWx0Qnl0ZWNvZGVSZWdpc3RlcihzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1heCgpKQorICAgICwgbV9qdW1wVGFyZ2V0c1Bvc2l0aW9uKDAp
Cit7Cit9CisKKyNkZWZpbmUgQ1RJX0NPTVBJTEVfQklOQVJZX09QKG5hbWUpIFwKKyAgICBjYXNl
IG5hbWU6IHsgXAorICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0
cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7IFwKKyAgICAgICAgZW1pdFB1
dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwg
NCwgWDg2OjplY3gpOyBcCisgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlf
IyNuYW1lKTsgXAorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQpOyBcCisgICAgICAgIGkgKz0gNDsgXAorICAgICAgICBicmVhazsgXAor
ICAgIH0KKworI2RlZmluZSBDVElfQ09NUElMRV9VTkFSWV9PUChuYW1lKSBcCisgICAgY2FzZSBu
YW1lOiB7IFwKKyAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOyBcCisgICAgICAgIGVtaXRDVElD
YWxsKGksIEludGVycHJldGVyOjpjdGlfIyNuYW1lKTsgXAorICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOyBcCisgICAgICAgIGkgKz0g
MzsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKworc3RhdGljIHZvaWQgdW5yZWFjaGFibGUo
KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIGV4aXQoMSk7Cit9CisKK3ZvaWQg
SklUOjpjb21waWxlT3BDYWxsSW5pdGlhbGl6ZUNhbGxGcmFtZSgpCit7CisgICAgX18gbW92bF9y
bShYODY6OmVkeCwgUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkpOworCisgICAgX18gbW92bF9tcihGSUVMRF9P
RkZTRVQoSlNGdW5jdGlvbiwgbV9zY29wZUNoYWluKSArIEZJRUxEX09GRlNFVChTY29wZUNoYWlu
LCBtX25vZGUpLCBYODY6OmVjeCwgWDg2OjplZHgpOyAvLyBuZXdTY29wZUNoYWluCisKKyAgICBf
XyBtb3ZsX2kzMm0oYXNJbnRlZ2VyKG5vVmFsdWUoKSksIFJlZ2lzdGVyRmlsZTo6T3B0aW9uYWxD
YWxsZWVBcmd1bWVudHMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6
OmVkaSk7CisgICAgX18gbW92bF9ybShYODY6OmVjeCwgUmVnaXN0ZXJGaWxlOjpDYWxsZWUgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6OmVkaSk7CisgICAgX18gbW92
bF9ybShYODY6OmVkeCwgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkpOworfQorCit2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbFNldHVwQXJncyhJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGFyZ0Nv
dW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGludCByZWdpc3Rlck9mZnNldCA9
IGluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKKworICAgIC8vIGVjeCBob2xkcyBmdW5jCisgICAg
ZW1pdFB1dENUSUFyZyhYODY6OmVjeCwgMCk7CisgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJl
Z2lzdGVyT2Zmc2V0LCA0KTsKKyAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoYXJnQ291bnQsIDgp
OworICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihp
bnN0cnVjdGlvbiksIDEyKTsKK30KKwordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxFdmFsU2V0dXBB
cmdzKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgYXJnQ291bnQgPSBpbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gaW5zdHJ1Y3Rp
b25bNF0udS5vcGVyYW5kOworCisgICAgLy8gZWN4IGhvbGRzIGZ1bmMKKyAgICBlbWl0UHV0Q1RJ
QXJnKFg4Njo6ZWN4LCAwKTsKKyAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVnaXN0ZXJPZmZz
ZXQsIDQpOworICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChhcmdDb3VudCwgOCk7CisgICAgZW1p
dFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGluc3RydWN0aW9u
KSwgMTIpOworfQorCit2b2lkIEpJVDo6Y29tcGlsZU9wQ29uc3RydWN0U2V0dXBBcmdzKEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgYXJnQ291bnQgPSBpbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7CisgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25bNF0udS5v
cGVyYW5kOworICAgIGludCBwcm90byA9IGluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKKyAgICBp
bnQgdGhpc1JlZ2lzdGVyID0gaW5zdHJ1Y3Rpb25bNl0udS5vcGVyYW5kOworCisgICAgLy8gZWN4
IGhvbGRzIGZ1bmMKKyAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWN4LCAwKTsKKyAgICBlbWl0UHV0
Q1RJQXJnQ29uc3RhbnQocmVnaXN0ZXJPZmZzZXQsIDQpOworICAgIGVtaXRQdXRDVElBcmdDb25z
dGFudChhcmdDb3VudCwgOCk7CisgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIo
cHJvdG8sIDEyLCBYODY6OmVheCk7CisgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHRoaXNSZWdp
c3RlciwgMTYpOworICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVu
c2lnbmVkPihpbnN0cnVjdGlvbiksIDIwKTsKK30KKwordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwo
T3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgaSwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCit7CisgICAgaW50IGRzdCA9IGluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKKyAgICBpbnQgY2FsbGVlID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OworICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBpbnQg
cmVnaXN0ZXJPZmZzZXQgPSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisKKyAgICAvLyBIYW5k
bGUgZXZhbAorICAgIEptcFNyYyB3YXNFdmFsOworICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxs
X2V2YWwpIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIFg4Njo6ZWN4
LCBpKTsKKyAgICAgICAgY29tcGlsZU9wQ2FsbEV2YWxTZXR1cEFyZ3MoaW5zdHJ1Y3Rpb24pOwor
CisgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfY2FsbF9ldmFsKTsK
KyAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6aW1wb3NzaWJsZVZh
bHVlKCkpLCBYODY6OmVheCk7CisgICAgICAgIHdhc0V2YWwgPSBfXyBqbmUoKTsKKyAgICB9CisK
KyAgICAvLyBUaGlzIHBsYW50cyBhIGNoZWNrIGZvciBhIGNhY2hlZCBKU0Z1bmN0aW9uIHZhbHVl
LCBzbyB3ZSBjYW4gcGxhbnQgYSBmYXN0IGxpbmsgdG8gdGhlIGNhbGxlZS4KKyAgICAvLyBUaGlz
IGRlbGliZXJhdGVseSBsZWF2ZXMgdGhlIGNhbGxlZSBpbiBlY3gsIHVzZWQgd2hlbiBzZXR0aW5n
IHVwIHRoZSBzdGFjayBmcmFtZSBiZWxvdworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2Fs
bGVlLCBYODY6OmVjeCwgaSk7CisgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0
ZTo6aW1wb3NzaWJsZVZhbHVlKCkpLCBYODY6OmVjeCk7CisgICAgSm1wRHN0IGFkZHJlc3NPZkxp
bmtlZEZ1bmN0aW9uQ2hlY2sgPSBfXyBsYWJlbCgpOworICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChT
bG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7CisgICAgQVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0
RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjaywgX18g
bGFiZWwoKSkgPT0gcmVwYXRjaE9mZnNldE9wQ2FsbENhbGwpOworICAgIG1fY2FsbFN0cnVjdHVy
ZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhCZWdpbiA9IGFk
ZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7CisKKyAgICAvLyBUaGUgZm9sbG93aW5nIGlzIHRo
ZSBmYXN0IGNhc2UsIG9ubHkgdXNlZCB3aGFuIGEgY2FsbGVlIGNhbiBiZSBsaW5rZWQuCisKKyAg
ICAvLyBJbiB0aGUgY2FzZSBvZiBPcENvbnN0cnVjdCwgY2FsbCBvdXQgdG8gYSBjdGlfIGZ1bmN0
aW9uIHRvIGNyZWF0ZSB0aGUgbmV3IG9iamVjdC4KKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY29u
c3RydWN0KSB7CisgICAgICAgIGludCBwcm90byA9IGluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsK
KyAgICAgICAgaW50IHRoaXNSZWdpc3RlciA9IGluc3RydWN0aW9uWzZdLnUub3BlcmFuZDsKKwor
ICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWN4LCAwKTsKKyAgICAgICAgZW1pdFB1dENUSUFy
Z0Zyb21WaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIDEyLCBYODY6OmVheCk7CisgICAgICAgIGVtaXRD
VElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfY29uc3RydWN0X0pTQ29uc3RydWN0KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcih0aGlzUmVnaXN0ZXIpOworICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgWDg2OjplY3gsIGkpOworICAgIH0KKworICAgIC8v
IEZhc3QgdmVyc2lvbiBvZiBzdGFjayBmcmFtZSBpbml0aWFsaXphdGlvbiwgZGlyZWN0bHkgcmVs
YXRpdmUgdG8gZWRpLgorICAgIC8vIE5vdGUgdGhhdCB0aGlzIG9taXRzIHRvIHNldCB1cCBSZWdp
c3RlckZpbGU6OkNvZGVCbG9jaywgd2hpY2ggaXMgc2V0IGluIHRoZSBjYWxsZWUKKyAgICBfXyBt
b3ZsX2kzMm0oYXNJbnRlZ2VyKG5vVmFsdWUoKSksIChyZWdpc3Rlck9mZnNldCArIFJlZ2lzdGVy
RmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHMpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKSwgWDg2OjplZGkpOworICAgIF9fIG1vdmxfcm0oWDg2OjplY3gsIChyZWdpc3Rl
ck9mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2FsbGVlKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSksIFg4Njo6ZWRpKTsKKyAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0Z1
bmN0aW9uLCBtX3Njb3BlQ2hhaW4pICsgRklFTERfT0ZGU0VUKFNjb3BlQ2hhaW4sIG1fbm9kZSks
IFg4Njo6ZWN4LCBYODY6OmVkeCk7IC8vIG5ld1Njb3BlQ2hhaW4KKyAgICBfXyBtb3ZsX2kzMm0o
YXJnQ291bnQsIChyZWdpc3Rlck9mZnNldCArIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6OmVkaSk7CisgICAgX18g
bW92bF9ybShYODY6OmVkaSwgKHJlZ2lzdGVyT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZXJG
cmFtZSkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6OmVkaSk7Cisg
ICAgX18gbW92bF9ybShYODY6OmVkeCwgKHJlZ2lzdGVyT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpT
Y29wZUNoYWluKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSksIFg4Njo6ZWRp
KTsKKyAgICBfXyBhZGRsX2kzMnIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpLCBY
ODY6OmVkaSk7CisKKyAgICAvLyBDYWxsIHRvIHRoZSBjYWxsZWUKKyAgICBtX2NhbGxTdHJ1Y3R1
cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoT3RoZXIgPSBl
bWl0TmFrZWRDYWxsKGksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHVucmVhY2hhYmxlKSk7Cisg
ICAgCisgICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkKKyAgICAgICAgX18gbGluayh3
YXNFdmFsLCBfXyBsYWJlbCgpKTsKKworICAgIC8vIFB1dCB0aGUgcmV0dXJuIHZhbHVlIGluIGRz
dC4gSW4gdGhlIGludGVycHJldGVyLCBvcF9yZXQgZG9lcyB0aGlzLgorICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKworI2lmIEVOQUJMRShDT0RFQkxPQ0tfU0FNUExJTkcpCisgICAg
ICAgIF9fIG1vdmxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jayks
IG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+Y29kZUJsb2NrU2xvdCgpKTsKKyNlbmRpZgorfQor
Cit2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1
bnNpZ25lZCBpLCBDb21waWxlT3BTdHJpY3RFcVR5cGUgdHlwZSkKK3sKKyAgICBib29sIG5lZ2F0
ZWQgPSAodHlwZSA9PSBPcE5TdHJpY3RFcSk7CisKKyAgICB1bnNpZ25lZCBkc3QgPSBpbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgc3JjMSA9IGluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKKyAgICB1bnNpZ25lZCBzcmMyID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwor
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgWDg2OjplYXgsIHNyYzIsIFg4Njo6
ZWR4LCBpKTsKKworICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6
ZWF4KTsKKyAgICBKbXBTcmMgZmlyc3ROb3RJbW1lZGlhdGUgPSBfXyBqZSgpOworICAgIF9fIHRl
c3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWR4KTsKKyAgICBKbXBTcmMgc2Vj
b25kTm90SW1tZWRpYXRlID0gX18gamUoKTsKKworICAgIF9fIGNtcGxfcnIoWDg2OjplZHgsIFg4
Njo6ZWF4KTsKKyAgICBpZiAobmVnYXRlZCkKKyAgICAgICAgX18gc2V0bmVfcihYODY6OmVheCk7
CisgICAgZWxzZQorICAgICAgICBfXyBzZXRlX3IoWDg2OjplYXgpOworICAgIF9fIG1vdnpibF9y
cihYODY6OmVheCwgWDg2OjplYXgpOworICAgIGVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUoWDg2Ojpl
YXgpOworICAgICAgICAgICAgCisgICAgSm1wU3JjIGJvdGhXZXJlSW1tZWRpYXRlcyA9IF9fIGpt
cCgpOworCisgICAgX18gbGluayhmaXJzdE5vdEltbWVkaWF0ZSwgX18gbGFiZWwoKSk7CisKKyAg
ICAvLyBjaGVjayB0aGF0IGVkeCBpcyBpbW1lZGlhdGUgYnV0IG5vdCB0aGUgemVybyBpbW1lZGlh
dGUKKyAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVkeCk7Cisg
ICAgX18gc2V0el9yKFg4Njo6ZWN4KTsKKyAgICBfXyBtb3Z6YmxfcnIoWDg2OjplY3gsIFg4Njo6
ZWN4KTsgLy8gZWN4IGlzIG5vdyAxIGlmIGVkeCB3YXMgbm9uaW1tZWRpYXRlCisgICAgX18gY21w
bF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSwgWDg2OjplZHgp
OworICAgIF9fIHNldGVfcihYODY6OmVkeCk7CisgICAgX18gbW92emJsX3JyKFg4Njo6ZWR4LCBY
ODY6OmVkeCk7IC8vIGVkeCBpcyBub3cgMSBpZiBlZHggd2FzIHRoZSAwIGltbWVkaWF0ZQorICAg
IF9fIG9ybF9ycihYODY6OmVjeCwgWDg2OjplZHgpOworCisgICAgbV9zbG93Q2FzZXMuYXBwZW5k
KFNsb3dDYXNlRW50cnkoX18gam56KCksIGkpKTsKKworICAgIF9fIG1vdmxfaTMycihhc0ludGVn
ZXIoanNCb29sZWFuKG5lZ2F0ZWQpKSwgWDg2OjplYXgpOworCisgICAgSm1wU3JjIGZpcnN0V2Fz
Tm90SW1tZWRpYXRlID0gX18gam1wKCk7CisKKyAgICBfXyBsaW5rKHNlY29uZE5vdEltbWVkaWF0
ZSwgX18gbGFiZWwoKSk7CisgICAgLy8gY2hlY2sgdGhhdCBlYXggaXMgbm90IHRoZSB6ZXJvIGlt
bWVkaWF0ZSAod2Uga25vdyBpdCBtdXN0IGJlIGltbWVkaWF0ZSkKKyAgICBfXyBjbXBsX2kzMnIo
YXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkpLCBYODY6OmVheCk7CisgICAg
bV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gamUoKSwgaSkpOworCisgICAgX18g
bW92bF9pMzJyKGFzSW50ZWdlcihqc0Jvb2xlYW4obmVnYXRlZCkpLCBYODY6OmVheCk7CisKKyAg
ICBfXyBsaW5rKGJvdGhXZXJlSW1tZWRpYXRlcywgX18gbGFiZWwoKSk7CisgICAgX18gbGluayhm
aXJzdFdhc05vdEltbWVkaWF0ZSwgX18gbGFiZWwoKSk7CisKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd1NjcmlwdENoZWNrKHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgpCit7CisgICAgX18gc3VibF9pOHIoMSwgWDg2Ojplc2kpOworICAgIEpt
cFNyYyBza2lwVGltZW91dCA9IF9fIGpuZSgpOworICAgIGVtaXRDVElDYWxsKGJ5dGVjb2RlSW5k
ZXgsIEludGVycHJldGVyOjpjdGlfdGltZW91dF9jaGVjayk7CisKKyAgICBlbWl0R2V0Q1RJUGFy
YW0oQ1RJX0FSR1NfZ2xvYmFsRGF0YSwgWDg2OjplY3gpOworICAgIF9fIG1vdmxfbXIoRklFTERf
T0ZGU0VUKEpTR2xvYmFsRGF0YSwgaW50ZXJwcmV0ZXIpLCBYODY6OmVjeCwgWDg2OjplY3gpOwor
ICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEludGVycHJldGVyLCBtX3RpY2tzVW50aWxOZXh0
VGltZW91dENoZWNrKSwgWDg2OjplY3gsIFg4Njo6ZXNpKTsKKyAgICBfXyBsaW5rKHNraXBUaW1l
b3V0LCBfXyBsYWJlbCgpKTsKKworICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKK30KKwor
LyoKKyAgVGhpcyBpcyByZXF1aXJlZCBzaW5jZSBudW1iZXIgcmVwcmVzZW50YXRpb24gaXMgY2Fu
b25pY2FsIC0gdmFsdWVzIHJlcHJlc2VudGFibGUgYXMgYSBKU0ltbWVkaWF0ZSBzaG91bGQgbm90
IGJlIHN0b3JlZCBpbiBhIEpTTnVtYmVyQ2VsbC4KKyAgCisgIEluIHRoZSBjb21tb24gY2FzZSwg
dGhlIGRvdWJsZSB2YWx1ZSBmcm9tICd4bW1Tb3VyY2UnIGlzIHdyaXR0ZW4gdG8gdGhlIHJldXNh
YmxlIEpTTnVtYmVyQ2VsbCBwb2ludGVkIHRvIGJ5ICdqc051bWJlckNlbGwnLCB0aGVuICdqc051
bWJlckNlbGwnCisgIGlzIHdyaXR0ZW4gdG8gdGhlIG91dHB1dCBTRiBSZWdpc3RlciAnZHN0Jywg
YW5kIHRoZW4gYSBqdW1wIGlzIHBsYW50ZWQgKHN0b3JlZCBpbnRvICp3cm90ZUpTTnVtYmVyQ2Vs
bCkuCisgIAorICBIb3dldmVyIGlmIHRoZSB2YWx1ZSBmcm9tIHhtbVNvdXJjZSBpcyByZXByZXNl
bnRhYmxlIGFzIGEgSlNJbW1lZGlhdGUsIHRoZW4gdGhlIEpTSW1tZWRpYXRlIHZhbHVlIHdpbGwg
YmUgd3JpdHRlbiB0byB0aGUgb3V0cHV0LCBhbmQgZmxvdworICBjb250cm9sIHdpbGwgZmFsbCB0
aHJvdWdoIGZyb20gdGhlIGNvZGUgcGxhbnRlZC4KKyovCit2b2lkIEpJVDo6cHV0RG91YmxlUmVz
dWx0VG9KU051bWJlckNlbGxPckpTSW1tZWRpYXRlKFg4Njo6WE1NUmVnaXN0ZXJJRCB4bW1Tb3Vy
Y2UsIFg4Njo6UmVnaXN0ZXJJRCBqc051bWJlckNlbGwsIHVuc2lnbmVkIGRzdCwgSm1wU3JjKiB3
cm90ZUpTTnVtYmVyQ2VsbCwgIFg4Njo6WE1NUmVnaXN0ZXJJRCB0ZW1wWG1tLCBYODY6OlJlZ2lz
dGVySUQgdGVtcFJlZzEsIFg4Njo6UmVnaXN0ZXJJRCB0ZW1wUmVnMikKK3sKKyAgICAvLyBjb252
ZXJ0IChkb3VibGUgLT4gSlNJbW1lZGlhdGUgLT4gZG91YmxlKSwgYW5kIGNoZWNrIGlmIHRoZSB2
YWx1ZSBpcyB1bmNoYW5nZWQgLSBpbiB3aGljaCBjYXNlIHRoZSB2YWx1ZSBpcyByZXByZXNlbnRh
YmxlIGFzIGEgSlNJbW1lZGlhdGUuCisgICAgX18gY3Z0dHNkMnNpX3JyKHhtbVNvdXJjZSwgdGVt
cFJlZzEpOworICAgIF9fIGFkZGxfcnIodGVtcFJlZzEsIHRlbXBSZWcxKTsKKyAgICBfXyBzYXJs
X2k4cigxLCB0ZW1wUmVnMSk7CisgICAgX18gY3Z0c2kyc2RfcnIodGVtcFJlZzEsIHRlbXBYbW0p
OworICAgIC8vIENvbXBhcmUgJiBicmFuY2ggaWYgaW1tZWRpYXRlLiAKKyAgICBfXyB1Y29taXNf
cnIodGVtcFhtbSwgeG1tU291cmNlKTsKKyAgICBKbXBTcmMgcmVzdWx0SXNJbW0gPSBfXyBqZSgp
OworICAgIEptcERzdCByZXN1bHRMb29rZWRMaWtlSW1tQnV0QWN0dWFsbHlJc250ID0gX18gbGFi
ZWwoKTsKKyAgICAKKyAgICAvLyBTdG9yZSB0aGUgcmVzdWx0IHRvIHRoZSBKU051bWJlckNlbGwg
YW5kIGp1bXAuCisgICAgX18gbW92c2Rfcm0oeG1tU291cmNlLCBGSUVMRF9PRkZTRVQoSlNOdW1i
ZXJDZWxsLCBtX3ZhbHVlKSwganNOdW1iZXJDZWxsKTsKKyAgICBpZiAoanNOdW1iZXJDZWxsICE9
IFg4Njo6ZWF4KQorICAgICAgICBfXyBtb3ZsX3JyKGpzTnVtYmVyQ2VsbCwgWDg2OjplYXgpOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAqd3JvdGVKU051bWJlckNlbGwg
PSBfXyBqbXAoKTsKKworICAgIF9fIGxpbmsocmVzdWx0SXNJbW0sIF9fIGxhYmVsKCkpOworICAg
IC8vIHZhbHVlID09IChkb3VibGUpKEpTSW1tZWRpYXRlKXZhbHVlLi4uIG9yIGF0IGxlYXN0LCBp
dCBsb29rcyB0aGF0IHdheS4uLgorICAgIC8vIHVjb21pIHdpbGwgcmVwb3J0IHRoYXQgKDAgPT0g
LTApLCBhbmQgd2lsbCByZXBvcnQgdHJ1ZSBpZiBlaXRoZXIgaW5wdXQgaW4gTmFOIChyZXN1bHQg
aXMgdW5vcmRlcmVkKS4KKyAgICBfXyBsaW5rKF9fIGpwKCksIHJlc3VsdExvb2tlZExpa2VJbW1C
dXRBY3R1YWxseUlzbnQpOyAvLyBBY3R1YWxseSB3YXMgYSBOYU4KKyAgICBfXyBwZXh0cndfaXJy
KDMsIHhtbVNvdXJjZSwgdGVtcFJlZzIpOworICAgIF9fIGNtcGxfaTMycigweDgwMDAsIHRlbXBS
ZWcyKTsKKyAgICBfXyBsaW5rKF9fIGplKCksIHJlc3VsdExvb2tlZExpa2VJbW1CdXRBY3R1YWxs
eUlzbnQpOyAvLyBBY3R1YWxseSB3YXMgLTAKKyAgICAvLyBZZXMgaXQgcmVhbGx5IHJlYWxseSBy
ZWFsbHkgaXMgcmVwcmVzZW50YWJsZSBhcyBhIEpTSW1tZWRpYXRlLgorICAgIGVtaXRGYXN0QXJp
dGhJbnRUb0ltbU5vQ2hlY2sodGVtcFJlZzEpOworICAgIGlmICh0ZW1wUmVnMSAhPSBYODY6OmVh
eCkKKyAgICAgICAgX18gbW92bF9ycih0ZW1wUmVnMSwgWDg2OjplYXgpOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmNvbXBpbGVCaW5hcnlBcml0aE9w
KE9wY29kZUlEIG9wY29kZUlELCB1bnNpZ25lZCBkc3QsIHVuc2lnbmVkIHNyYzEsIHVuc2lnbmVk
IHNyYzIsIE9wZXJhbmRUeXBlcyB0eXBlcywgdW5zaWduZWQgaSkKK3sKKyAgICBTdHJ1Y3R1cmUq
IG51bWJlclN0cnVjdHVyZSA9IG1fZ2xvYmFsRGF0YS0+bnVtYmVyU3RydWN0dXJlLmdldCgpOwor
ICAgIEptcFNyYyB3YXNKU051bWJlckNlbGwxOworICAgIEptcFNyYyB3YXNKU051bWJlckNlbGwx
YjsKKyAgICBKbXBTcmMgd2FzSlNOdW1iZXJDZWxsMjsKKyAgICBKbXBTcmMgd2FzSlNOdW1iZXJD
ZWxsMmI7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCBYODY6OmVheCwgc3Jj
MiwgWDg2OjplZHgsIGkpOworCisgICAgaWYgKHR5cGVzLnNlY29uZCgpLmlzUmV1c2FibGUoKSAm
JiBpc1NTRTJQcmVzZW50KCkpIHsKKyAgICAgICAgQVNTRVJUKHR5cGVzLnNlY29uZCgpLm1pZ2h0
QmVOdW1iZXIoKSk7CisKKyAgICAgICAgLy8gQ2hlY2sgb3AyIGlzIGEgbnVtYmVyCisgICAgICAg
IF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ0JpdFR5cGVJbnRlZ2VyLCBYODY6OmVkeCk7
CisgICAgICAgIEptcFNyYyBvcDJpbW0gPSBfXyBqbmUoKTsKKyAgICAgICAgaWYgKCF0eXBlcy5z
ZWNvbmQoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkgeworICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKFg4Njo6ZWR4LCBpLCBzcmMyKTsKKyAgICAgICAgICAgIF9fIGNtcGxf
aTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihudW1iZXJTdHJ1Y3R1cmUpLCBGSUVMRF9P
RkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIG1fc2xv
d0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyAoMSkgSW4gdGhpcyBjYXNlIHNyYzIgaXMgYSByZXVzYWJsZSBudW1iZXIgY2Vs
bC4KKyAgICAgICAgLy8gICAgIFNsb3cgY2FzZSBpZiBzcmMxIGlzIG5vdCBhIG51bWJlciB0eXBl
LgorICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwg
WDg2OjplYXgpOworICAgICAgICBKbXBTcmMgb3AxaW1tID0gX18gam5lKCk7CisgICAgICAgIGlm
ICghdHlwZXMuZmlyc3QoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkgeworICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFg4Njo6ZWF4LCBpLCBzcmMxKTsKKyAgICAgICAgICAg
IF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihudW1iZXJTdHJ1Y3R1cmUp
LCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4KTsKKyAgICAgICAg
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyAoMWEpIGlmIHdlIGdldCBoZXJlLCBzcmMxIGlzIGFsc28gYSBu
dW1iZXIgY2VsbAorICAgICAgICBfXyBtb3ZzZF9tcihGSUVMRF9PRkZTRVQoSlNOdW1iZXJDZWxs
LCBtX3ZhbHVlKSwgWDg2OjplYXgsIFg4Njo6eG1tMCk7CisgICAgICAgIEptcFNyYyBsb2FkZWRE
b3VibGUgPSBfXyBqbXAoKTsKKyAgICAgICAgLy8gKDFiKSBpZiB3ZSBnZXQgaGVyZSwgc3JjMSBp
cyBhbiBpbW1lZGlhdGUKKyAgICAgICAgX18gbGluayhvcDFpbW0sIF9fIGxhYmVsKCkpOworICAg
ICAgICBlbWl0RmFzdEFyaXRoSW1tVG9JbnQoWDg2OjplYXgpOworICAgICAgICBfXyBjdnRzaTJz
ZF9ycihYODY6OmVheCwgWDg2Ojp4bW0wKTsKKyAgICAgICAgLy8gKDFjKSAKKyAgICAgICAgX18g
bGluayhsb2FkZWREb3VibGUsIF9fIGxhYmVsKCkpOworICAgICAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfYWRkKQorICAgICAgICAgICAgX18gYWRkc2RfbXIoRklFTERfT0ZGU0VUKEpTTnVtYmVyQ2Vs
bCwgbV92YWx1ZSksIFg4Njo6ZWR4LCBYODY6OnhtbTApOworICAgICAgICBlbHNlIGlmIChvcGNv
ZGVJRCA9PSBvcF9zdWIpCisgICAgICAgICAgICBfXyBzdWJzZF9tcihGSUVMRF9PRkZTRVQoSlNO
dW1iZXJDZWxsLCBtX3ZhbHVlKSwgWDg2OjplZHgsIFg4Njo6eG1tMCk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX211bCk7CisgICAgICAgICAgICBf
XyBtdWxzZF9tcihGSUVMRF9PRkZTRVQoSlNOdW1iZXJDZWxsLCBtX3ZhbHVlKSwgWDg2OjplZHgs
IFg4Njo6eG1tMCk7CisgICAgICAgIH0KKworICAgICAgICBwdXREb3VibGVSZXN1bHRUb0pTTnVt
YmVyQ2VsbE9ySlNJbW1lZGlhdGUoWDg2Ojp4bW0wLCBYODY6OmVkeCwgZHN0LCAmd2FzSlNOdW1i
ZXJDZWxsMiwgWDg2Ojp4bW0xLCBYODY6OmVjeCwgWDg2OjplYXgpOworICAgICAgICB3YXNKU051
bWJlckNlbGwyYiA9IF9fIGptcCgpOworCisgICAgICAgIC8vICgyKSBUaGlzIGhhbmRsZXMgY2Fz
ZXMgd2hlcmUgc3JjMiBpcyBhbiBpbW1lZGlhdGUgbnVtYmVyLgorICAgICAgICAvLyAgICAgVHdv
IHNsb3cgY2FzZXMgLSBlaXRoZXIgc3JjMSBpc24ndCBhbiBpbW1lZGlhdGUsIG9yIHRoZSBzdWJ0
cmFjdCBvdmVyZmxvd3MuCisgICAgICAgIF9fIGxpbmsob3AyaW1tLCBfXyBsYWJlbCgpKTsKKyAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKKyAgICB9IGVs
c2UgaWYgKHR5cGVzLmZpcnN0KCkuaXNSZXVzYWJsZSgpICYmIGlzU1NFMlByZXNlbnQoKSkgewor
ICAgICAgICBBU1NFUlQodHlwZXMuZmlyc3QoKS5taWdodEJlTnVtYmVyKCkpOworCisgICAgICAg
IC8vIENoZWNrIG9wMSBpcyBhIG51bWJlcgorICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRp
YXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgWDg2OjplYXgpOworICAgICAgICBKbXBTcmMgb3AxaW1t
ID0gX18gam5lKCk7CisgICAgICAgIGlmICghdHlwZXMuZmlyc3QoKS5kZWZpbml0ZWx5SXNOdW1i
ZXIoKSkgeworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFg4Njo6ZWF4
LCBpLCBzcmMxKTsKKyAgICAgICAgICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVu
c2lnbmVkPihudW1iZXJTdHJ1Y3R1cmUpLCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVy
ZSksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVu
dHJ5KF9fIGpuZSgpLCBpKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyAoMSkgSW4gdGhpcyBj
YXNlIHNyYzEgaXMgYSByZXVzYWJsZSBudW1iZXIgY2VsbC4KKyAgICAgICAgLy8gICAgIFNsb3cg
Y2FzZSBpZiBzcmMyIGlzIG5vdCBhIG51bWJlciB0eXBlLgorICAgICAgICBfXyB0ZXN0bF9pMzJy
KEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgWDg2OjplZHgpOworICAgICAgICBKbXBT
cmMgb3AyaW1tID0gX18gam5lKCk7CisgICAgICAgIGlmICghdHlwZXMuc2Vjb25kKCkuZGVmaW5p
dGVseUlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChYODY6OmVkeCwgaSwgc3JjMik7CisgICAgICAgICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZD4obnVtYmVyU3RydWN0dXJlKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwg
bV9zdHJ1Y3R1cmUpLCBYODY6OmVkeCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQo
U2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gKDFh
KSBpZiB3ZSBnZXQgaGVyZSwgc3JjMiBpcyBhbHNvIGEgbnVtYmVyIGNlbGwKKyAgICAgICAgX18g
bW92c2RfbXIoRklFTERfT0ZGU0VUKEpTTnVtYmVyQ2VsbCwgbV92YWx1ZSksIFg4Njo6ZWR4LCBY
ODY6OnhtbTEpOworICAgICAgICBKbXBTcmMgbG9hZGVkRG91YmxlID0gX18gam1wKCk7CisgICAg
ICAgIC8vICgxYikgaWYgd2UgZ2V0IGhlcmUsIHNyYzIgaXMgYW4gaW1tZWRpYXRlCisgICAgICAg
IF9fIGxpbmsob3AyaW1tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgZW1pdEZhc3RBcml0aEltbVRv
SW50KFg4Njo6ZWR4KTsKKyAgICAgICAgX18gY3Z0c2kyc2RfcnIoWDg2OjplZHgsIFg4Njo6eG1t
MSk7CisgICAgICAgIC8vICgxYykgCisgICAgICAgIF9fIGxpbmsobG9hZGVkRG91YmxlLCBfXyBs
YWJlbCgpKTsKKyAgICAgICAgX18gbW92c2RfbXIoRklFTERfT0ZGU0VUKEpTTnVtYmVyQ2VsbCwg
bV92YWx1ZSksIFg4Njo6ZWF4LCBYODY6OnhtbTApOworICAgICAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfYWRkKQorICAgICAgICAgICAgX18gYWRkc2RfcnIoWDg2Ojp4bW0xLCBYODY6OnhtbTApOwor
ICAgICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9zdWIpCisgICAgICAgICAgICBfXyBzdWJz
ZF9ycihYODY6OnhtbTEsIFg4Njo6eG1tMCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
QVNTRVJUKG9wY29kZUlEID09IG9wX211bCk7CisgICAgICAgICAgICBfXyBtdWxzZF9ycihYODY6
OnhtbTEsIFg4Njo6eG1tMCk7CisgICAgICAgIH0KKyAgICAgICAgX18gbW92c2Rfcm0oWDg2Ojp4
bW0wLCBGSUVMRF9PRkZTRVQoSlNOdW1iZXJDZWxsLCBtX3ZhbHVlKSwgWDg2OjplYXgpOworICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICAgICAgcHV0RG91YmxlUmVz
dWx0VG9KU051bWJlckNlbGxPckpTSW1tZWRpYXRlKFg4Njo6eG1tMCwgWDg2OjplYXgsIGRzdCwg
Jndhc0pTTnVtYmVyQ2VsbDEsIFg4Njo6eG1tMSwgWDg2OjplY3gsIFg4Njo6ZWR4KTsKKyAgICAg
ICAgd2FzSlNOdW1iZXJDZWxsMWIgPSBfXyBqbXAoKTsKKworICAgICAgICAvLyAoMikgVGhpcyBo
YW5kbGVzIGNhc2VzIHdoZXJlIHNyYzEgaXMgYW4gaW1tZWRpYXRlIG51bWJlci4KKyAgICAgICAg
Ly8gICAgIFR3byBzbG93IGNhc2VzIC0gZWl0aGVyIHNyYzIgaXNuJ3QgYW4gaW1tZWRpYXRlLCBv
ciB0aGUgc3VidHJhY3Qgb3ZlcmZsb3dzLgorICAgICAgICBfXyBsaW5rKG9wMWltbSwgX18gbGFi
ZWwoKSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVkeCwgaSk7
CisgICAgfSBlbHNlCisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bXMoWDg2Ojpl
YXgsIFg4Njo6ZWR4LCBpKTsKKworICAgIGlmIChvcGNvZGVJRCA9PSBvcF9hZGQpIHsKKyAgICAg
ICAgZW1pdEZhc3RBcml0aERlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKKyAgICAgICAgX18gYWRk
bF9ycihYODY6OmVkeCwgWDg2OjplYXgpOworICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xv
d0Nhc2VFbnRyeShfXyBqbygpLCBpKSk7CisgICAgfSBlbHNlICBpZiAob3Bjb2RlSUQgPT0gb3Bf
c3ViKSB7CisgICAgICAgIF9fIHN1YmxfcnIoWDg2OjplZHgsIFg4Njo6ZWF4KTsKKyAgICAgICAg
bV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam8oKSwgaSkpOworICAgICAgICBl
bWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUoWDg2OjplYXgpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9tdWwpOworICAgICAgICAvLyBjb252ZXJ0IGVheCAm
IGVkeCBmcm9tIEpTSW1tZWRpYXRlcyB0byBpbnRzLCBhbmQgY2hlY2sgaWYgZWl0aGVyIGFyZSB6
ZXJvCisgICAgICAgIGVtaXRGYXN0QXJpdGhJbW1Ub0ludChYODY6OmVkeCk7CisgICAgICAgIEpt
cFNyYyBvcDFaZXJvID0gZW1pdEZhc3RBcml0aERlVGFnSW1tZWRpYXRlSnVtcElmWmVybyhYODY6
OmVheCk7CisgICAgICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWR4LCBYODY6OmVkeCk7CisgICAgICAg
IEptcFNyYyBvcDJOb25aZXJvID0gX18gam5lKCk7CisgICAgICAgIF9fIGxpbmsob3AxWmVybywg
X18gbGFiZWwoKSk7CisgICAgICAgIC8vIGlmIGVpdGhlciBpbnB1dCBpcyB6ZXJvLCBhZGQgdGhl
IHR3byB0b2dldGhlciwgYW5kIGNoZWNrIGlmIHRoZSByZXN1bHQgaXMgPCAwLgorICAgICAgICAv
LyBJZiBpdCBpcywgd2UgaGF2ZSBhIHByb2JsZW0gKE4gPCAwKSwgKE4gKiAwKSA9PSAtMCwgbm90
IHJlcHJlc2VudGF0YmxlIGFzIGEgSlNJbW1lZGlhdGUuIAorICAgICAgICBfXyBtb3ZsX3JyKFg4
Njo6ZWF4LCBYODY6OmVjeCk7CisgICAgICAgIF9fIGFkZGxfcnIoWDg2OjplZHgsIFg4Njo6ZWN4
KTsKKyAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18ganMoKSwgaSkp
OworICAgICAgICAvLyBTa2lwIHRoZSBhYm92ZSBjaGVjayBpZiBuZWl0aGVyIGlucHV0IGlzIHpl
cm8KKyAgICAgICAgX18gbGluayhvcDJOb25aZXJvLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgX18g
aW11bGxfcnIoWDg2OjplZHgsIFg4Njo6ZWF4KTsKKyAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5k
KFNsb3dDYXNlRW50cnkoX18gam8oKSwgaSkpOworICAgICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJ
bW1lZGlhdGUoWDg2OjplYXgpOworICAgIH0KKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisKKyAgICBpZiAodHlwZXMuc2Vjb25kKCkuaXNSZXVzYWJsZSgpICYmIGlzU1NFMlByZXNl
bnQoKSkgeworICAgICAgICBfXyBsaW5rKHdhc0pTTnVtYmVyQ2VsbDIsIF9fIGxhYmVsKCkpOwor
ICAgICAgICBfXyBsaW5rKHdhc0pTTnVtYmVyQ2VsbDJiLCBfXyBsYWJlbCgpKTsKKyAgICB9Cisg
ICAgZWxzZSBpZiAodHlwZXMuZmlyc3QoKS5pc1JldXNhYmxlKCkgJiYgaXNTU0UyUHJlc2VudCgp
KSB7CisgICAgICAgIF9fIGxpbmsod2FzSlNOdW1iZXJDZWxsMSwgX18gbGFiZWwoKSk7CisgICAg
ICAgIF9fIGxpbmsod2FzSlNOdW1iZXJDZWxsMWIsIF9fIGxhYmVsKCkpOworICAgIH0KK30KKwor
dm9pZCBKSVQ6OmNvbXBpbGVCaW5hcnlBcml0aE9wU2xvd0Nhc2UoT3Bjb2RlSUQgb3Bjb2RlSUQs
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGRzdCwgdW5z
aWduZWQgc3JjMSwgdW5zaWduZWQgc3JjMiwgT3BlcmFuZFR5cGVzIHR5cGVzLCB1bnNpZ25lZCBp
KQoreworICAgIEptcERzdCBoZXJlID0gX18gbGFiZWwoKTsKKyAgICBfXyBsaW5rKGl0ZXItPmZy
b20sIGhlcmUpOworICAgIGlmICh0eXBlcy5zZWNvbmQoKS5pc1JldXNhYmxlKCkgJiYgaXNTU0Uy
UHJlc2VudCgpKSB7CisgICAgICAgIGlmICghdHlwZXMuZmlyc3QoKS5kZWZpbml0ZWx5SXNOdW1i
ZXIoKSkgeworICAgICAgICAgICAgaWYgKGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKCsraXRlciwg
c3JjMSkpCisgICAgICAgICAgICAgICAgKytpdGVyOworICAgICAgICAgICAgX18gbGluayhpdGVy
LT5mcm9tLCBoZXJlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXR5cGVzLnNlY29uZCgpLmRl
ZmluaXRlbHlJc051bWJlcigpKSB7CisgICAgICAgICAgICBpZiAobGlua1Nsb3dDYXNlSWZOb3RK
U0NlbGwoKytpdGVyLCBzcmMyKSkKKyAgICAgICAgICAgICAgICArK2l0ZXI7CisgICAgICAgICAg
ICBfXyBsaW5rKGl0ZXItPmZyb20sIGhlcmUpOworICAgICAgICB9CisgICAgICAgIF9fIGxpbmso
KCsraXRlciktPmZyb20sIGhlcmUpOworICAgIH0gZWxzZSBpZiAodHlwZXMuZmlyc3QoKS5pc1Jl
dXNhYmxlKCkgJiYgaXNTU0UyUHJlc2VudCgpKSB7CisgICAgICAgIGlmICghdHlwZXMuZmlyc3Qo
KS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkgeworICAgICAgICAgICAgaWYgKGxpbmtTbG93Q2FzZUlm
Tm90SlNDZWxsKCsraXRlciwgc3JjMSkpCisgICAgICAgICAgICAgICAgKytpdGVyOworICAgICAg
ICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBoZXJlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IXR5cGVzLnNlY29uZCgpLmRlZmluaXRlbHlJc051bWJlcigpKSB7CisgICAgICAgICAgICBpZiAo
bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoKytpdGVyLCBzcmMyKSkKKyAgICAgICAgICAgICAgICAr
K2l0ZXI7CisgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIGhlcmUpOworICAgICAgICB9
CisgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIGhlcmUpOworICAgIH0gZWxzZQorICAg
ICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBoZXJlKTsKKworICAgIC8vIGFkZGl0aW9uYWwg
ZW50cnkgcG9pbnQgdG8gaGFuZGxlIC0wIGNhc2VzLgorICAgIGlmIChvcGNvZGVJRCA9PSBvcF9t
dWwpCisgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIGhlcmUpOworCisgICAgZW1pdFB1
dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgMCwgWDg2OjplY3gpOworICAgIGVtaXRQ
dXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzIsIDQsIFg4Njo6ZWN4KTsKKyAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfYWRkKQorICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6
Y3RpX29wX2FkZCk7CisgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3Bfc3ViKQorICAgICAgICBl
bWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3N1Yik7CisgICAgZWxzZSB7CisgICAg
ICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9tdWwpOworICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJ
bnRlcnByZXRlcjo6Y3RpX29wX211bCk7CisgICAgfQorICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQoreworICAg
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVn
aW4oKTsKKyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50ID0gbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucy5zaXplKCk7CisKKyAgICB1bnNpZ25lZCBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9u
SW5kZXggPSAwOworICAgIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4ID0gMDsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0cnVjdGlvbkNvdW50OyApIHsKKyAgICAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShtX2ludGVycHJldGVyLT5pc09wY29kZShpbnN0cnVjdGlvbltpXS51
Lm9wY29kZSksICJwcml2YXRlQ29tcGlsZU1haW5QYXNzIGdvbmUgYmFkIEAgJWQiLCBpKTsKKwor
I2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCisgICAgICAgIGlmIChpID4gMCkgLy8gQXZvaWQg
dGhlIG92ZXJoZWFkIG9mIHNhbXBsaW5nIG9wX2VudGVyIHR3aWNlLgorICAgICAgICAgICAgX18g
bW92bF9pMzJtKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKGluc3RydWN0
aW9uICsgaSksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKKyNlbmRp
ZgorCisgICAgICAgIG1fbGFiZWxzW2ldID0gX18gbGFiZWwoKTsKKyAgICAgICAgT3Bjb2RlSUQg
b3Bjb2RlSUQgPSBtX2ludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbltpXS51Lm9w
Y29kZSk7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICAgICAgY2FzZSBvcF9tb3Y6
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNyYyA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KHNyYykpCisgICAgICAgICAgICAgICAgX18gbW92bF9pMzJyKGFzSW50ZWdlcihtX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQoc3JjKSksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgWDg2OjplYXgsIGkpOworICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfYWRkOiB7CisgICAgICAgICAgICB1bnNpZ25lZCBkc3QgPSBpbnN0
cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgc3JjMSA9IGlu
c3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25lZCBzcmMyID0g
aW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKKworICAgICAgICAgICAgaWYgKEpTVmFsdWUq
IHZhbHVlID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzEpKSB7CisgICAgICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBYODY6OmVheCwgaSk7CisgICAg
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKKyAg
ICAgICAgICAgICAgICBfXyBhZGRsX2kzMnIoZ2V0RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZSh2
YWx1ZSksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xv
d0Nhc2VFbnRyeShfXyBqbygpLCBpKSk7CisgICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgfSBlbHNlIGlmIChKU1ZhbHVlKiB2YWx1ZSA9IGdl
dENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMyKSkgeworICAgICAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgWDg2OjplYXgsIGkpOworICAgICAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7CisgICAgICAgICAgICAg
ICAgX18gYWRkbF9pMzJyKGdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlhdGUodmFsdWUpLCBYODY6
OmVheCk7CisgICAgICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnko
X18gam8oKSwgaSkpOworICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgT3BlcmFuZFR5cGVzIHR5
cGVzID0gT3BlcmFuZFR5cGVzOjpmcm9tSW50KGluc3RydWN0aW9uW2kgKyA0XS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgICAgIGlmICh0eXBlcy5maXJzdCgpLm1pZ2h0QmVOdW1iZXIoKSAmJiB0
eXBlcy5zZWNvbmQoKS5taWdodEJlTnVtYmVyKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbXBp
bGVCaW5hcnlBcml0aE9wKG9wX2FkZCwgaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwg
T3BlcmFuZFR5cGVzOjpmcm9tSW50KGluc3RydWN0aW9uW2kgKyA0XS51Lm9wZXJhbmQpLCBpKTsK
KyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdFB1dENUSUFy
Z0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2
OjplY3gpOworICAgICAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdp
c3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA0LCBYODY6OmVjeCk7CisgICAgICAg
ICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfYWRkKTsKKyAg
ICAgICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGkgKz0gNTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfZW5kOiB7CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3Bl
Q2hhaW4pCisgICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9v
cF9lbmQpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltp
ICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7CisgICAgICAgICAgICBfXyBwdXNobF9tKFJl
Z2lzdGVyRmlsZTo6UmV0dXJuUEMgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rlcikp
LCBYODY6OmVkaSk7CisgICAgICAgICAgICBfXyByZXQoKTsKKyAgICAgICAgICAgIGkgKz0gMjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfam1wOiB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5k
OworICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gam1wKCksIGkgKyAx
ICsgdGFyZ2V0KSk7CisgICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX3ByZV9pbmM6IHsKKyAgICAgICAgICAgIGludCBzcmNE
c3QgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOworICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmNEc3QsIFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7CisgICAgICAgICAgICBfXyBhZGRsX2k4
cihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKEpTSW1tZWRpYXRlOjpvbmVJbW1lZGlhdGUo
KSksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVu
dHJ5KF9fIGpvKCksIGkpKTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
RHN0KTsKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfbG9vcDogeworICAgICAgICAgICAgZW1pdFNsb3dTY3JpcHRDaGVj
ayhpKTsKKworICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZDsKKyAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGpt
cCgpLCBpICsgMSArIHRhcmdldCkpOworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9sb29wX2lmX2xlc3M6IHsKKyAgICAg
ICAgICAgIGVtaXRTbG93U2NyaXB0Q2hlY2soaSk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIHRh
cmdldCA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBKU1ZhbHVl
KiBzcmMyaW1tID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKGluc3RydWN0aW9uW2kg
KyAyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaWYgKHNyYzJpbW0pIHsKKyAgICAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQs
IFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1O
dW0oWDg2OjplZHgsIGkpOworICAgICAgICAgICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIo
c3JjMmltbSksIFg4Njo6ZWR4KTsKKyAgICAgICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChK
bXBUYWJsZShfXyBqbCgpLCBpICsgMyArIHRhcmdldCkpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2
OjplZHgsIGkpOworICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShY
ODY6OmVheCwgaSk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVt
KFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgICAgICBfXyBjbXBsX3JyKFg4Njo6ZWR4LCBYODY6
OmVheCk7CisgICAgICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gamwo
KSwgaSArIDMgKyB0YXJnZXQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkgKz0gNDsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9s
ZXNzZXE6IHsKKyAgICAgICAgICAgIGVtaXRTbG93U2NyaXB0Q2hlY2soaSk7CisKKyAgICAgICAg
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7CisgICAg
ICAgICAgICBKU1ZhbHVlKiBzcmMyaW1tID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJn
KGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaWYgKHNyYzJpbW0p
IHsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplZHgsIGkpOworICAgICAgICAgICAgICAgIF9fIGNtcGxf
aTMycihhc0ludGVnZXIoc3JjMmltbSksIFg4Njo6ZWR4KTsKKyAgICAgICAgICAgICAgICBtX2pt
cFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbGUoKSwgaSArIDMgKyB0YXJnZXQpKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
aW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAy
XS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOworICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEltbU51bShYODY6OmVkeCwgaSk7CisgICAgICAgICAgICAgICAgX18gY21wbF9y
cihYODY6OmVkeCwgWDg2OjplYXgpOworICAgICAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5k
KEptcFRhYmxlKF9fIGpsZSgpLCBpICsgMyArIHRhcmdldCkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9uZXdfb2JqZWN0OiB7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnBy
ZXRlcjo6Y3RpX29wX25ld19vYmplY3QpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0gMjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lk
OiB7CisgICAgICAgICAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHJlcGF0Y2ggYm90aCB0
aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVy
LAorICAgICAgICAgICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBs
b2FkZWQgaW50byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2Rl
CisgICAgICAgICAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3
YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KKworICAgICAgICAgICAgaW50IGJh
c2VWUmVnID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2VWUmVnLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNd
LnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOworCisgICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxv
Y2stPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25J
bmRleF0uYnl0ZWNvZGVJbmRleCA9PSBpKTsKKworICAgICAgICAgICAgLy8gSnVtcCB0byBhIHNs
b3cgY2FzZSBpZiBlaXRoZXIgdGhlIGJhc2Ugb2JqZWN0IGlzIGFuIGltbWVkaWF0ZSwgb3IgaWYg
dGhlIFN0cnVjdHVyZSBkb2VzIG5vdCBtYXRjaC4KKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChYODY6OmVheCwgaSwgYmFzZVZSZWcpOworCisgICAgICAgICAgICBKbXBE
c3QgaG90UGF0aEJlZ2luID0gX18gbGFiZWwoKTsKKyAgICAgICAgICAgIG1fcHJvcGVydHlBY2Nl
c3NDb21waWxhdGlvbkluZm9bcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5ob3RQYXRo
QmVnaW4gPSBob3RQYXRoQmVnaW47CisgICAgICAgICAgICArK3Byb3BlcnR5QWNjZXNzSW5zdHJ1
Y3Rpb25JbmRleDsKKworICAgICAgICAgICAgLy8gSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIGZv
bGxvd2luZyBpbnN0cnVjdGlvbiBwbGFudHMgYSAzMmJpdCBpbW1lZGlhdGUsIGluIG9yZGVyIHRo
YXQgaXQgY2FuIGJlIHBhdGNoZWQgb3Zlci4KKyAgICAgICAgICAgIF9fIGNtcGxfaTMybShyZXBh
dGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUsIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0
dXJlKSwgWDg2OjplYXgpOworICAgICAgICAgICAgQVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0RGlm
ZmVyZW5jZUJldHdlZW5MYWJlbHMoaG90UGF0aEJlZ2luLCBfXyBsYWJlbCgpKSA9PSByZXBhdGNo
T2Zmc2V0UHV0QnlJZFN0cnVjdHVyZSk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQo
U2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOworCisgICAgICAgICAgICAvLyBQbGFudCBhIGxv
YWQgZnJvbSBhIGJvZ3VzIG9mc2V0IGluIHRoZSBvYmplY3QncyBwcm9wZXJ0eSBtYXA7IHdlIHdp
bGwgcGF0Y2ggdGhpcyBsYXRlciwgaWYgaXQgaXMgdG8gYmUgdXNlZC4KKyAgICAgICAgICAgIF9f
IG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTT2JqZWN0LCBtX3Byb3BlcnR5U3RvcmFnZSksIFg4Njo6
ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICBfXyBtb3ZsX3JtKFg4Njo6ZWR4LCByZXBhdGNo
R2V0QnlJZERlZmF1bHRPZmZzZXQsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIEFTU0VSVChYODZB
c3NlbWJsZXI6OmdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKGhvdFBhdGhCZWdpbiwgX18gbGFi
ZWwoKSkgPT0gcmVwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCk7CisKKyAgICAg
ICAgICAgIGkgKz0gODsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfZ2V0X2J5X2lkOiB7CisgICAgICAgICAgICAvLyBBcyBmb3IgcHV0X2J5X2lkLCBnZXRf
YnlfaWQgcmVxdWlyZXMgdGhlIG9mZnNldCBvZiB0aGUgU3RydWN0dXJlIGFuZCB0aGUgb2Zmc2V0
IG9mIHRoZSBhY2Nlc3MgdG8gYmUgcmVwYXRjaGVkLgorICAgICAgICAgICAgLy8gQWRkaXRpb25h
bGx5LCBmb3IgZ2V0X2J5X2lkIHdlIG5lZWQgcmVwYXRjaCB0aGUgb2Zmc2V0IG9mIHRoZSBicmFu
Y2ggdG8gdGhlIHNsb3cgY2FzZSAod2UgcmVwYXRjaCB0aGlzIHRvIGp1bXAKKyAgICAgICAgICAg
IC8vIHRvIGFycmF5LWxlbmd0aCAvIHByb3RvdHlwZSBhY2Nlc3MgdHJhbnBvbGluZXMsIGFuZCBm
aW5hbGx5IHdlIGFsc28gdGhlIHRoZSBwcm9wZXJ0eS1tYXAgYWNjZXNzIG9mZnNldCBhcyBhIGxh
YmVsCisgICAgICAgICAgICAvLyB0byBqdW1wIGJhY2sgdG8gaWYgb25lIG9mIHRoZXNlIHRyYW1w
b2xpZXMgZmluZHMgYSBtYXRjaC4KKworICAgICAgICAgICAgaW50IGJhc2VWUmVnID0gaW5zdHJ1
Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZVZSZWcsIFg4Njo6ZWF4LCBpKTsKKworICAgICAgICAgICAgQVNTRVJUKG1fY29kZUJs
b2NrLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9u
SW5kZXhdLmJ5dGVjb2RlSW5kZXggPT0gaSk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChYODY6OmVheCwgaSwgYmFzZVZSZWcpOworCisgICAgICAgICAgICBKbXBE
c3QgaG90UGF0aEJlZ2luID0gX18gbGFiZWwoKTsKKyAgICAgICAgICAgIG1fcHJvcGVydHlBY2Nl
c3NDb21waWxhdGlvbkluZm9bcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5ob3RQYXRo
QmVnaW4gPSBob3RQYXRoQmVnaW47CisgICAgICAgICAgICArK3Byb3BlcnR5QWNjZXNzSW5zdHJ1
Y3Rpb25JbmRleDsKKworICAgICAgICAgICAgX18gY21wbF9pMzJtKHJlcGF0Y2hHZXRCeUlkRGVm
YXVsdFN0cnVjdHVyZSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVh
eCk7CisgICAgICAgICAgICBBU1NFUlQoWDg2QXNzZW1ibGVyOjpnZXREaWZmZXJlbmNlQmV0d2Vl
bkxhYmVscyhob3RQYXRoQmVnaW4sIF9fIGxhYmVsKCkpID09IHJlcGF0Y2hPZmZzZXRHZXRCeUlk
U3RydWN0dXJlKTsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5
KF9fIGpuZSgpLCBpKSk7CisgICAgICAgICAgICBBU1NFUlQoWDg2QXNzZW1ibGVyOjpnZXREaWZm
ZXJlbmNlQmV0d2VlbkxhYmVscyhob3RQYXRoQmVnaW4sIF9fIGxhYmVsKCkpID09IHJlcGF0Y2hP
ZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CisKKyAgICAgICAgICAgIF9fIG1vdmxfbXIo
RklFTERfT0ZGU0VUKEpTT2JqZWN0LCBtX3Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6
OmVheCk7CisgICAgICAgICAgICBfXyBtb3ZsX21yKHJlcGF0Y2hHZXRCeUlkRGVmYXVsdE9mZnNl
dCwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIEFTU0VSVChYODZBc3NlbWJsZXI6
OmdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKGhvdFBhdGhCZWdpbiwgX18gbGFiZWwoKSkgPT0g
cmVwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCk7CisgICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworCisgICAg
ICAgICAgICBpICs9IDg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIG9wX2luc3RhbmNlb2Y6IHsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOyAvLyB2YWx1ZQorICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVy
YW5kLCBYODY6OmVjeCwgaSk7IC8vIGJhc2VWYWwKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDRdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOyAvLyBw
cm90bworCisgICAgICAgICAgICAvLyBjaGVjayBpZiBhbnkgYXJlIGltbWVkaWF0ZXMKKyAgICAg
ICAgICAgIF9fIG9ybF9ycihYODY6OmVheCwgWDg2OjplY3gpOworICAgICAgICAgICAgX18gb3Js
X3JyKFg4Njo6ZWR4LCBYODY6OmVjeCk7CisgICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1t
ZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVjeCk7CisKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFw
cGVuZChTbG93Q2FzZUVudHJ5KF9fIGpueigpLCBpKSk7CisKKyAgICAgICAgICAgIC8vIGNoZWNr
IHRoYXQgYWxsIGFyZSBvYmplY3QgdHlwZSAtIHRoaXMgaXMgYSBiaXQgb2YgYSBiaXRoYWNrIHRv
IGF2b2lkIGV4Y2VzcyBicmFuY2hpbmc7CisgICAgICAgICAgICAvLyB3ZSBjaGVjayB0aGF0IHRo
ZSBzdW0gb2YgdGhlIHRocmVlIHR5cGUgY29kZXMgZnJvbSBTdHJ1Y3R1cmVzIGlzIGV4YWN0bHkg
MyAqIE9iamVjdFR5cGUsCisgICAgICAgICAgICAvLyB0aGlzIHdvcmtzIGJlY2F1c2UgTnVtYmVy
VHlwZSBhbmQgU3RyaW5nVHlwZSBhcmUgc21hbGxlcgorICAgICAgICAgICAgX18gbW92bF9pMzJy
KDMgKiBPYmplY3RUeXBlLCBYODY6OmVjeCk7CisgICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxE
X09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICAg
ICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6
OmVkeCwgWDg2OjplZHgpOworICAgICAgICAgICAgX18gc3VibF9tcihGSUVMRF9PRkZTRVQoU3Ry
dWN0dXJlLCBtX3R5cGVJbmZvLm1fdHlwZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7CisgICAgICAg
ICAgICBfXyBzdWJsX21yKEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV90eXBl
KSwgWDg2OjplZHgsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOyAvLyByZWxvYWQg
YmFzZVZhbAorICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0
cnVjdHVyZSksIFg4Njo6ZWR4LCBYODY6OmVkeCk7CisgICAgICAgICAgICBfXyBjbXBsX3JtKFg4
Njo6ZWN4LCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvLm1fdHlwZSksIFg4Njo6
ZWR4KTsKKworICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18g
am5lKCksIGkpKTsKKworICAgICAgICAgICAgLy8gY2hlY2sgdGhhdCBiYXNlVmFsJ3MgZmxhZ3Mg
aW5jbHVkZSBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgYnV0IG5vdCBPdmVycmlkZXNIYXNJbnN0YW5j
ZQorICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJ
bmZvLm1fZmxhZ3MpLCBYODY6OmVkeCwgWDg2OjplY3gpOworICAgICAgICAgICAgX18gYW5kbF9p
MzJyKEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IE92ZXJyaWRlc0hhc0luc3RhbmNlLCBYODY6OmVj
eCk7CisgICAgICAgICAgICBfXyBjbXBsX2kzMnIoSW1wbGVtZW50c0hhc0luc3RhbmNlLCBYODY6
OmVjeCk7CisKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9f
IGpuZSgpLCBpKSk7CisKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplY3gsIGkpOyAvLyByZWxvYWQgdmFsdWUKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDRdLnUub3Bl
cmFuZCwgWDg2OjplZHgsIGkpOyAvLyByZWxvYWQgcHJvdG8KKworICAgICAgICAgICAgLy8gb3B0
aW1pc3RpY2FsbHkgbG9hZCB0cnVlIHJlc3VsdAorICAgICAgICAgICAgX18gbW92bF9pMzJyKGFz
SW50ZWdlcihqc0Jvb2xlYW4odHJ1ZSkpLCBYODY6OmVheCk7CisKKyAgICAgICAgICAgIEptcERz
dCBsb29wID0gX18gbGFiZWwoKTsKKworICAgICAgICAgICAgLy8gbG9hZCB2YWx1ZSdzIHByb3Rv
dHlwZQorICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVj
dHVyZSksIFg4Njo6ZWN4LCBYODY6OmVjeCk7CisgICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxE
X09GRlNFVChTdHJ1Y3R1cmUsIG1fcHJvdG90eXBlKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgX18gY21wbF9ycihYODY6OmVjeCwgWDg2OjplZHgpOwor
ICAgICAgICAgICAgSm1wU3JjIGV4aXQgPSBfXyBqZSgpOworCisgICAgICAgICAgICBfXyBjbXBs
X2kzMnIoYXNJbnRlZ2VyKGpzTnVsbCgpKSwgWDg2OjplY3gpOworICAgICAgICAgICAgSm1wU3Jj
IGdvVG9Mb29wID0gX18gam5lKCk7CisgICAgICAgICAgICBfXyBsaW5rKGdvVG9Mb29wLCBsb29w
KTsKKworICAgICAgICAgICAgX18gbW92bF9pMzJyKGFzSW50ZWdlcihqc0Jvb2xlYW4oZmFsc2Up
KSwgWDg2OjplYXgpOworCisgICAgICAgICAgICBfXyBsaW5rKGV4aXQsIF9fIGxhYmVsKCkpOwor
CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51
Lm9wZXJhbmQpOworCisgICAgICAgICAgICBpICs9IDU7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX2RlbF9ieV9pZDogeworICAgICAgICAgICAgZW1pdFB1
dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwg
MCwgWDg2OjplY3gpOworICAgICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kXSk7CisgICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaWRl
bnQpLCA0KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bf
ZGVsX2J5X2lkKTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX211bDogeworICAgICAgICAgICAgdW5z
aWduZWQgZHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVu
c2lnbmVkIHNyYzEgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAg
dW5zaWduZWQgc3JjMiA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7CisKKyAgICAgICAg
ICAgIC8vIEZvciBub3csIG9ubHkgcGxhbnQgYSBmYXN0IGludCBjYXNlIGlmIHRoZSBjb25zdGFu
dCBvcGVyYW5kIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLgorICAgICAgICAgICAgSlNWYWx1ZSogc3Jj
MVZhbHVlID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzEpOworICAgICAgICAg
ICAgSlNWYWx1ZSogc3JjMlZhbHVlID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNy
YzIpOworICAgICAgICAgICAgaW50MzJfdCB2YWx1ZTsKKyAgICAgICAgICAgIGlmIChzcmMxVmFs
dWUgJiYgKCh2YWx1ZSA9IEpTSW1tZWRpYXRlOjppbnRWYWx1ZShzcmMxVmFsdWUpKSA+IDApKSB7
CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBYODY6OmVheCwg
aSk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4
LCBpKTsKKyAgICAgICAgICAgICAgICBlbWl0RmFzdEFyaXRoRGVUYWdJbW1lZGlhdGUoWDg2Ojpl
YXgpOworICAgICAgICAgICAgICAgIF9fIGltdWxsX2kzMnIoWDg2OjplYXgsIHZhbHVlLCBYODY6
OmVheCk7CisgICAgICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnko
X18gam8oKSwgaSkpOworICAgICAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhSZVRhZ0ltbWVkaWF0
ZShYODY6OmVheCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworICAgICAgICAgICAgfSBlbHNlIGlmIChzcmMyVmFsdWUgJiYgKCh2YWx1ZSA9IEpTSW1tZWRp
YXRlOjppbnRWYWx1ZShzcmMyVmFsdWUpKSA+IDApKSB7CisgICAgICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmMxLCBYODY6OmVheCwgaSk7CisgICAgICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgICAgICBl
bWl0RmFzdEFyaXRoRGVUYWdJbW1lZGlhdGUoWDg2OjplYXgpOworICAgICAgICAgICAgICAgIF9f
IGltdWxsX2kzMnIoWDg2OjplYXgsIHZhbHVlLCBYODY6OmVheCk7CisgICAgICAgICAgICAgICAg
bV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam8oKSwgaSkpOworICAgICAgICAg
ICAgICAgIGVtaXRGYXN0QXJpdGhSZVRhZ0ltbWVkaWF0ZShYODY6OmVheCk7CisgICAgICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgY29tcGlsZUJpbmFyeUFyaXRoT3Aob3BfbXVsLCBpbnN0cnVjdGlvbltp
ICsgMV0udS5vcGVyYW5kLCBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBpbnN0cnVjdGlv
bltpICsgM10udS5vcGVyYW5kLCBPcGVyYW5kVHlwZXM6OmZyb21JbnQoaW5zdHJ1Y3Rpb25baSAr
IDRdLnUub3BlcmFuZCksIGkpOworCisgICAgICAgICAgICBpICs9IDU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25ld19mdW5jOiB7CisgICAgICAgICAg
ICBGdW5jRGVjbE5vZGUqIGZ1bmMgPSAobV9jb2RlQmxvY2stPmZ1bmN0aW9uc1tpbnN0cnVjdGlv
bltpICsgMl0udS5vcGVyYW5kXSkuZ2V0KCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29u
c3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oZnVuYyksIDApOworICAgICAgICAgICAg
ZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXdfZnVuYyk7CisgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwor
ICAgICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9jYWxsOgorICAgICAgICBjYXNlIG9wX2NhbGxfZXZhbDoKKyAgICAgICAgY2Fz
ZSBvcF9jb25zdHJ1Y3Q6IHsKKyAgICAgICAgICAgIGNvbXBpbGVPcENhbGwob3Bjb2RlSUQsIGlu
c3RydWN0aW9uICsgaSwgaSwgY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgICAgICAgICBpICs9
IChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyA3IDogNSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9nbG9iYWxfdmFyOiB7CisgICAgICAgICAg
ICBKU1ZhcmlhYmxlT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1ZhcmlhYmxl
T2JqZWN0Kj4oaW5zdHJ1Y3Rpb25baSArIDJdLnUuanNDZWxsKTsKKyAgICAgICAgICAgIF9fIG1v
dmxfaTMycihhc0ludGVnZXIoZ2xvYmFsT2JqZWN0KSwgWDg2OjplYXgpOworICAgICAgICAgICAg
ZW1pdEdldFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIoWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAz
XS51Lm9wZXJhbmQsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDQ7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9nbG9iYWxf
dmFyOiB7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgIEpTVmFyaWFibGVPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IHN0YXRpY19jYXN0PEpTVmFyaWFibGVPYmplY3QqPihpbnN0cnVj
dGlvbltpICsgMV0udS5qc0NlbGwpOworICAgICAgICAgICAgX18gbW92bF9pMzJyKGFzSW50ZWdl
cihnbG9iYWxPYmplY3QpLCBYODY6OmVheCk7CisgICAgICAgICAgICBlbWl0UHV0VmFyaWFibGVP
YmplY3RSZWdpc3RlcihYODY6OmVkeCwgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9nZXRfc2NvcGVkX3ZhcjogeworICAgICAgICAgICAgaW50IHNr
aXAgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kICsgbV9jb2RlQmxvY2stPm5lZWRzRnVs
bFNjb3BlQ2hhaW47CisKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoUmVnaXN0
ZXJGaWxlOjpTY29wZUNoYWluLCBYODY6OmVheCwgaSk7CisgICAgICAgICAgICB3aGlsZSAoc2tp
cC0tKQorICAgICAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKFNjb3BlQ2hhaW5O
b2RlLCBuZXh0KSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKKworICAgICAgICAgICAgX18gbW92bF9t
cihGSUVMRF9PRkZTRVQoU2NvcGVDaGFpbk5vZGUsIG9iamVjdCksIFg4Njo6ZWF4LCBYODY6OmVh
eCk7CisgICAgICAgICAgICBlbWl0R2V0VmFyaWFibGVPYmplY3RSZWdpc3RlcihYODY6OmVheCwg
aW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplYXgpOworICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAg
ICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfcHV0X3Njb3BlZF92YXI6IHsKKyAgICAgICAgICAgIGludCBza2lwID0gaW5zdHJ1Y3Rp
b25baSArIDJdLnUub3BlcmFuZCArIG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluOwor
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFJlZ2lzdGVyRmlsZTo6U2NvcGVD
aGFpbiwgWDg2OjplZHgsIGkpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7CisgICAgICAgICAgICB3
aGlsZSAoc2tpcC0tKQorICAgICAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKFNj
b3BlQ2hhaW5Ob2RlLCBuZXh0KSwgWDg2OjplZHgsIFg4Njo6ZWR4KTsKKworICAgICAgICAgICAg
X18gbW92bF9tcihGSUVMRF9PRkZTRVQoU2NvcGVDaGFpbk5vZGUsIG9iamVjdCksIFg4Njo6ZWR4
LCBYODY6OmVkeCk7CisgICAgICAgICAgICBlbWl0UHV0VmFyaWFibGVPYmplY3RSZWdpc3RlcihY
ODY6OmVheCwgWDg2OjplZHgsIGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAg
ICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBvcF90ZWFyX29mZl9hY3RpdmF0aW9uOiB7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJv
bVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAwLCBYODY6OmVj
eCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3RlYXJf
b2ZmX2FjdGl2YXRpb24pOworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF90ZWFyX29mZl9hcmd1bWVudHM6IHsKKyAgICAg
ICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfdGVhcl9vZmZfYXJndW1l
bnRzKTsKKyAgICAgICAgICAgIGkgKz0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfcmV0OiB7CisgICAgICAgICAgICAvLyBXZSBjb3VsZCBKSVQgZ2Vu
ZXJhdGUgdGhlIGRlcmVmLCBvbmx5IGNhbGxpbmcgb3V0IHRvIEMgd2hlbiB0aGUgcmVmY291bnQg
aGl0cyB6ZXJvLgorICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNo
YWluKQorICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bf
cmV0X3Njb3BlQ2hhaW4pOworCisgICAgICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiAl
ZWF4LgorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7CisKKyAgICAgICAgICAgIC8vIEdyYWIgdGhlIHJl
dHVybiBhZGRyZXNzLgorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihSZWdpc3Rl
ckZpbGU6OlJldHVyblBDLCBYODY6OmVkeCwgaSk7CisKKyAgICAgICAgICAgIC8vIFJlc3RvcmUg
b3VyIGNhbGxlcidzICJyIi4KKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoUmVn
aXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSwgWDg2OjplZGksIGkpOworCisgICAgICAgICAgICAvLyBS
ZXR1cm4uCisgICAgICAgICAgICBfXyBwdXNobF9yKFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIF9f
IHJldCgpOworCisgICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIG9wX25ld19hcnJheTogeworICAgICAgICAgICAgX18gbGVhbF9t
cihzaXplb2YoUmVnaXN0ZXIpICogaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2Ojpl
ZGksIFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDApOwor
ICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGluc3RydWN0aW9uW2kgKyAzXS51Lm9w
ZXJhbmQsIDQpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9v
cF9uZXdfYXJyYXkpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVj
dGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZTogeworICAgICAgICAg
ICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kXSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3Rh
bnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaWRlbnQpLCAwKTsKKyAgICAgICAgICAgIGVt
aXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2ZSk7CisgICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAg
ICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9jb25zdHJ1Y3RfdmVyaWZ5OiB7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsKKworICAg
ICAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOwor
ICAgICAgICAgICAgSm1wU3JjIGlzSW1tZWRpYXRlID0gX18gam5lKCk7CisgICAgICAgICAgICBf
XyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgsIFg4
Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIGNtcGxfaTMybShPYmplY3RUeXBlLCBGSUVMRF9PRkZT
RVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvKSArIEZJRUxEX09GRlNFVChUeXBlSW5mbywgbV90eXBl
KSwgWDg2OjplY3gpOworICAgICAgICAgICAgSm1wU3JjIGlzT2JqZWN0ID0gX18gamUoKTsKKwor
ICAgICAgICAgICAgX18gbGluayhpc0ltbWVkaWF0ZSwgX18gbGFiZWwoKSk7CisgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4
Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBfXyBsaW5rKGlzT2JqZWN0LCBfXyBs
YWJlbCgpKTsKKworICAgICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfdmFsOiB7CisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCwg
aW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOworICAgICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgIGVt
aXRGYXN0QXJpdGhJbW1Ub0ludChYODY6OmVkeCk7CisgICAgICAgICAgICBfXyB0ZXN0bF9pMzJy
KEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNl
cy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOworICAgICAgICAgICAgX18gY21w
bF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG1faW50ZXJwcmV0ZXItPm1fanNBcnJh
eVZwdHIpLCBYODY6OmVheCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nh
c2VFbnRyeShfXyBqbmUoKSwgaSkpOworCisgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGFycmF5
OyBnZXQgdGhlIG1fc3RvcmFnZSBwb2ludGVyIGludG8gZWN4LCB0aGVuIGNoZWNrIGlmIHRoZSBp
bmRleCBpcyBiZWxvdyB0aGUgZmFzdCBjdXRvZmYKKyAgICAgICAgICAgIF9fIG1vdmxfbXIoRklF
TERfT0ZGU0VUKEpTQXJyYXksIG1fc3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7CisgICAg
ICAgICAgICBfXyBjbXBsX3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoSlNBcnJheSwgbV9mYXN0
QWNjZXNzQ3V0b2ZmKSwgWDg2OjplYXgpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5k
KFNsb3dDYXNlRW50cnkoX18gamJlKCksIGkpKTsKKworICAgICAgICAgICAgLy8gR2V0IHRoZSB2
YWx1ZSBmcm9tIHRoZSB2ZWN0b3IKKyAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VU
KEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pLCBYODY6OmVjeCwgWDg2OjplZHgsIHNpemVvZihK
U1ZhbHVlKiksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
aW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Jlc29sdmVfZnVuYzog
eworICAgICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyc1tpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kXSk7CisgICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaWRlbnQpLCAwKTsKKyAg
ICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2ZV9mdW5j
KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJd
LnUub3BlcmFuZCwgWDg2OjplZHgpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0gNDsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfc3ViOiB7CisgICAg
ICAgICAgICBjb21waWxlQmluYXJ5QXJpdGhPcChvcF9zdWIsIGluc3RydWN0aW9uW2kgKyAxXS51
Lm9wZXJhbmQsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIGluc3RydWN0aW9uW2kgKyAz
XS51Lm9wZXJhbmQsIE9wZXJhbmRUeXBlczo6ZnJvbUludChpbnN0cnVjdGlvbltpICsgNF0udS5v
cGVyYW5kKSwgaSk7CisgICAgICAgICAgICBpICs9IDU7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKKyAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4
LCBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7CisgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplZHgsIGkpOworICAgICAgICAgICAg
ZW1pdEZhc3RBcml0aEltbVRvSW50KFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIF9fIHRlc3RsX2kz
MnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIG1fc2xvd0Nh
c2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7CisgICAgICAgICAgICBfXyBj
bXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9pbnRlcnByZXRlci0+bV9qc0Fy
cmF5VnB0ciksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93
Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7CisKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gYXJy
YXk7IGdldCB0aGUgbV9zdG9yYWdlIHBvaW50ZXIgaW50byBlY3gsIHRoZW4gY2hlY2sgaWYgdGhl
IGluZGV4IGlzIGJlbG93IHRoZSBmYXN0IGN1dG9mZgorICAgICAgICAgICAgX18gbW92bF9tcihG
SUVMRF9PRkZTRVQoSlNBcnJheSwgbV9zdG9yYWdlKSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsKKyAg
ICAgICAgICAgIF9fIGNtcGxfcm0oWDg2OjplZHgsIEZJRUxEX09GRlNFVChKU0FycmF5LCBtX2Zh
c3RBY2Nlc3NDdXRvZmYpLCBYODY6OmVheCk7CisgICAgICAgICAgICBKbXBTcmMgaW5GYXN0VmVj
dG9yID0gX18gamEoKTsKKyAgICAgICAgICAgIC8vIE5vOyBvaCB3ZWxsLCBjaGVjayBpZiB0aGUg
YWNjZXNzIGlmIHdpdGhpbiB0aGUgdmVjdG9yIC0gaWYgc28sIHdlIG1heSBzdGlsbCBiZSBva2F5
LgorICAgICAgICAgICAgX18gY21wbF9ybShYODY6OmVkeCwgRklFTERfT0ZGU0VUKEFycmF5U3Rv
cmFnZSwgbV92ZWN0b3JMZW5ndGgpLCBYODY6OmVjeCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNl
cy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqYmUoKSwgaSkpOworCisgICAgICAgICAgICAvLyBU
aGlzIGlzIGEgd3JpdGUgdG8gdGhlIHNsb3cgcGFydCBvZiB0aGUgdmVjdG9yOyBmaXJzdCwgd2Ug
aGF2ZSB0byBjaGVjayBpZiB0aGlzIHdvdWxkIGJlIHRoZSBmaXJzdCB3cml0ZSB0byB0aGlzIGxv
Y2F0aW9uLgorICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBp
bml0aWFsIHdyaXRlIHRvIGFycmF5OyBpbmNyZW1lbnQgdGhlIHRoZSBudW1iZXIgb2YgaXRlbXMg
aW4gdGhlIGFycmF5LCBhbmQgcG90ZW50aWFsbHkgdXBkYXRlIGZhc3QgYWNjZXNzIGN1dG9mZi4g
CisgICAgICAgICAgICBfXyBjbXBsX2k4bSgwLCBGSUVMRF9PRkZTRVQoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSksIFg4Njo6ZWN4LCBYODY6OmVkeCwgc2l6ZW9mKEpTVmFsdWUqKSk7CisgICAg
ICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqZSgpLCBpKSk7CisK
KyAgICAgICAgICAgIC8vIEFsbCBnb29kIC0gcHV0IHRoZSB2YWx1ZSBpbnRvIHRoZSBhcnJheS4K
KyAgICAgICAgICAgIF9fIGxpbmsoaW5GYXN0VmVjdG9yLCBfXyBsYWJlbCgpKTsKKyAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwg
WDg2OjplYXgsIGkpOworICAgICAgICAgICAgX18gbW92bF9ybShYODY6OmVheCwgRklFTERfT0ZG
U0VUKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pLCBYODY6OmVjeCwgWDg2OjplZHgsIHNpemVv
ZihKU1ZhbHVlKikpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgQ1RJX0NPTVBJTEVfQklOQVJZX09QKG9wX2xlc3NlcSkKKyAgICAg
ICAgY2FzZSBvcF9sb29wX2lmX3RydWU6IHsKKyAgICAgICAgICAgIGVtaXRTbG93U2NyaXB0Q2hl
Y2soaSk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAy
XS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsKKworICAgICAgICAgICAgX18gY21w
bF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSwgWDg2OjplYXgp
OworICAgICAgICAgICAgSm1wU3JjIGlzWmVybyA9IF9fIGplKCk7CisgICAgICAgICAgICBfXyB0
ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgWDg2OjplYXgpOworICAg
ICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gam5lKCksIGkgKyAyICsgdGFy
Z2V0KSk7CisKKyAgICAgICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6
OnRydWVJbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIG1fam1wVGFibGUuYXBw
ZW5kKEptcFRhYmxlKF9fIGplKCksIGkgKyAyICsgdGFyZ2V0KSk7CisgICAgICAgICAgICBfXyBj
bXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjpmYWxzZUltbWVkaWF0ZSgpKSwgWDg2Ojpl
YXgpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam5l
KCksIGkpKTsKKworICAgICAgICAgICAgX18gbGluayhpc1plcm8sIF9fIGxhYmVsKCkpOworICAg
ICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH07CisgICAgICAg
IGNhc2Ugb3BfcmVzb2x2ZV9iYXNlOiB7CisgICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRd
KTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVu
c2lnbmVkPihpZGVudCksIDApOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0
ZXI6OmN0aV9vcF9yZXNvbHZlX2Jhc2UpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0gMzsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbmVnYXRlOiB7
CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgMl0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2Fs
bChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX25lZ2F0ZSk7CisgICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAg
aSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9y
ZXNvbHZlX3NraXA6IHsKKyAgICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZF0pOworICAgICAg
ICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlk
ZW50KSwgMCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoaW5zdHJ1Y3Rpb25b
aSArIDNdLnUub3BlcmFuZCArIG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluLCA0KTsK
KyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcmVzb2x2ZV9z
a2lwKTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Jlc29sdmVfZ2xvYmFsOiB7CisgICAgICAgICAg
ICAvLyBGYXN0IGNhc2UKKyAgICAgICAgICAgIHVuc2lnbmVkIGdsb2JhbE9iamVjdCA9IGFzSW50
ZWdlcihpbnN0cnVjdGlvbltpICsgMl0udS5qc0NlbGwpOworICAgICAgICAgICAgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgM10u
dS5vcGVyYW5kXSk7CisgICAgICAgICAgICB2b2lkKiBzdHJ1Y3R1cmVBZGRyZXNzID0gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oaW5zdHJ1Y3Rpb24gKyBpICsgNCk7CisgICAgICAgICAgICB2b2lk
KiBvZmZzZXRBZGRyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaW5zdHJ1Y3Rpb24gKyBpICsg
NSk7CisKKyAgICAgICAgICAgIC8vIENoZWNrIFN0cnVjdHVyZSBvZiBnbG9iYWwgb2JqZWN0Cisg
ICAgICAgICAgICBfXyBtb3ZsX2kzMnIoZ2xvYmFsT2JqZWN0LCBYODY6OmVheCk7CisgICAgICAg
ICAgICBfXyBtb3ZsX21yKHN0cnVjdHVyZUFkZHJlc3MsIFg4Njo6ZWR4KTsKKyAgICAgICAgICAg
IF9fIGNtcGxfcm0oWDg2OjplZHgsIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwg
WDg2OjplYXgpOworICAgICAgICAgICAgSm1wU3JjIG5vTWF0Y2ggPSBfXyBqbmUoKTsgLy8gU3Ry
dWN0dXJlcyBkb24ndCBtYXRjaAorCisgICAgICAgICAgICAvLyBMb2FkIGNhY2hlZCBwcm9wZXJ0
eQorICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNHbG9iYWxPYmplY3QsIG1f
cHJvcGVydHlTdG9yYWdlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIF9fIG1v
dmxfbXIob2Zmc2V0QWRkciwgWDg2OjplZHgpOworICAgICAgICAgICAgX18gbW92bF9tcigwLCBY
ODY6OmVheCwgWDg2OjplZHgsIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWF4KTsKKyAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7
CisgICAgICAgICAgICBKbXBTcmMgZW5kID0gX18gam1wKCk7CisKKyAgICAgICAgICAgIC8vIFNs
b3cgY2FzZQorICAgICAgICAgICAgX18gbGluayhub01hdGNoLCBfXyBsYWJlbCgpKTsKKyAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChnbG9iYWxPYmplY3QsIDApOworICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50
KSwgNCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZD4oaW5zdHJ1Y3Rpb24gKyBpKSwgOCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2Fs
bChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVfZ2xvYmFsKTsKKyAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAg
ICAgICAgICBfXyBsaW5rKGVuZCwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBpICs9IDY7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBDVElfQ09NUElMRV9CSU5BUllf
T1Aob3BfZGl2KQorICAgICAgICBjYXNlIG9wX3ByZV9kZWM6IHsKKyAgICAgICAgICAgIGludCBz
cmNEc3QgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOworICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7CisgICAgICAgICAgICBfXyBzdWJs
X2k4cihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKEpTSW1tZWRpYXRlOjpvbmVJbW1lZGlh
dGUoKSksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2Fz
ZUVudHJ5KF9fIGpvKCksIGkpKTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
c3JjRHN0KTsKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3Bfam5sZXNzOiB7CisgICAgICAgICAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOworICAgICAgICAgICAgSlNWYWx1ZSog
c3JjMmltbSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhpbnN0cnVjdGlvbltpICsg
Ml0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGlmIChzcmMyaW1tKSB7CisgICAgICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBY
ODY6OmVkeCwgaSk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVt
KFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKHNy
YzJpbW0pLCBYODY6OmVkeCk7CisgICAgICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1w
VGFibGUoX18gamdlKCksIGkgKyAzICsgdGFyZ2V0KSk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAx
XS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6
OmVkeCwgaSk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4
Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0o
WDg2OjplZHgsIGkpOworICAgICAgICAgICAgICAgIF9fIGNtcGxfcnIoWDg2OjplZHgsIFg4Njo6
ZWF4KTsKKyAgICAgICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqZ2Uo
KSwgaSArIDMgKyB0YXJnZXQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkgKz0gNDsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfbm90OiB7Cisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9w
ZXJhbmQsIFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgIF9fIHhvcmxfaThyKEpTSW1tZWRpYXRl
OjpGdWxsVGFnVHlwZUJvb2wsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIF9fIHRlc3RsX2kzMnIo
SlNJbW1lZGlhdGU6OkZ1bGxUYWdUeXBlTWFzaywgWDg2OjplYXgpOyAvLyBpOD8KKyAgICAgICAg
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7CisgICAg
ICAgICAgICBfXyB4b3JsX2k4cigoSlNJbW1lZGlhdGU6OkZ1bGxUYWdUeXBlQm9vbCB8IEpTSW1t
ZWRpYXRlOjpFeHRlbmRlZFBheWxvYWRCaXRCb29sVmFsdWUpLCBYODY6OmVheCk7CisgICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9qZmFsc2U6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGlu
c3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsKKworICAg
ICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0
ZSgpKSwgWDg2OjplYXgpOworICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUo
X18gamUoKSwgaSArIDIgKyB0YXJnZXQpKTsKKyAgICAgICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJ
bW1lZGlhdGU6OlRhZ0JpdFR5cGVJbnRlZ2VyLCBYODY6OmVheCk7CisgICAgICAgICAgICBKbXBT
cmMgaXNOb25aZXJvID0gX18gam5lKCk7CisKKyAgICAgICAgICAgIF9fIGNtcGxfaTMycihhc0lu
dGVnZXIoSlNJbW1lZGlhdGU6OmZhbHNlSW1tZWRpYXRlKCkpLCBYODY6OmVheCk7CisgICAgICAg
ICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqZSgpLCBpICsgMiArIHRhcmdldCkp
OworICAgICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6dHJ1ZUlt
bWVkaWF0ZSgpKSwgWDg2OjplYXgpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNs
b3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKKworICAgICAgICAgICAgX18gbGluayhpc05vblpl
cm8sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH07CisgICAgICAgIGNhc2Ugb3BfamVxX251bGw6IHsKKyAgICAgICAgICAgIHVu
c2lnbmVkIHNyYyA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworCisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgWDg2OjplYXgsIGkpOworICAgICAgICAg
ICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOworICAgICAg
ICAgICAgSm1wU3JjIGlzSW1tZWRpYXRlID0gX18gam56KCk7CisKKyAgICAgICAgICAgIF9fIG1v
dmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwgWDg2Ojpl
Y3gpOworICAgICAgICAgICAgX18gdGVzdGxfaTMybShNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBG
SUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvLm1fZmxhZ3MpLCBYODY6OmVjeCk7Cisg
ICAgICAgICAgICBfXyBzZXRuel9yKFg4Njo6ZWF4KTsKKworICAgICAgICAgICAgSm1wU3JjIHdh
c05vdEltbWVkaWF0ZSA9IF9fIGptcCgpOworCisgICAgICAgICAgICBfXyBsaW5rKGlzSW1tZWRp
YXRlLCBfXyBsYWJlbCgpKTsKKworICAgICAgICAgICAgX18gbW92bF9pMzJyKH5KU0ltbWVkaWF0
ZTo6RXh0ZW5kZWRUYWdCaXRVbmRlZmluZWQsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIGFu
ZGxfcnIoWDg2OjplYXgsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIGNtcGxfaTMycihKU0lt
bWVkaWF0ZTo6RnVsbFRhZ1R5cGVOdWxsLCBYODY6OmVjeCk7CisgICAgICAgICAgICBfXyBzZXRl
X3IoWDg2OjplYXgpOworCisgICAgICAgICAgICBfXyBsaW5rKHdhc05vdEltbWVkaWF0ZSwgX18g
bGFiZWwoKSk7CisKKyAgICAgICAgICAgIF9fIG1vdnpibF9ycihYODY6OmVheCwgWDg2OjplYXgp
OworICAgICAgICAgICAgX18gY21wbF9pMzJyKDAsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIG1f
am1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGpueigpLCBpICsgMiArIHRhcmdldCkpOyAgICAg
ICAgICAgIAorCisgICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfTsKKyAgICAgICAgY2FzZSBvcF9qbmVxX251bGw6IHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IHNyYyA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworCisgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgWDg2OjplYXgsIGkpOworICAgICAgICAgICAgX18g
dGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOworICAgICAgICAgICAg
Sm1wU3JjIGlzSW1tZWRpYXRlID0gX18gam56KCk7CisKKyAgICAgICAgICAgIF9fIG1vdmxfbXIo
RklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwgWDg2OjplY3gpOwor
ICAgICAgICAgICAgX18gdGVzdGxfaTMybShNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBGSUVMRF9P
RkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvLm1fZmxhZ3MpLCBYODY6OmVjeCk7CisgICAgICAg
ICAgICBfXyBzZXR6X3IoWDg2OjplYXgpOworCisgICAgICAgICAgICBKbXBTcmMgd2FzTm90SW1t
ZWRpYXRlID0gX18gam1wKCk7CisKKyAgICAgICAgICAgIF9fIGxpbmsoaXNJbW1lZGlhdGUsIF9f
IGxhYmVsKCkpOworCisgICAgICAgICAgICBfXyBtb3ZsX2kzMnIofkpTSW1tZWRpYXRlOjpFeHRl
bmRlZFRhZ0JpdFVuZGVmaW5lZCwgWDg2OjplY3gpOworICAgICAgICAgICAgX18gYW5kbF9ycihY
ODY6OmVheCwgWDg2OjplY3gpOworICAgICAgICAgICAgX18gY21wbF9pMzJyKEpTSW1tZWRpYXRl
OjpGdWxsVGFnVHlwZU51bGwsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIHNldG5lX3IoWDg2
OjplYXgpOworCisgICAgICAgICAgICBfXyBsaW5rKHdhc05vdEltbWVkaWF0ZSwgX18gbGFiZWwo
KSk7CisKKyAgICAgICAgICAgIF9fIG1vdnpibF9ycihYODY6OmVheCwgWDg2OjplYXgpOworICAg
ICAgICAgICAgX18gY21wbF9pMzJyKDAsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIG1fam1wVGFi
bGUuYXBwZW5kKEptcFRhYmxlKF9fIGpueigpLCBpICsgMiArIHRhcmdldCkpOyAgICAgICAgICAg
IAorCisgICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIG9wX3Bvc3RfaW5jOiB7CisgICAgICAgICAgICBpbnQgc3JjRHN0ID0gaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjRHN0LCBYODY6OmVheCwgaSk7CisgICAgICAgICAgICBfXyBtb3ZsX3JyKFg4Njo6
ZWF4LCBYODY6OmVkeCk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0o
WDg2OjplYXgsIGkpOworICAgICAgICAgICAgX18gYWRkbF9pOHIoZ2V0RGVUYWdnZWRDb25zdGFu
dEltbWVkaWF0ZShKU0ltbWVkaWF0ZTo6b25lSW1tZWRpYXRlKCkpLCBYODY6OmVkeCk7CisgICAg
ICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbygpLCBpKSk7Cisg
ICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgWDg2OjplZHgpOworICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2Ugb3BfdW5leHBlY3RlZF9sb2FkOiB7CisgICAgICAgICAgICBKU1ZhbHVl
KiB2ID0gbV9jb2RlQmxvY2stPnVuZXhwZWN0ZWRDb25zdGFudHNbaW5zdHJ1Y3Rpb25baSArIDJd
LnUub3BlcmFuZF07CisgICAgICAgICAgICBfXyBtb3ZsX2kzMnIoYXNJbnRlZ2VyKHYpLCBYODY6
OmVheCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9qc3I6IHsKKyAgICAgICAgICAgIGludCByZXRB
ZGRyRHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCB0
YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgX18gbW92
bF9pMzJtKDAsIHNpemVvZihSZWdpc3RlcikgKiByZXRBZGRyRHN0LCBYODY6OmVkaSk7CisgICAg
ICAgICAgICBKbXBEc3QgYWRkclBvc2l0aW9uID0gX18gbGFiZWwoKTsKKyAgICAgICAgICAgIG1f
am1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGptcCgpLCBpICsgMiArIHRhcmdldCkpOworICAg
ICAgICAgICAgSm1wRHN0IHNyZXRUYXJnZXQgPSBfXyBsYWJlbCgpOworICAgICAgICAgICAgbV9q
c3JTaXRlcy5hcHBlbmQoSlNSSW5mbyhhZGRyUG9zaXRpb24sIHNyZXRUYXJnZXQpKTsKKyAgICAg
ICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3Bfc3JldDogeworICAgICAgICAgICAgX18gam1wX20oc2l6ZW9mKFJlZ2lzdGVyKSAqIGlu
c3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWRpKTsKKyAgICAgICAgICAgIGkgKz0g
MjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZXE6IHsK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAyXS51
Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVk
eCwgaSk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW1zKFg4Njo6ZWF4
LCBYODY6OmVkeCwgaSk7CisgICAgICAgICAgICBfXyBjbXBsX3JyKFg4Njo6ZWR4LCBYODY6OmVh
eCk7CisgICAgICAgICAgICBfXyBzZXRlX3IoWDg2OjplYXgpOworICAgICAgICAgICAgX18gbW92
emJsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICBlbWl0VGFnQXNCb29sSW1t
ZWRpYXRlKFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2xzaGlmdDogeworICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFu
ZCwgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWN4LCBpKTsK
KyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7Cisg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplY3gsIGkpOworICAg
ICAgICAgICAgZW1pdEZhc3RBcml0aEltbVRvSW50KFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIGVt
aXRGYXN0QXJpdGhJbW1Ub0ludChYODY6OmVjeCk7CisgICAgICAgICAgICBfXyBzaGxsX0NMcihY
ODY6OmVheCk7CisgICAgICAgICAgICBlbWl0RmFzdEFyaXRoSW50VG9JbW1PclNsb3dDYXNlKFg4
Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2JpdGFuZDogeworICAgICAgICAgICAg
dW5zaWduZWQgc3JjMSA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICB1bnNpZ25lZCBzcmMyID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGRzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpZiAoSlNWYWx1ZSogdmFsdWUgPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmco
c3JjMSkpIHsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIFg4
Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0o
WDg2OjplYXgsIGkpOworICAgICAgICAgICAgICAgIF9fIGFuZGxfaTMycihhc0ludGVnZXIodmFs
dWUpLCBYODY6OmVheCk7IC8vIEZJWE1FOiBtYWtlIGl0IG1vcmUgb2J2aW91cyB0aGlzIGlzIHJl
bHlpbmcgb24gdGhlIGZvcm1hdCBvZiBKU0ltbWVkaWF0ZQorICAgICAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoSlNWYWx1ZSog
dmFsdWUgPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMikpIHsKKyAgICAgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIFg4Njo6ZWF4LCBpKTsKKyAgICAg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOworICAg
ICAgICAgICAgICAgIF9fIGFuZGxfaTMycihhc0ludGVnZXIodmFsdWUpLCBYODY6OmVheCk7Cisg
ICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCBY
ODY6OmVheCwgc3JjMiwgWDg2OjplZHgsIGkpOworICAgICAgICAgICAgICAgIF9fIGFuZGxfcnIo
WDg2OjplZHgsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbW1OdW0oWDg2OjplYXgsIGkpOworICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkgKz0gNTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAg
ICAgICB1bnNpZ25lZCBzcmMxID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIHNyYzIgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOworICAg
ICAgICAgICAgaWYgKEpTVmFsdWUqIHZhbHVlID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmlj
QXJnKHNyYzIpKSB7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMx
LCBYODY6OmVheCwgaSk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1t
TnVtKFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgICAgICAvLyBNYXNrIHdpdGggMHgxZiBhcyBw
ZXIgZWNtYS0yNjIgMTEuNy4yIHN0ZXAgNy4KKyAgICAgICAgICAgICAgICBfXyBzYXJsX2k4cihK
U0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkVUludDMyKHZhbHVlKSAmIDB4MWYsIFg4Njo6ZWF4KTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMoc3JjMSwgWDg2OjplYXgsIHNyYzIsIFg4Njo6ZWN4LCBpKTsKKyAgICAgICAgICAgICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOworICAgICAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVjeCwgaSk7CisgICAgICAgICAg
ICAgICAgZW1pdEZhc3RBcml0aEltbVRvSW50KFg4Njo6ZWN4KTsKKyAgICAgICAgICAgICAgICBf
XyBzYXJsX0NMcihYODY6OmVheCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbWl0RmFz
dEFyaXRoUG90ZW50aWFsbHlSZVRhZ0ltbWVkaWF0ZShYODY6OmVheCk7CisgICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAg
ICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9iaXRub3Q6IHsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOworICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgIF9fIHhv
cmxfaThyKH5KU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWF4KTsKKyAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFu
ZCk7CisgICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIG9wX3Jlc29sdmVfd2l0aF9iYXNlOiB7CisgICAgICAgICAgICBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAz
XS51Lm9wZXJhbmRdKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDApOworICAgICAgICAgICAgZW1pdENUSUNhbGwo
aSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlX3dpdGhfYmFzZSk7CisgICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6
ZWR4KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25ld19mdW5jX2V4cDogeworICAgICAgICAgICAg
RnVuY0V4cHJOb2RlKiBmdW5jID0gKG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4cHJlc3Npb25zW2lu
c3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKS5nZXQoKTsKKyAgICAgICAgICAgIGVtaXRQdXRD
VElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihmdW5jKSwgMCk7CisgICAg
ICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX25ld19mdW5jX2V4cCk7
CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51
Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9tb2Q6IHsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVj
dGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVjeCwgaSk7CisgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOworICAgICAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWN4LCBpKTsKKyAgICAgICAgICAgIGVtaXRGYXN0QXJp
dGhEZVRhZ0ltbWVkaWF0ZShYODY6OmVheCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBl
bmQoU2xvd0Nhc2VFbnRyeShlbWl0RmFzdEFyaXRoRGVUYWdJbW1lZGlhdGVKdW1wSWZaZXJvKFg4
Njo6ZWN4KSwgaSkpOworICAgICAgICAgICAgX18gY2RxKCk7CisgICAgICAgICAgICBfXyBpZGl2
bF9yKFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhSZVRhZ0ltbWVkaWF0ZShY
ODY6OmVkeCk7CisgICAgICAgICAgICBfXyBtb3ZsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7Cisg
ICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9qdHJ1ZTogeworICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0
ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOwor
CisgICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjp6ZXJvSW1t
ZWRpYXRlKCkpLCBYODY6OmVheCk7CisgICAgICAgICAgICBKbXBTcmMgaXNaZXJvID0gX18gamUo
KTsKKyAgICAgICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ0JpdFR5cGVJbnRl
Z2VyLCBYODY6OmVheCk7CisgICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShf
XyBqbmUoKSwgaSArIDIgKyB0YXJnZXQpKTsKKworICAgICAgICAgICAgX18gY21wbF9pMzJyKGFz
SW50ZWdlcihKU0ltbWVkaWF0ZTo6dHJ1ZUltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOworICAgICAg
ICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gamUoKSwgaSArIDIgKyB0YXJnZXQp
KTsKKyAgICAgICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6OmZhbHNl
SW1tZWRpYXRlKCkpLCBYODY6OmVheCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQo
U2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOworCisgICAgICAgICAgICBfXyBsaW5rKGlzWmVy
bywgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBDVElfQ09NUElMRV9CSU5BUllfT1Aob3BfbGVzcykKKyAgICAg
ICAgY2FzZSBvcF9uZXE6IHsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGlu
c3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgM10u
dS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbW1OdW1zKFg4Njo6ZWF4LCBYODY6OmVkeCwgaSk7CisgICAgICAgICAgICBfXyBjbXBsX3Jy
KFg4Njo6ZWF4LCBYODY6OmVkeCk7CisKKyAgICAgICAgICAgIF9fIHNldG5lX3IoWDg2OjplYXgp
OworICAgICAgICAgICAgX18gbW92emJsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgICAg
ICAgICBlbWl0VGFnQXNCb29sSW1tZWRpYXRlKFg4Njo6ZWF4KTsKKworICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKworICAg
ICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9wb3N0X2RlYzogeworICAgICAgICAgICAgaW50IHNyY0RzdCA9IGluc3RydWN0aW9u
W2kgKyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
Y0RzdCwgWDg2OjplYXgsIGkpOworICAgICAgICAgICAgX18gbW92bF9ycihYODY6OmVheCwgWDg2
OjplZHgpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4
LCBpKTsKKyAgICAgICAgICAgIF9fIHN1YmxfaThyKGdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlh
dGUoSlNJbW1lZGlhdGU6Om9uZUltbWVkaWF0ZSgpKSwgWDg2OjplZHgpOworICAgICAgICAgICAg
bV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam8oKSwgaSkpOworICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIFg4Njo6ZWR4KTsKKyAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Cisg
ICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBDVElfQ09NUElMRV9CSU5BUllfT1Aob3BfdXJzaGlmdCkKKyAgICAgICAgY2FzZSBvcF9iaXR4
b3I6IHsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kg
KyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBY
ODY6OmVkeCwgaSk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW1zKFg4
Njo6ZWF4LCBYODY6OmVkeCwgaSk7CisgICAgICAgICAgICBfXyB4b3JsX3JyKFg4Njo6ZWR4LCBY
ODY6OmVheCk7CisgICAgICAgICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUoWDg2Ojpl
YXgpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0gNTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDogeworICAgICAgICAgICAgUmVn
RXhwKiByZWdFeHAgPSBtX2NvZGVCbG9jay0+cmVnZXhwc1tpbnN0cnVjdGlvbltpICsgMl0udS5v
cGVyYW5kXS5nZXQoKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkPihyZWdFeHApLCAwKTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3BfbmV3X3JlZ2V4cCk7CisgICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAg
ICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBv
cF9iaXRvcjogeworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rp
b25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJh
bmQsIFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51
bXMoWDg2OjplYXgsIFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgIF9fIG9ybF9ycihYODY6OmVk
eCwgWDg2OjplYXgpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVj
dGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0gNTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfdGhyb3c6IHsKKyAgICAgICAgICAg
IGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9w
ZXJhbmQsIDAsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJl
dGVyOjpjdGlfb3BfdGhyb3cpOworICAgICAgICAgICAgX18gYWRkbF9pOHIoMHgyMCwgWDg2Ojpl
c3ApOworICAgICAgICAgICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsKKyAgICAgICAgICAgIF9fIHBv
cGxfcihYODY6OmVkaSk7CisgICAgICAgICAgICBfXyBwb3BsX3IoWDg2Ojplc2kpOworICAgICAg
ICAgICAgX18gcmV0KCk7CisgICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dldF9wbmFtZXM6IHsKKyAgICAgICAgICAgIGVt
aXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJh
bmQsIDAsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVy
OjpjdGlfb3BfZ2V0X3BuYW1lcyk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSAzOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXh0X3BuYW1lOiB7
CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgMl0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7CisgICAgICAgICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOworICAgICAgICAgICAgZW1pdENU
SUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXh0X3BuYW1lKTsKKyAgICAgICAgICAgIF9f
IHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICBKbXBTcmMgZW5kT2ZJ
dGVyID0gX18gamUoKTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChK
bXBUYWJsZShfXyBqbXAoKSwgaSArIDMgKyB0YXJnZXQpKTsKKyAgICAgICAgICAgIF9fIGxpbmso
ZW5kT2ZJdGVyLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHVzaF9zY29wZTogeworICAgICAg
ICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50
ZXJwcmV0ZXI6OmN0aV9vcF9wdXNoX3Njb3BlKTsKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcG9wX3Njb3BlOiB7Cisg
ICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3BvcF9zY29wZSk7
CisgICAgICAgICAgICBpICs9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBDVElfQ09NUElMRV9VTkFSWV9PUChvcF90eXBlb2YpCisgICAgICAgIENUSV9DT01QSUxF
X1VOQVJZX09QKG9wX2lzX3VuZGVmaW5lZCkKKyAgICAgICAgQ1RJX0NPTVBJTEVfVU5BUllfT1Ao
b3BfaXNfYm9vbGVhbikKKyAgICAgICAgQ1RJX0NPTVBJTEVfVU5BUllfT1Aob3BfaXNfbnVtYmVy
KQorICAgICAgICBDVElfQ09NUElMRV9VTkFSWV9PUChvcF9pc19zdHJpbmcpCisgICAgICAgIENU
SV9DT01QSUxFX1VOQVJZX09QKG9wX2lzX29iamVjdCkKKyAgICAgICAgQ1RJX0NPTVBJTEVfVU5B
UllfT1Aob3BfaXNfZnVuY3Rpb24pCisgICAgICAgIGNhc2Ugb3Bfc3RyaWN0ZXE6IHsKKyAgICAg
ICAgICAgIGNvbXBpbGVPcFN0cmljdEVxKGluc3RydWN0aW9uICsgaSwgaSwgT3BTdHJpY3RFcSk7
CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX25zdHJpY3RlcTogeworICAgICAgICAgICAgY29tcGlsZU9wU3RyaWN0RXEo
aW5zdHJ1Y3Rpb24gKyBpLCBpLCBPcE5TdHJpY3RFcSk7CisgICAgICAgICAgICBpICs9IDQ7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3RvX2pzbnVtYmVy
OiB7CisgICAgICAgICAgICBpbnQgc3JjVlJlZyA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIFg4Njo6ZWF4
LCBpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0
ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIEptcFNyYyB3YXNJ
bW1lZGlhdGUgPSBfXyBqbnooKTsKKworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKFg4Njo6ZWF4LCBpLCBzcmNWUmVnKTsKKworICAgICAgICAgICAgX18gbW92bF9tcihG
SUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7Cisg
ICAgICAgICAgICBfXyBjbXBsX2kzMm0oTnVtYmVyVHlwZSwgRklFTERfT0ZGU0VUKFN0cnVjdHVy
ZSwgbV90eXBlSW5mby5tX3R5cGUpLCBYODY6OmVjeCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIF9fIGxpbmsod2FzSW1tZWRpYXRlLCBfXyBsYWJlbCgpKTsK
KworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0u
dS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2Ugb3BfaW46IHsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdG
cm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6
ZWN4KTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIGVtaXRD
VElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfaW4pOworICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAg
IGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
cHVzaF9uZXdfc2NvcGU6IHsKKyAgICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZF0pOworICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+
KGlkZW50KSwgMCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rl
cihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA0LCBYODY6OmVjeCk7CisgICAgICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3B1c2hfbmV3X3Njb3BlKTsKKyAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZCk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIG9wX2NhdGNoOiB7CisgICAgICAgICAgICBlbWl0R2V0Q1RJUGFyYW0o
Q1RJX0FSR1NfY2FsbEZyYW1lLCBYODY6OmVkaSk7IC8vIGVkaSA6PSByCisgICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAg
ICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9qbXBfc2NvcGVzOiB7CisgICAgICAgICAgICB1bnNpZ25lZCBjb3VudCA9IGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3Rh
bnQoY291bnQsIDApOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0
aV9vcF9qbXBfc2NvcGVzKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0
aW9uW2kgKyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBU
YWJsZShfXyBqbXAoKSwgaSArIDIgKyB0YXJnZXQpKTsKKyAgICAgICAgICAgIGkgKz0gMzsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2luZGV4
OiB7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVj
dGlvbltpICsgMV0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7CisgICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnQ29uc3RhbnQoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgNCk7CisgICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10u
dS5vcGVyYW5kLCA4LCBYODY6OmVjeCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRl
cnByZXRlcjo6Y3RpX29wX3B1dF9ieV9pbmRleCk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3N3aXRjaF9pbW06IHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIHRhYmxlSW5kZXggPSBpbnN0cnVjdGlvbltpICsgMV0udS5v
cGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGluc3RydWN0aW9u
W2kgKyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBpbnN0
cnVjdGlvbltpICsgM10udS5vcGVyYW5kOworCisgICAgICAgICAgICAvLyBjcmVhdGUganVtcCB0
YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50
LgorICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2st
PmltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CisgICAgICAgICAgICBtX3N3
aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBpLCBkZWZhdWx0T2Zmc2V0LCBT
d2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOworICAgICAgICAgICAganVtcFRhYmxlLT5jdGlPZmZz
ZXRzLmdyb3coanVtcFRhYmxlLT5icmFuY2hPZmZzZXRzLnNpemUoKSk7CisKKyAgICAgICAgICAg
IGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgMCwgWDg2OjplY3gp
OworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHRhYmxlSW5kZXgsIDQpOworICAg
ICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9zd2l0Y2hfaW1tKTsK
KyAgICAgICAgICAgIF9fIGptcF9yKFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIGkgKz0gNDsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRhYmxlSW5kZXggPSBpbnN0cnVjdGlvbltpICsgMV0u
dS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGluc3RydWN0
aW9uW2kgKyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBp
bnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOworCisgICAgICAgICAgICAvLyBjcmVhdGUganVt
cCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVt
ZW50LgorICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxv
Y2stPmNoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CisgICAgICAgICAgICBt
X3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBpLCBkZWZhdWx0T2Zmc2V0
LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOworICAgICAgICAgICAganVtcFRhYmxlLT5jdGlP
ZmZzZXRzLmdyb3coanVtcFRhYmxlLT5icmFuY2hPZmZzZXRzLnNpemUoKSk7CisKKyAgICAgICAg
ICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgMCwgWDg2Ojpl
Y3gpOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHRhYmxlSW5kZXgsIDQpOwor
ICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9zd2l0Y2hfY2hh
cik7CisgICAgICAgICAgICBfXyBqbXBfcihYODY6OmVheCk7CisgICAgICAgICAgICBpICs9IDQ7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3N3aXRjaF9z
dHJpbmc6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRhYmxlSW5kZXggPSBpbnN0cnVjdGlvbltp
ICsgMV0udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGlu
c3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25lZCBzY3J1dGlu
ZWUgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOworCisgICAgICAgICAgICAvLyBjcmVh
dGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2gg
c3RhdGVtZW50LgorICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9j
b2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07CisgICAgICAgICAg
ICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBpLCBkZWZhdWx0T2Zm
c2V0KSk7CisKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNj
cnV0aW5lZSwgMCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50
KHRhYmxlSW5kZXgsIDQpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6
OmN0aV9vcF9zd2l0Y2hfc3RyaW5nKTsKKyAgICAgICAgICAgIF9fIGptcF9yKFg4Njo6ZWF4KTsK
KyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDogeworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21W
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gp
OworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rp
b25baSArIDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1pdENUSUNh
bGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9kZWxfYnlfdmFsKTsKKyAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAg
ICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IG9wX3B1dF9nZXR0ZXI6IHsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJl
Z2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKKyAgICAg
ICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZF0pOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Nv
bnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgNCk7CisgICAgICAgICAg
ICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5v
cGVyYW5kLCA4LCBYODY6OmVjeCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnBy
ZXRlcjo6Y3RpX29wX3B1dF9nZXR0ZXIpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRfc2V0dGVyOiB7CisgICAg
ICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7CisgICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJh
bmRdKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0
PHVuc2lnbmVkPihpZGVudCksIDQpOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0
dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgOCwgWDg2OjplY3gpOwor
ICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfc2V0dGVy
KTsKKyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2Ugb3BfbmV3X2Vycm9yOiB7CisgICAgICAgICAgICBKU1ZhbHVlKiBtZXNzYWdl
ID0gbV9jb2RlQmxvY2stPnVuZXhwZWN0ZWRDb25zdGFudHNbaW5zdHJ1Y3Rpb25baSArIDNdLnUu
b3BlcmFuZF07CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoaW5zdHJ1Y3Rpb25b
aSArIDJdLnUub3BlcmFuZCwgMCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQo
YXNJbnRlZ2VyKG1lc3NhZ2UpLCA0KTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFu
dChtX2NvZGVCbG9jay0+bGluZU51bWJlckZvclZQQygmaW5zdHJ1Y3Rpb25baV0pLCA4KTsKKyAg
ICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbmV3X2Vycm9yKTsK
KyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIG9wX2RlYnVnOiB7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJn
Q29uc3RhbnQoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgMCk7CisgICAgICAgICAgICBl
bWl0UHV0Q1RJQXJnQ29uc3RhbnQoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgNCk7Cisg
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3Bl
cmFuZCwgOCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29w
X2RlYnVnKTsKKyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3BfZXFfbnVsbDogeworICAgICAgICAgICAgdW5zaWduZWQgZHN0
ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNy
YzEgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworCisgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHNyYzEsIFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgIF9fIHRlc3Rs
X2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIEptcFNy
YyBpc0ltbWVkaWF0ZSA9IF9fIGpueigpOworCisgICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxE
X09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsKKyAgICAg
ICAgICAgIF9fIHRlc3RsX2kzMm0oTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRklFTERfT0ZGU0VU
KFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX2ZsYWdzKSwgWDg2OjplY3gpOworICAgICAgICAgICAg
X18gc2V0bnpfcihYODY6OmVheCk7CisKKyAgICAgICAgICAgIEptcFNyYyB3YXNOb3RJbW1lZGlh
dGUgPSBfXyBqbXAoKTsKKworICAgICAgICAgICAgX18gbGluayhpc0ltbWVkaWF0ZSwgX18gbGFi
ZWwoKSk7CisKKyAgICAgICAgICAgIF9fIG1vdmxfaTMycih+SlNJbW1lZGlhdGU6OkV4dGVuZGVk
VGFnQml0VW5kZWZpbmVkLCBYODY6OmVjeCk7CisgICAgICAgICAgICBfXyBhbmRsX3JyKFg4Njo6
ZWF4LCBYODY6OmVjeCk7CisgICAgICAgICAgICBfXyBjbXBsX2kzMnIoSlNJbW1lZGlhdGU6OkZ1
bGxUYWdUeXBlTnVsbCwgWDg2OjplY3gpOworICAgICAgICAgICAgX18gc2V0ZV9yKFg4Njo6ZWF4
KTsKKworICAgICAgICAgICAgX18gbGluayh3YXNOb3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwor
CisgICAgICAgICAgICBfXyBtb3Z6YmxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICAgICAg
ICAgIGVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUoWDg2OjplYXgpOworICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25lcV9udWxsOiB7CisgICAgICAg
ICAgICB1bnNpZ25lZCBkc3QgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOworICAgICAg
ICAgICAgdW5zaWduZWQgc3JjMSA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7CisKKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgWDg2OjplYXgsIGkpOworICAg
ICAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOwor
ICAgICAgICAgICAgSm1wU3JjIGlzSW1tZWRpYXRlID0gX18gam56KCk7CisKKyAgICAgICAgICAg
IF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwg
WDg2OjplY3gpOworICAgICAgICAgICAgX18gdGVzdGxfaTMybShNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvLm1fZmxhZ3MpLCBYODY6OmVj
eCk7CisgICAgICAgICAgICBfXyBzZXR6X3IoWDg2OjplYXgpOworCisgICAgICAgICAgICBKbXBT
cmMgd2FzTm90SW1tZWRpYXRlID0gX18gam1wKCk7CisKKyAgICAgICAgICAgIF9fIGxpbmsoaXNJ
bW1lZGlhdGUsIF9fIGxhYmVsKCkpOworCisgICAgICAgICAgICBfXyBtb3ZsX2kzMnIofkpTSW1t
ZWRpYXRlOjpFeHRlbmRlZFRhZ0JpdFVuZGVmaW5lZCwgWDg2OjplY3gpOworICAgICAgICAgICAg
X18gYW5kbF9ycihYODY6OmVheCwgWDg2OjplY3gpOworICAgICAgICAgICAgX18gY21wbF9pMzJy
KEpTSW1tZWRpYXRlOjpGdWxsVGFnVHlwZU51bGwsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9f
IHNldG5lX3IoWDg2OjplYXgpOworCisgICAgICAgICAgICBfXyBsaW5rKHdhc05vdEltbWVkaWF0
ZSwgX18gbGFiZWwoKSk7CisKKyAgICAgICAgICAgIF9fIG1vdnpibF9ycihYODY6OmVheCwgWDg2
OjplYXgpOworICAgICAgICAgICAgZW1pdFRhZ0FzQm9vbEltbWVkaWF0ZShYODY6OmVheCk7Cisg
ICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICAgICAgICAgIGkg
Kz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZW50
ZXI6IHsKKyAgICAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3
ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAorICAgICAgICAgICAgLy8gcmVnaXN0ZXJzIHRvIHph
cCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCisgICAg
ICAgICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCisg
ICAgICAgICAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycyArIG1fY29kZUJs
b2NrLT5jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBq
ID0gMDsgaiA8IGNvdW50OyArK2opCisgICAgICAgICAgICAgICAgZW1pdEluaXRSZWdpc3Rlcihq
KTsKKworICAgICAgICAgICAgaSs9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIG9wX2VudGVyX3dpdGhfYWN0aXZhdGlvbjogeworICAgICAgICAgICAgLy8g
RXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0
YW50CisgICAgICAgICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50ZXJzLCB0byBh
dm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKKyAgICAgICAgICAgIC8vIG9iamVjdCBsaWZl
dGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KKyAgICAgICAgICAgIHNpemVfdCBjb3Vu
dCA9IG1fY29kZUJsb2NrLT5udW1WYXJzICsgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJz
LnNpemUoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgY291bnQ7ICsraikK
KyAgICAgICAgICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKGopOworCisgICAgICAgICAgICBlbWl0
Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3B1c2hfYWN0aXZhdGlvbik7CisgICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQp
OworCisgICAgICAgICAgICBpKz0gMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50czogeworICAgICAgICAgICAgZW1pdENUSUNh
bGwoaSwgKG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzID09IDEpID8gSW50ZXJwcmV0ZXI6OmN0
aV9vcF9jcmVhdGVfYXJndW1lbnRzX25vX3BhcmFtcyA6IEludGVycHJldGVyOjpjdGlfb3BfY3Jl
YXRlX2FyZ3VtZW50cyk7CisgICAgICAgICAgICBpICs9IDE7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2NvbnZlcnRfdGhpczogeworICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6
OmVheCwgaSk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6
OmVheCwgaSk7CisgICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1f
c3RydWN0dXJlKSwgWDg2OjplYXgsIFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIF9fIHRlc3RsX2kz
Mm0oTmVlZHNUaGlzQ29udmVyc2lvbiwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5m
by5tX2ZsYWdzKSwgWDg2OjplZHgpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNs
b3dDYXNlRW50cnkoX18gam56KCksIGkpKTsKKworICAgICAgICAgICAgaSArPSAyOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wcm9maWxlX3dpbGxfY2Fs
bDogeworICAgICAgICAgICAgZW1pdEdldENUSVBhcmFtKENUSV9BUkdTX3Byb2ZpbGVyUmVmZXJl
bmNlLCBYODY6OmVheCk7CisgICAgICAgICAgICBfXyBjbXBsX2kzMm0oMCwgWDg2OjplYXgpOwor
ICAgICAgICAgICAgSm1wU3JjIG5vUHJvZmlsZXIgPSBfXyBqZSgpOworICAgICAgICAgICAgZW1p
dFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFu
ZCwgMCwgWDg2OjplYXgpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6
OmN0aV9vcF9wcm9maWxlX3dpbGxfY2FsbCk7CisgICAgICAgICAgICBfXyBsaW5rKG5vUHJvZmls
ZXIsIF9fIGxhYmVsKCkpOworCisgICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfZGlkX2NhbGw6IHsKKyAgICAg
ICAgICAgIGVtaXRHZXRDVElQYXJhbShDVElfQVJHU19wcm9maWxlclJlZmVyZW5jZSwgWDg2Ojpl
YXgpOworICAgICAgICAgICAgX18gY21wbF9pMzJtKDAsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAg
IEptcFNyYyBub1Byb2ZpbGVyID0gX18gamUoKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdG
cm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIDAsIFg4Njo6
ZWF4KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHJv
ZmlsZV9kaWRfY2FsbCk7CisgICAgICAgICAgICBfXyBsaW5rKG5vUHJvZmlsZXIsIF9fIGxhYmVs
KCkpOworCisgICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIG9wX2dldF9hcnJheV9sZW5ndGg6CisgICAgICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX2NoYWluOgorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9nZW5lcmljOgorICAgICAg
ICBjYXNlIG9wX2dldF9ieV9pZF9wcm90bzoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJv
dG9fbGlzdDoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfc2VsZjoKKyAgICAgICAgY2FzZSBv
cF9nZXRfYnlfaWRfc2VsZl9saXN0OgorICAgICAgICBjYXNlIG9wX2dldF9zdHJpbmdfbGVuZ3Ro
OgorICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF9nZW5lcmljOgorICAgICAgICBjYXNlIG9wX3B1
dF9ieV9pZF9yZXBsYWNlOgorICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uOgor
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBBU1NFUlQocHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4ID09IG1fY29kZUJsb2NrLT5w
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCkpOworICAgIEFTU0VSVChjYWxsTGlua0lu
Zm9JbmRleCA9PSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvcy5zaXplKCkpOworfQorCisKK3Zv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCkKK3sKKyAgICB1bnNpZ25lZCBqbXBUYWJs
ZUNvdW50ID0gbV9qbXBUYWJsZS5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGptcFRhYmxlQ291bnQ7ICsraSkKKyAgICAgICAgX18gbGluayhtX2ptcFRhYmxlW2ldLmZyb20s
IG1fbGFiZWxzW21fam1wVGFibGVbaV0udG9dKTsKKyAgICBtX2ptcFRhYmxlLmNsZWFyKCk7Cit9
CisKKyNkZWZpbmUgQ1RJX0NPTVBJTEVfQklOQVJZX09QX1NMT1dfQ0FTRShuYW1lKSBcCisgICAg
Y2FzZSBuYW1lOiB7IFwKKyAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsg
XAorICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltp
ICsgMl0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7IFwKKyAgICAgICAgZW1pdFB1dENUSUFyZ0Zy
b21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgNCwgWDg2Ojpl
Y3gpOyBcCisgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfIyNuYW1lKTsg
XAorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9w
ZXJhbmQpOyBcCisgICAgICAgIGkgKz0gNDsgXAorICAgICAgICBicmVhazsgXAorICAgIH0KKwor
I2RlZmluZSBDVElfQ09NUElMRV9CSU5BUllfT1BfU0xPV19DQVNFX0RPVUJMRV9FTlRSWShuYW1l
KSBcCisgICAgY2FzZSBuYW1lOiB7IFwKKyAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBs
YWJlbCgpKTsgXAorICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsg
ICAgICAgICAgICAgICAgXAorICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rl
cihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7IFwKKyAgICAgICAg
ZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3Bl
cmFuZCwgNCwgWDg2OjplY3gpOyBcCisgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVy
OjpjdGlfIyNuYW1lKTsgXAorICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyAxXS51Lm9wZXJhbmQpOyBcCisgICAgICAgIGkgKz0gNDsgXAorICAgICAgICBicmVh
azsgXAorICAgIH0KKyAgICAKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCit7
CisgICAgdW5zaWduZWQgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4ID0gMDsKKyAgICB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCA9IDA7CisKKyAgICBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCk7CisgICAgZm9yIChWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Nsb3dDYXNlcy5iZWdpbigpOyBp
dGVyICE9IG1fc2xvd0Nhc2VzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgLy8gRklYTUU6IGVu
YWJsZSBwZWVwaG9sZSBvcHRpbWl6YXRpb25zIGZvciBzbG93IGNhc2VzIHdoZW4gYXBwbGljYWJs
ZQorICAgICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CisKKyAgICAgICAgdW5zaWduZWQg
aSA9IGl0ZXItPnRvOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgdW5zaWduZWQgZmlyc3RUbyA9
IGk7CisjZW5kaWYKKworICAgICAgICBzd2l0Y2ggKE9wY29kZUlEIG9wY29kZUlEID0gbV9pbnRl
cnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25baV0udS5vcGNvZGUpKSB7CisgICAgICAg
IGNhc2Ugb3BfY29udmVydF90aGlzOiB7CisgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20s
IF9fIGxhYmVsKCkpOworICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFi
ZWwoKSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAg
ICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfY29udmVydF90aGlzKTsKKyAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZCk7CisgICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIG9wX2FkZDogeworICAgICAgICAgICAgdW5zaWduZWQgZHN0ID0gaW5z
dHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNyYzEgPSBp
bnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgc3JjMiA9
IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpZiAoSlNWYWx1ZSog
dmFsdWUgPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMSkpIHsKKyAgICAgICAg
ICAgICAgICBKbXBTcmMgbm90SW1tID0gaXRlci0+ZnJvbTsKKyAgICAgICAgICAgICAgICBfXyBs
aW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgICAgICBfXyBzdWJs
X2kzMnIoZ2V0RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZSh2YWx1ZSksIFg4Njo6ZWF4KTsKKyAg
ICAgICAgICAgICAgICBfXyBsaW5rKG5vdEltbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgMCwgWDg2OjplY3gpOwor
ICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDQpOworICAgICAgICAgICAg
ICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfYWRkKTsKKyAgICAgICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KEpTVmFsdWUqIHZhbHVlID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzIpKSB7
CisgICAgICAgICAgICAgICAgSm1wU3JjIG5vdEltbSA9IGl0ZXItPmZyb207CisgICAgICAgICAg
ICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICAg
ICAgX18gc3VibF9pMzJyKGdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlhdGUodmFsdWUpLCBYODY6
OmVheCk7CisgICAgICAgICAgICAgICAgX18gbGluayhub3RJbW0sIF9fIGxhYmVsKCkpOworICAg
ICAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgICAg
IGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzIsIDQsIFg4Njo6ZWN4KTsKKyAg
ICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2FkZCk7Cisg
ICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kVHlwZXMgdHlwZXMgPSBPcGVyYW5kVHlw
ZXM6OmZyb21JbnQoaW5zdHJ1Y3Rpb25baSArIDRdLnUub3BlcmFuZCk7CisgICAgICAgICAgICAg
ICAgaWYgKHR5cGVzLmZpcnN0KCkubWlnaHRCZU51bWJlcigpICYmIHR5cGVzLnNlY29uZCgpLm1p
Z2h0QmVOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZUJpbmFyeUFyaXRoT3BT
bG93Q2FzZShvcF9hZGQsIGl0ZXIsIGRzdCwgc3JjMSwgc3JjMiwgdHlwZXMsIGkpOworICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGkgKz0gNTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDogeworICAgICAgICAgICAg
Ly8gVGhlIHNsb3cgY2FzZSB0aGF0IGhhbmRsZXMgYWNjZXNzZXMgdG8gYXJyYXlzIChiZWxvdykg
bWF5IGp1bXAgYmFjayB1cCB0byBoZXJlLiAKKyAgICAgICAgICAgIEptcERzdCBiZWdpbkdldEJ5
VmFsU2xvdyA9IF9fIGxhYmVsKCk7CisKKyAgICAgICAgICAgIEptcFNyYyBub3RJbW0gPSBpdGVy
LT5mcm9tOworICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7
CisgICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAg
ICAgICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2soWDg2OjplZHgpOworICAgICAgICAg
ICAgX18gbGluayhub3RJbW0sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgZW1pdFB1dENUSUFy
ZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA0KTsK
KyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X3Zh
bCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAx
XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgX18gbGluayhfXyBqbXAoKSwgbV9sYWJlbHNbaSAr
IDRdKTsKKworICAgICAgICAgICAgLy8gVGhpcyBpcyBzbG93IGNhc2UgdGhhdCBoYW5kbGVzIGFj
Y2Vzc2VzIHRvIGFycmF5cyBhYm92ZSB0aGUgZmFzdCBjdXQtb2ZmLgorICAgICAgICAgICAgLy8g
Rmlyc3QsIGNoZWNrIGlmIHRoaXMgaXMgYW4gYWNjZXNzIHRvIHRoZSB2ZWN0b3IKKyAgICAgICAg
ICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgX18g
Y21wbF9ybShYODY6OmVkeCwgRklFTERfT0ZGU0VUKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JMZW5n
dGgpLCBYODY6OmVjeCk7CisgICAgICAgICAgICBfXyBsaW5rKF9fIGpiZSgpLCBiZWdpbkdldEJ5
VmFsU2xvdyk7CisKKyAgICAgICAgICAgIC8vIG9rYXksIG1pc3NlZCB0aGUgZmFzdCByZWdpb24s
IGJ1dCBpdCBpcyBzdGlsbCBpbiB0aGUgdmVjdG9yLiAgR2V0IHRoZSB2YWx1ZS4KKyAgICAgICAg
ICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pLCBY
ODY6OmVjeCwgWDg2OjplZHgsIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWN4KTsKKyAgICAgICAg
ICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIHZhbHVlIGxvYWRlZCBpcyB6ZXJvOyBpZiBzbyB3ZSBu
ZWVkIHRvIHJldHVybiB1bmRlZmluZWQuCisgICAgICAgICAgICBfXyB0ZXN0bF9ycihYODY6OmVj
eCwgWDg2OjplY3gpOworICAgICAgICAgICAgX18gbGluayhfXyBqZSgpLCBiZWdpbkdldEJ5VmFs
U2xvdyk7CisgICAgICAgICAgICBfXyBtb3ZsX3JyKFg4Njo6ZWN4LCBYODY6OmVheCk7CisgICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQsIFg4Njo6ZWF4KTsKKworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9zdWI6IHsKKyAgICAgICAgICAgIGNvbXBpbGVC
aW5hcnlBcml0aE9wU2xvd0Nhc2Uob3Bfc3ViLCBpdGVyLCBpbnN0cnVjdGlvbltpICsgMV0udS5v
cGVyYW5kLCBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBpbnN0cnVjdGlvbltpICsgM10u
dS5vcGVyYW5kLCBPcGVyYW5kVHlwZXM6OmZyb21JbnQoaW5zdHJ1Y3Rpb25baSArIDRdLnUub3Bl
cmFuZCksIGkpOworICAgICAgICAgICAgaSArPSA1OworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9yc2hpZnQ6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNy
YzIgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOworICAgICAgICAgICAgX18gbGluayhp
dGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIGlmIChnZXRDb25zdGFudEltbWVk
aWF0ZU51bWVyaWNBcmcoc3JjMikpCisgICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21W
aXJ0dWFsUmVnaXN0ZXIoc3JjMiwgNCwgWDg2OjplY3gpOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAg
ICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVjeCwgNCk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1p
dENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9yc2hpZnQpOworICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAg
ICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfbHNoaWZ0OiB7CisgICAgICAgICAgICBKbXBTcmMgbm90SW1tMSA9IGl0ZXItPmZyb207
CisgICAgICAgICAgICBKbXBTcmMgbm90SW1tMiA9ICgrK2l0ZXIpLT5mcm9tOworICAgICAgICAg
ICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVh
eCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplY3gsIGkpOworICAgICAgICAg
ICAgX18gbGluayhub3RJbW0xLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIF9fIGxpbmsobm90
SW1tMiwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAw
KTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplY3gsIDQpOworICAgICAgICAgICAg
ZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9sc2hpZnQpOworICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAg
ICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2Ugb3BfbG9vcF9pZl9sZXNzOiB7CisgICAgICAgICAgICBlbWl0U2xvd1NjcmlwdENoZWNr
KGkpOworCisgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgM10u
dS5vcGVyYW5kOworICAgICAgICAgICAgSlNWYWx1ZSogc3JjMmltbSA9IGdldENvbnN0YW50SW1t
ZWRpYXRlTnVtZXJpY0FyZyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kKTsKKyAgICAgICAg
ICAgIGlmIChzcmMyaW1tKSB7CisgICAgICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBf
XyBsYWJlbCgpKTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCAwKTsK
KyAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kLCA0LCBYODY6OmVjeCk7CisgICAgICAgICAgICAgICAgZW1p
dENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9sb29wX2lmX2xlc3MpOworICAgICAgICAg
ICAgICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICAgICAg
X18gbGluayhfXyBqbmUoKSwgbV9sYWJlbHNbaSArIDMgKyB0YXJnZXRdKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgp
KTsKKyAgICAgICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsK
KyAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA0KTsKKyAgICAgICAgICAgICAgICBlbWl0Q1RJ
Q2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2xvb3BfaWZfbGVzcyk7CisgICAgICAgICAgICAg
ICAgX18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgICAgICBfXyBs
aW5rKF9fIGpuZSgpLCBtX2xhYmVsc1tpICsgMyArIHRhcmdldF0pOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9wdXRfYnlfaWQ6IHsKKyAgICAgICAgICAgIGlmIChsaW5rU2xvd0Nhc2VJZk5v
dEpTQ2VsbChpdGVyLCBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKSkKKyAgICAgICAgICAg
ICAgICArK2l0ZXI7CisgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkp
OworCisgICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXJzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKTsKKyAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDQpOwor
ICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICBlbWl0
UHV0Q1RJQXJnKFg4Njo6ZWR4LCA4KTsKKyAgICAgICAgICAgIEptcFNyYyBjYWxsID0gZW1pdENU
SUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfaWQpOworCisgICAgICAgICAgICAv
LyBUcmFjayB0aGUgbG9jYXRpb24gb2YgdGhlIGNhbGw7IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJl
Y292ZXIgcmVwYXRjaCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVChtX2NvZGVCbG9j
ay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbklu
ZGV4XS5ieXRlY29kZUluZGV4ID09IGkpOworICAgICAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0Nv
bXBpbGF0aW9uSW5mb1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhdLmNhbGxSZXR1cm5M
b2NhdGlvbiA9IGNhbGw7CisgICAgICAgICAgICArK3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25J
bmRleDsKKworICAgICAgICAgICAgaSArPSA4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWQ6IHsKKyAgICAgICAgICAgIC8vIEFzIGZvciB0
aGUgaG90IHBhdGggb2YgZ2V0X2J5X2lkLCBhYm92ZSwgd2UgZW5zdXJlIHRoYXQgd2UgY2FuIHVz
ZSBhbiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgb2Zmc2V0CisgICAgICAgICAgICAvLyBzbyB0aGF0
IHdlIG9ubHkgbmVlZCB0cmFjayBvbmUgcG9pbnRlciBpbnRvIHRoZSBzbG93IGNhc2UgY29kZSAt
IHdlIHRyYWNrIGEgcG9pbnRlciB0byB0aGUgbG9jYXRpb24KKyAgICAgICAgICAgIC8vIG9mIHRo
ZSBjYWxsICh3aGljaCB3ZSBjYW4gdXNlIHRvIGxvb2sgdXAgdGhlIHJlcGF0Y2ggaW5mb3JtYXRp
b24pLCBidXQgc2hvdWxkIGEgYXJyYXktbGVuZ3RoIG9yCisgICAgICAgICAgICAvLyBwcm90b3R5
cGUgYWNjZXNzIHRyYW1wb2xpbmUgZmFpbCB3ZSB3YW50IHRvIGJhaWwgb3V0IGJhY2sgdG8gaGVy
ZS4gIFRvIGRvIHNvIHdlIGNhbiBzdWJ0cmFjdCBiYWNrCisgICAgICAgICAgICAvLyB0aGUgZGlz
dGFuY2UgZnJvbSB0aGUgY2FsbCB0byB0aGUgaGVhZCBvZiB0aGUgc2xvdyBjYXNlLgorCisgICAg
ICAgICAgICBpZiAobGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZCkpCisgICAgICAgICAgICAgICAgKytpdGVyOworICAgICAgICAgICAgX18g
bGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICAgICAg
ICAgIEptcERzdCBjb2xkUGF0aEJlZ2luID0gX18gbGFiZWwoKTsKKyNlbmRpZiAgICAgICAgCisg
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAgICAgIElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSAr
IDNdLnUub3BlcmFuZF0pOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgNCk7CisgICAgICAgICAgICBKbXBTcmMgY2Fs
bCA9IGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkKTsKKyAgICAg
ICAgICAgIEFTU0VSVChYODZBc3NlbWJsZXI6OmdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKGNv
bGRQYXRoQmVnaW4sIGNhbGwpID09IHJlcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsKTsK
KyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCk7CisKKyAgICAgICAgICAgIC8vIFRyYWNrIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2Fs
bDsgdGhpcyB3aWxsIGJlIHVzZWQgdG8gcmVjb3ZlciByZXBhdGNoIGluZm9ybWF0aW9uLgorICAg
ICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1tw
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhdLmJ5dGVjb2RlSW5kZXggPT0gaSk7CisgICAg
ICAgICAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW3Byb3BlcnR5QWNjZXNzSW5z
dHJ1Y3Rpb25JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gY2FsbDsKKyAgICAgICAgICAgICsr
cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4OworCisgICAgICAgICAgICBpICs9IDg7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2xvb3BfaWZfbGVz
c2VxOiB7CisgICAgICAgICAgICBlbWl0U2xvd1NjcmlwdENoZWNrKGkpOworCisgICAgICAgICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOworICAgICAg
ICAgICAgSlNWYWx1ZSogc3JjMmltbSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhp
bnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGlmIChzcmMyaW1tKSB7
CisgICAgICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAg
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCAwKTsKKyAgICAgICAgICAgICAgICBl
bWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVy
YW5kLCA0LCBYODY6OmVjeCk7CisgICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJw
cmV0ZXI6OmN0aV9vcF9sb29wX2lmX2xlc3NlcSk7CisgICAgICAgICAgICAgICAgX18gdGVzdGxf
cnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgICAgICBfXyBsaW5rKF9fIGpuZSgp
LCBtX2xhYmVsc1tpICsgMyArIHRhcmdldF0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAg
ICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgICAg
IGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgICAgIGVtaXRQdXRDVElB
cmcoWDg2OjplZHgsIDQpOworICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJl
dGVyOjpjdGlfb3BfbG9vcF9pZl9sZXNzZXEpOworICAgICAgICAgICAgICAgIF9fIHRlc3RsX3Jy
KFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICAgICAgX18gbGluayhfXyBqbmUoKSwg
bV9sYWJlbHNbaSArIDMgKyB0YXJnZXRdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkg
Kz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHJl
X2luYzogeworICAgICAgICAgICAgdW5zaWduZWQgc3JjRHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZDsKKyAgICAgICAgICAgIEptcFNyYyBub3RJbW0gPSBpdGVyLT5mcm9tOworICAg
ICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAg
ICBfXyBzdWJsX2k4cihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKEpTSW1tZWRpYXRlOjpv
bmVJbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIF9fIGxpbmsobm90SW1tLCBf
XyBsYWJlbCgpKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAg
ICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wcmVfaW5jKTsKKyAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICAgICAgICAgIGkg
Kz0gMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0
X2J5X3ZhbDogeworICAgICAgICAgICAgLy8gTm9ybWFsIHNsb3cgY2FzZXMgLSBlaXRoZXIgaXMg
bm90IGFuIGltbWVkaWF0ZSBpbW0sIG9yIGlzIGFuIGFycmF5LgorICAgICAgICAgICAgSm1wU3Jj
IG5vdEltbSA9IGl0ZXItPmZyb207CisgICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9t
LCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxh
YmVsKCkpOworICAgICAgICAgICAgZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVjayhYODY6OmVk
eCk7CisgICAgICAgICAgICBfXyBsaW5rKG5vdEltbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4
Njo6ZWN4LCBpKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgNCk7CisgICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnKFg4Njo6ZWN4LCA4KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJl
dGVyOjpjdGlfb3BfcHV0X2J5X3ZhbCk7CisgICAgICAgICAgICBfXyBsaW5rKF9fIGptcCgpLCBt
X2xhYmVsc1tpICsgNF0pOworCisgICAgICAgICAgICAvLyBzbG93IGNhc2VzIGZvciBpbW1lZGlh
dGUgaW50IGFjY2Vzc2VzIHRvIGFycmF5cworICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+
ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBf
XyBsYWJlbCgpKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rp
b25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplY3gsIGkpOworICAgICAgICAgICAgZW1pdFB1dENU
SUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA0
KTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplY3gsIDgpOworICAgICAgICAgICAg
ZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfdmFsX2FycmF5KTsKKwor
ICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9sb29wX2lmX3RydWU6IHsKKyAgICAgICAgICAgIGVtaXRTbG93U2NyaXB0Q2hl
Y2soaSk7CisKKyAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Cisg
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAgICAgIGVtaXRD
VElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfanRydWUpOworICAgICAgICAgICAgX18gdGVz
dGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9
IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBfXyBsaW5rKF9fIGpu
ZSgpLCBtX2xhYmVsc1tpICsgMiArIHRhcmdldF0pOworICAgICAgICAgICAgaSArPSAzOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wcmVfZGVjOiB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBzcmNEc3QgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5k
OworICAgICAgICAgICAgSm1wU3JjIG5vdEltbSA9IGl0ZXItPmZyb207CisgICAgICAgICAgICBf
XyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIF9fIGFkZGxf
aThyKGdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlhdGUoSlNJbW1lZGlhdGU6Om9uZUltbWVkaWF0
ZSgpKSwgWDg2OjplYXgpOworICAgICAgICAgICAgX18gbGluayhub3RJbW0sIF9fIGxhYmVsKCkp
OworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICBl
bWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3ByZV9kZWMpOworICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOworICAgICAgICAgICAgaSArPSAyOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9qbmxlc3M6IHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBKU1ZhbHVlKiBzcmMyaW1tID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1l
cmljQXJnKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaWYgKHNy
YzJpbW0pIHsKKyAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkp
OworICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDApOworICAgICAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAy
XS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChp
LCBJbnRlcnByZXRlcjo6Y3RpX29wX2psZXNzKTsKKyAgICAgICAgICAgICAgICBfXyB0ZXN0bF9y
cihYODY6OmVheCwgWDg2OjplYXgpOworICAgICAgICAgICAgICAgIF9fIGxpbmsoX18gamUoKSwg
bV9sYWJlbHNbaSArIDMgKyB0YXJnZXRdKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgICAg
ICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgICAgICBl
bWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJn
KFg4Njo6ZWR4LCA0KTsKKyAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRl
cjo6Y3RpX29wX2psZXNzKTsKKyAgICAgICAgICAgICAgICBfXyB0ZXN0bF9ycihYODY6OmVheCwg
WDg2OjplYXgpOworICAgICAgICAgICAgICAgIF9fIGxpbmsoX18gamUoKSwgbV9sYWJlbHNbaSAr
IDMgKyB0YXJnZXRdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfbm90OiB7CisgICAgICAg
ICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgX18geG9y
bF9pOHIoSlNJbW1lZGlhdGU6OkZ1bGxUYWdUeXBlQm9vbCwgWDg2OjplYXgpOworICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChp
LCBJbnRlcnByZXRlcjo6Y3RpX29wX25vdCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSAz
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9qZmFsc2U6
IHsKKyAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3BfanRydWUpOworICAgICAgICAgICAgX18gdGVzdGxfcnIo
WDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3Ry
dWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBfXyBsaW5rKF9fIGplKCksIG1f
bGFiZWxzW2kgKyAyICsgdGFyZ2V0XSk7IC8vIGludmVydGVkIQorICAgICAgICAgICAgaSArPSAz
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wb3N0X2lu
YzogeworICAgICAgICAgICAgdW5zaWduZWQgc3JjRHN0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Cisg
ICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAg
ICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1pdENUSUNhbGwo
aSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wb3N0X2luYyk7CisgICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHNyY0RzdCwgWDg2OjplZHgpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkg
Kz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfYml0
bm90OiB7CisgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOworICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICBlbWl0Q1RJ
Q2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2JpdG5vdCk7CisgICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAg
ICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBv
cF9iaXRhbmQ6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNyYzEgPSBpbnN0cnVjdGlvbltpICsg
Ml0udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgc3JjMiA9IGluc3RydWN0aW9uW2kg
KyAzXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25lZCBkc3QgPSBpbnN0cnVjdGlvbltp
ICsgMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaWYgKGdldENvbnN0YW50SW1tZWRpYXRlTnVt
ZXJpY0FyZyhzcmMxKSkgeworICAgICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18g
bGFiZWwoKSk7CisgICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0
ZXIoc3JjMSwgMCwgWDg2OjplY3gpOworICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2
OjplYXgsIDQpOworICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpj
dGlfb3BfYml0YW5kKTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0Fy
ZyhzcmMyKSkgeworICAgICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwo
KSk7CisgICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgNCwgWDg2Ojpl
Y3gpOworICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bf
Yml0YW5kKTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwg
X18gbGFiZWwoKSk7CisgICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVn
aXN0ZXIoc3JjMSwgMCwgWDg2OjplY3gpOworICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmco
WDg2OjplZHgsIDQpOworICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVy
OjpjdGlfb3BfYml0YW5kKTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICs9IDU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2p0cnVlOiB7CisgICAgICAgICAgICBf
XyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgZW1pdFB1dENUSUFy
ZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6
Y3RpX29wX2p0cnVlKTsKKyAgICAgICAgICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVh
eCk7CisgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgMl0udS5v
cGVyYW5kOworICAgICAgICAgICAgX18gbGluayhfXyBqbmUoKSwgbV9sYWJlbHNbaSArIDIgKyB0
YXJnZXRdKTsKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3BfcG9zdF9kZWM6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNy
Y0RzdCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBfXyBsaW5r
KGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+
ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAw
KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcG9zdF9k
ZWMpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIFg4Njo6ZWR4
KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX2JpdHhvcjogeworICAgICAgICAgICAgX18gbGluayhp
dGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2Ojpl
YXgsIDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgNCk7CisgICAgICAg
ICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2JpdHhvcik7CisgICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgaSArPSA1OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9iaXRvcjogeworICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBf
XyBsYWJlbCgpKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgNCk7CisgICAgICAgICAgICBlbWl0Q1RJ
Q2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2JpdG9yKTsKKyAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAg
ICBpICs9IDU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X2VxOiB7CisgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOworICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnKFg4Njo6ZWR4LCA0KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJl
dGVyOjpjdGlfb3BfZXEpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0
cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbmVxOiB7CisgICAgICAgICAg
ICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgZW1pdFB1dENU
SUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA0
KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbmVxKTsK
KyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBDVElfQ09NUElMRV9CSU5BUllfT1BfU0xPV19DQVNFX0RPVUJMRV9FTlRS
WShvcF9zdHJpY3RlcSk7CisgICAgICAgIENUSV9DT01QSUxFX0JJTkFSWV9PUF9TTE9XX0NBU0Vf
RE9VQkxFX0VOVFJZKG9wX25zdHJpY3RlcSk7CisgICAgICAgIGNhc2Ugb3BfaW5zdGFuY2VvZjog
eworICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAg
ICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgX18g
bGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJ
QXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBY
ODY6OmVjeCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rlcihp
bnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA0LCBYODY6OmVjeCk7CisgICAgICAgICAgICBl
bWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgNF0udS5vcGVy
YW5kLCA4LCBYODY6OmVjeCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRl
cjo6Y3RpX29wX2luc3RhbmNlb2YpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0gNTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbW9kOiB7CisgICAg
ICAgICAgICBKbXBTcmMgbm90SW1tMSA9IGl0ZXItPmZyb207CisgICAgICAgICAgICBKbXBTcmMg
bm90SW1tMiA9ICgrK2l0ZXIpLT5mcm9tOworICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+
ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlh
dGUoWDg2OjplYXgpOworICAgICAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKFg4
Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIGxpbmsobm90SW1tMSwgX18gbGFiZWwoKSk7CisgICAg
ICAgICAgICBfXyBsaW5rKG5vdEltbTIsIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgZW1pdFB1
dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWN4
LCA0KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbW9k
KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX211bDogeworICAgICAgICAgICAgaW50IGRzdCA9IGlu
c3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgc3JjMSA9IGluc3Ry
dWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgc3JjMiA9IGluc3RydWN0
aW9uW2kgKyAzXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBKU1ZhbHVlKiBzcmMxVmFsdWUgPSBn
ZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMSk7CisgICAgICAgICAgICBKU1ZhbHVl
KiBzcmMyVmFsdWUgPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMik7CisgICAg
ICAgICAgICBpbnQzMl90IHZhbHVlOworICAgICAgICAgICAgaWYgKHNyYzFWYWx1ZSAmJiAoKHZh
bHVlID0gSlNJbW1lZGlhdGU6OmludFZhbHVlKHNyYzFWYWx1ZSkpID4gMCkpIHsKKyAgICAgICAg
ICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgICAg
IF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgICAgIC8v
IFRoZXJlIGlzIGFuIGV4dHJhIHNsb3cgY2FzZSBmb3IgKG9wMSAqIC1OKSBvciAoLU4gKiBvcDIp
LCB0byBjaGVjayBmb3IgMCBzaW5jZSB0aGlzIHNob3VsZCBwcm9kdWNlIGEgcmVzdWx0IG9mIC0w
LgorICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzEs
IDAsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxS
ZWdpc3RlcihzcmMyLCA0LCBYODY6OmVjeCk7CisgICAgICAgICAgICAgICAgZW1pdENUSUNhbGwo
aSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9tdWwpOworICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3JjMlZhbHVlICYmICgo
dmFsdWUgPSBKU0ltbWVkaWF0ZTo6aW50VmFsdWUoc3JjMlZhbHVlKSkgPiAwKSkgeworICAgICAg
ICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICAg
ICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICAgICAg
Ly8gVGhlcmUgaXMgYW4gZXh0cmEgc2xvdyBjYXNlIGZvciAob3AxICogLU4pIG9yICgtTiAqIG9w
MiksIHRvIGNoZWNrIGZvciAwIHNpbmNlIHRoaXMgc2hvdWxkIHByb2R1Y2UgYSByZXN1bHQgb2Yg
LTAuCisgICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc3Jj
MSwgMCwgWDg2OjplY3gpOworICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVh
bFJlZ2lzdGVyKHNyYzIsIDQsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgICAgICBlbWl0Q1RJQ2Fs
bChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX211bCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
Y29tcGlsZUJpbmFyeUFyaXRoT3BTbG93Q2FzZShvcF9tdWwsIGl0ZXIsIGRzdCwgc3JjMSwgc3Jj
MiwgT3BlcmFuZFR5cGVzOjpmcm9tSW50KGluc3RydWN0aW9uW2kgKyA0XS51Lm9wZXJhbmQpLCBp
KTsKKyAgICAgICAgICAgIGkgKz0gNTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgY2FzZSBvcF9jYWxsOgorICAgICAgICBjYXNlIG9wX2NhbGxfZXZhbDoKKyAgICAg
ICAgY2FzZSBvcF9jb25zdHJ1Y3Q6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGNhbGxlZSA9IGluc3RydWN0aW9u
W2kgKyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgYXJnQ291bnQgPSBpbnN0cnVjdGlv
bltpICsgM10udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gaW5z
dHJ1Y3Rpb25baSArIDRdLnUub3BlcmFuZDsKKworICAgICAgICAgICAgX18gbGluayhpdGVyLT5m
cm9tLCBfXyBsYWJlbCgpKTsKKworICAgICAgICAgICAgLy8gVGhlIGFyZ3VtZW50cyBoYXZlIGJl
ZW4gc2V0IHVwIG9uIHRoZSBob3QgcGF0aCBmb3Igb3BfY2FsbF9ldmFsCisgICAgICAgICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfY2FsbCkKKyAgICAgICAgICAgICAgICBjb21waWxlT3BDYWxsU2V0
dXBBcmdzKGluc3RydWN0aW9uICsgaSk7CisgICAgICAgICAgICBlbHNlIGlmIChvcGNvZGVJRCA9
PSBvcF9jb25zdHJ1Y3QpCisgICAgICAgICAgICAgICAgY29tcGlsZU9wQ29uc3RydWN0U2V0dXBB
cmdzKGluc3RydWN0aW9uICsgaSk7CisKKyAgICAgICAgICAgIC8vIEZhc3QgY2hlY2sgZm9yIEpT
IGZ1bmN0aW9uLgorICAgICAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFz
aywgWDg2OjplY3gpOworICAgICAgICAgICAgSm1wU3JjIGNhbGxMaW5rRmFpbE5vdE9iamVjdCA9
IF9fIGpuZSgpOworICAgICAgICAgICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQ+KG1faW50ZXJwcmV0ZXItPm1fanNGdW5jdGlvblZwdHIpLCBYODY6OmVjeCk7CisgICAg
ICAgICAgICBKbXBTcmMgY2FsbExpbmtGYWlsTm90SlNGdW5jdGlvbiA9IF9fIGpuZSgpOworCisg
ICAgICAgICAgICAvLyBGaXJzdCwgaW4gdGhlIGNhc2Ugb2YgYSBjb25zdHJ1Y3QsIGFsbG9jYXRl
IHRoZSBuZXcgb2JqZWN0LgorICAgICAgICAgICAgaWYgKG9wY29kZUlEID09IG9wX2NvbnN0cnVj
dCkgeworICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bf
Y29uc3RydWN0X0pTQ29uc3RydWN0KTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlZ2lzdGVyT2Zmc2V0IC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXpl
IC0gYXJnQ291bnQpOworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2Fs
bGVlLCBYODY6OmVjeCwgaSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIF9fIG1vdmxf
aTMycihhcmdDb3VudCwgWDg2OjplZHgpOworCisgICAgICAgICAgICAvLyBTcGVjdWxhdGl2ZWx5
IHJvbGwgdGhlIGNhbGxmcmFtZSwgYXNzdW1pbmcgYXJnQ291bnQgd2lsbCBtYXRjaCB0aGUgYXJp
dHkuCisgICAgICAgICAgICBfXyBtb3ZsX3JtKFg4Njo6ZWRpLCAoUmVnaXN0ZXJGaWxlOjpDYWxs
ZXJGcmFtZSArIHJlZ2lzdGVyT2Zmc2V0KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSksIFg4Njo6ZWRpKTsKKyAgICAgICAgICAgIF9fIGFkZGxfaTMycihyZWdpc3Rlck9mZnNl
dCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSksIFg4Njo6ZWRpKTsKKworICAg
ICAgICAgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0KKyAgICAgICAgICAgICAgICBlbWl0TmFrZWRDYWxs
KGksIG1faW50ZXJwcmV0ZXItPm1fY3RpVmlydHVhbENhbGxQcmVMaW5rKTsKKworICAgICAgICAg
ICAgSm1wU3JjIHN0b3JlUmVzdWx0Rm9yRmlyc3RSdW4gPSBfXyBqbXAoKTsKKworICAgICAgICAg
ICAgLy8gVGhpcyBpcyB0aGUgYWRkcmVzcyBmb3IgdGhlIGNvbGQgcGF0aCAqYWZ0ZXIqIHRoZSBm
aXJzdCBydW4gKHdoaWNoIHRyaWVzIHRvIGxpbmsgdGhlIGNhbGwpLgorICAgICAgICAgICAgbV9j
YWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY29sZFBh
dGhPdGhlciA9IF9fIGxhYmVsKCk7CisKKyAgICAgICAgICAgIC8vIFRoZSBhcmd1bWVudHMgaGF2
ZSBiZWVuIHNldCB1cCBvbiB0aGUgaG90IHBhdGggZm9yIG9wX2NhbGxfZXZhbAorICAgICAgICAg
ICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGwpCisgICAgICAgICAgICAgICAgY29tcGlsZU9wQ2Fs
bFNldHVwQXJncyhpbnN0cnVjdGlvbiArIGkpOworICAgICAgICAgICAgZWxzZSBpZiAob3Bjb2Rl
SUQgPT0gb3BfY29uc3RydWN0KQorICAgICAgICAgICAgICAgIGNvbXBpbGVPcENvbnN0cnVjdFNl
dHVwQXJncyhpbnN0cnVjdGlvbiArIGkpOworCisgICAgICAgICAgICAvLyBDaGVjayBmb3IgSlNG
dW5jdGlvbnMuCisgICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNr
LCBYODY6OmVjeCk7CisgICAgICAgICAgICBKbXBTcmMgaXNOb3RPYmplY3QgPSBfXyBqbmUoKTsK
KyAgICAgICAgICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2lu
dGVycHJldGVyLT5tX2pzRnVuY3Rpb25WcHRyKSwgWDg2OjplY3gpOworICAgICAgICAgICAgSm1w
U3JjIGlzSlNGdW5jdGlvbiA9IF9fIGplKCk7CisKKyAgICAgICAgICAgIC8vIFRoaXMgaGFuZGxl
cyBob3N0IGZ1bmN0aW9ucworICAgICAgICAgICAgSm1wRHN0IG5vdEpTRnVuY3Rpb25sYWJlbCA9
IF9fIGxhYmVsKCk7CisgICAgICAgICAgICBfXyBsaW5rKGlzTm90T2JqZWN0LCBub3RKU0Z1bmN0
aW9ubGFiZWwpOworICAgICAgICAgICAgX18gbGluayhjYWxsTGlua0ZhaWxOb3RPYmplY3QsIG5v
dEpTRnVuY3Rpb25sYWJlbCk7CisgICAgICAgICAgICBfXyBsaW5rKGNhbGxMaW5rRmFpbE5vdEpT
RnVuY3Rpb24sIG5vdEpTRnVuY3Rpb25sYWJlbCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChp
LCAoKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCkgPyBJbnRlcnByZXRlcjo6Y3RpX29wX2NvbnN0
cnVjdF9Ob3RKU0NvbnN0cnVjdCA6IEludGVycHJldGVyOjpjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0
aW9uKSk7CisgICAgICAgICAgICBKbXBTcmMgd2FzTm90SlNGdW5jdGlvbiA9IF9fIGptcCgpOwor
CisgICAgICAgICAgICAvLyBOZXh0LCBoYW5kbGUgSlNGdW5jdGlvbnMuLi4KKyAgICAgICAgICAg
IF9fIGxpbmsoaXNKU0Z1bmN0aW9uLCBfXyBsYWJlbCgpKTsKKworICAgICAgICAgICAgLy8gRmly
c3QsIGluIHRoZSBjYXNlIG9mIGEgY29uc3RydWN0LCBhbGxvY2F0ZSB0aGUgbmV3IG9iamVjdC4K
KyAgICAgICAgICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QpIHsKKyAgICAgICAgICAg
ICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2NvbnN0cnVjdF9KU0NvbnN0
cnVjdCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9m
ZnNldCAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGFyZ0NvdW50KTsKKyAg
ICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgWDg2OjplY3gsIGkp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTcGVjdWxhdGl2ZWx5IHJvbGwgdGhl
IGNhbGxmcmFtZSwgYXNzdW1pbmcgYXJnQ291bnQgd2lsbCBtYXRjaCB0aGUgYXJpdHkuCisgICAg
ICAgICAgICBfXyBtb3ZsX3JtKFg4Njo6ZWRpLCAoUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSAr
IHJlZ2lzdGVyT2Zmc2V0KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSksIFg4
Njo6ZWRpKTsKKyAgICAgICAgICAgIF9fIGFkZGxfaTMycihyZWdpc3Rlck9mZnNldCAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSksIFg4Njo6ZWRpKTsKKyAgICAgICAgICAgIF9f
IG1vdmxfaTMycihhcmdDb3VudCwgWDg2OjplZHgpOworCisgICAgICAgICAgICBlbWl0TmFrZWRD
YWxsKGksIG1faW50ZXJwcmV0ZXItPm1fY3RpVmlydHVhbENhbGwpOworCisgICAgICAgICAgICAv
LyBQdXQgdGhlIHJldHVybiB2YWx1ZSBpbiBkc3QuIEluIHRoZSBpbnRlcnByZXRlciwgb3BfcmV0
IGRvZXMgdGhpcy4KKyAgICAgICAgICAgIEptcERzdCBzdG9yZVJlc3VsdCA9IF9fIGxhYmVsKCk7
CisgICAgICAgICAgICBfXyBsaW5rKHdhc05vdEpTRnVuY3Rpb24sIHN0b3JlUmVzdWx0KTsKKyAg
ICAgICAgICAgIF9fIGxpbmsoc3RvcmVSZXN1bHRGb3JGaXJzdFJ1biwgc3RvcmVSZXN1bHQpOwor
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisjaWYgRU5BQkxFKENP
REVCTE9DS19TQU1QTElORykKKyAgICAgICAgICAgIF9fIG1vdmxfaTMybShyZWludGVycHJldF9j
YXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jayksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+Y29k
ZUJsb2NrU2xvdCgpKTsKKyNlbmRpZgorICAgICAgICAgICAgKytjYWxsTGlua0luZm9JbmRleDsK
KworICAgICAgICAgICAgaSArPSAob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gNyA6IDUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF90b19qc251bWJl
cjogeworICAgICAgICAgICAgaWYgKGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGluc3Ry
dWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQpKQorICAgICAgICAgICAgICAgICsraXRlcjsKKyAgICAg
ICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7CisKKyAgICAgICAgICAgIGVt
aXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50
ZXJwcmV0ZXI6OmN0aV9vcF90b19qc251bWJlcik7CisKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBp
ICs9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSgoaXRlciArIDEpID09IG1f
c2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8gIT0gKGl0ZXIgKyAxKS0+dG8sIk5vdCBlbm91Z2gg
anVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOworICAgICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKGZpcnN0VG8gPT0gaXRlci0+dG8sICJUb28gbWFueSBqdW1wcyBsaW5rZWQgaW4g
c2xvdyBjYXNlIGNvZGVnZW4uIik7CisKKyAgICAgICAgX18gbGluayhfXyBqbXAoKSwgbV9sYWJl
bHNbaV0pOworICAgIH0KKworICAgIEFTU0VSVChwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5k
ZXggPT0gbV9jb2RlQmxvY2stPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25zLnNpemUoKSk7Cisg
ICAgQVNTRVJUKGNhbGxMaW5rSW5mb0luZGV4ID09IG1fY29kZUJsb2NrLT5jYWxsTGlua0luZm9z
LnNpemUoKSk7Cit9CisKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZSgpCit7CisjaWYgRU5BQkxF
KENPREVCTE9DS19TQU1QTElORykKKyAgICAgICAgX18gbW92bF9pMzJtKHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQ+KG1fY29kZUJsb2NrKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5jb2Rl
QmxvY2tTbG90KCkpOworI2VuZGlmCisjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKKyAgICAg
ICAgX18gbW92bF9pMzJtKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIo
KS0+c2FtcGxlU2xvdCgpKTsKKyNlbmRpZgorCisgICAgLy8gQ291bGQgdXNlIGEgcG9wbF9tLCBi
dXQgd291bGQgbmVlZCB0byBvZmZzZXQgdGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbiBpZiBzby4K
KyAgICBfXyBwb3BsX3IoWDg2OjplY3gpOworICAgIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihY
ODY6OmVjeCwgUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQyk7CisKKyAgICBKbXBTcmMgc2xvd1JlZ2lz
dGVyRmlsZUNoZWNrOworICAgIEptcERzdCBhZnRlclJlZ2lzdGVyRmlsZUNoZWNrOworICAgIGlm
IChtX2NvZGVCbG9jay0+Y29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlKSB7CisgICAgICAgIC8vIElu
IHRoZSBjYXNlIG9mIGEgZmFzdCBsaW5rZWQgY2FsbCwgd2UgZG8gbm90IHNldCB0aGlzIHVwIGlu
IHRoZSBjYWxsZXIuCisgICAgICAgIF9fIG1vdmxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2ln
bmVkPihtX2NvZGVCbG9jayksIFJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrICogc3RhdGljX2Nhc3Q8
aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkpOworCisgICAgICAgIGVtaXRHZXRDVElQ
YXJhbShDVElfQVJHU19yZWdpc3RlckZpbGUsIFg4Njo6ZWF4KTsKKyAgICAgICAgX18gbGVhbF9t
cihtX2NvZGVCbG9jay0+bnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSwgWDg2
OjplZGksIFg4Njo6ZWR4KTsKKyAgICAgICAgX18gY21wbF9tcihGSUVMRF9PRkZTRVQoUmVnaXN0
ZXJGaWxlLCBtX2VuZCksIFg4Njo6ZWF4LCBYODY6OmVkeCk7CisgICAgICAgIHNsb3dSZWdpc3Rl
ckZpbGVDaGVjayA9IF9fIGpnKCk7CisgICAgICAgIGFmdGVyUmVnaXN0ZXJGaWxlQ2hlY2sgPSBf
XyBsYWJlbCgpOworICAgIH0KKworICAgIHByaXZhdGVDb21waWxlTWFpblBhc3MoKTsKKyAgICBw
cml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7CisgICAgcHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKTsK
KworICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlKSB7CisgICAg
ICAgIF9fIGxpbmsoc2xvd1JlZ2lzdGVyRmlsZUNoZWNrLCBfXyBsYWJlbCgpKTsKKyAgICAgICAg
ZW1pdENUSUNhbGwoMCwgSW50ZXJwcmV0ZXI6OmN0aV9yZWdpc3Rlcl9maWxlX2NoZWNrKTsKKyAg
ICAgICAgSm1wU3JjIGJhY2tUb0JvZHkgPSBfXyBqbXAoKTsKKyAgICAgICAgX18gbGluayhiYWNr
VG9Cb2R5LCBhZnRlclJlZ2lzdGVyRmlsZUNoZWNrKTsKKyAgICB9CisKKyAgICBBU1NFUlQobV9q
bXBUYWJsZS5pc0VtcHR5KCkpOworCisgICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5
KCk7CisKKyAgICAvLyBUcmFuc2xhdGUgdlBDIG9mZnNldHMgaW50byBhZGRyZXNzZXMgaW4gSklU
IGdlbmVyYXRlZCBjb2RlLCBmb3Igc3dpdGNoIHRhYmxlcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9zd2l0Y2hlcy5zaXplKCk7ICsraSkgeworICAgICAgICBTd2l0Y2hSZWNvcmQg
cmVjb3JkID0gbV9zd2l0Y2hlc1tpXTsKKyAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9
IHJlY29yZC5ieXRlY29kZUluZGV4OworCisgICAgICAgIGlmIChyZWNvcmQudHlwZSAhPSBTd2l0
Y2hSZWNvcmQ6OlN0cmluZykgeworICAgICAgICAgICAgQVNTRVJUKHJlY29yZC50eXBlID09IFN3
aXRjaFJlY29yZDo6SW1tZWRpYXRlIHx8IHJlY29yZC50eXBlID09IFN3aXRjaFJlY29yZDo6Q2hh
cmFjdGVyKTsgCisgICAgICAgICAgICBBU1NFUlQocmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVKdW1w
VGFibGUtPmJyYW5jaE9mZnNldHMuc2l6ZSgpID09IHJlY29yZC5qdW1wVGFibGUuc2ltcGxlSnVt
cFRhYmxlLT5jdGlPZmZzZXRzLnNpemUoKSk7CisKKyAgICAgICAgICAgIHJlY29yZC5qdW1wVGFi
bGUuc2ltcGxlSnVtcFRhYmxlLT5jdGlEZWZhdWx0ID0gX18gZ2V0UmVsb2NhdGVkQWRkcmVzcyhj
b2RlLCBtX2xhYmVsc1tieXRlY29kZUluZGV4ICsgMyArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7
CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCByZWNvcmQuanVtcFRhYmxl
LnNpbXBsZUp1bXBUYWJsZS0+YnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraikgeworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHJlY29yZC5qdW1wVGFibGUuc2ltcGxlSnVtcFRhYmxl
LT5icmFuY2hPZmZzZXRzW2pdOworICAgICAgICAgICAgICAgIHJlY29yZC5qdW1wVGFibGUuc2lt
cGxlSnVtcFRhYmxlLT5jdGlPZmZzZXRzW2pdID0gb2Zmc2V0ID8gX18gZ2V0UmVsb2NhdGVkQWRk
cmVzcyhjb2RlLCBtX2xhYmVsc1tieXRlY29kZUluZGV4ICsgMyArIG9mZnNldF0pIDogcmVjb3Jk
Lmp1bXBUYWJsZS5zaW1wbGVKdW1wVGFibGUtPmN0aURlZmF1bHQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQocmVjb3JkLnR5cGUgPT0gU3dpdGNo
UmVjb3JkOjpTdHJpbmcpOworCisgICAgICAgICAgICByZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1
bXBUYWJsZS0+Y3RpRGVmYXVsdCA9IF9fIGdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9sYWJl
bHNbYnl0ZWNvZGVJbmRleCArIDMgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOworCisgICAgICAg
ICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBlbmQgPSBy
ZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1bXBUYWJsZS0+b2Zmc2V0VGFibGUuZW5kKCk7ICAgICAg
ICAgICAgCisgICAgICAgICAgICBmb3IgKFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFi
bGU6Oml0ZXJhdG9yIGl0ID0gcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1wVGFibGUtPm9mZnNl
dFRhYmxlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgIHVuc2ln
bmVkIG9mZnNldCA9IGl0LT5zZWNvbmQuYnJhbmNoT2Zmc2V0OworICAgICAgICAgICAgICAgIGl0
LT5zZWNvbmQuY3RpT2Zmc2V0ID0gb2Zmc2V0ID8gX18gZ2V0UmVsb2NhdGVkQWRkcmVzcyhjb2Rl
LCBtX2xhYmVsc1tieXRlY29kZUluZGV4ICsgMyArIG9mZnNldF0pIDogcmVjb3JkLmp1bXBUYWJs
ZS5zdHJpbmdKdW1wVGFibGUtPmN0aURlZmF1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBmb3IgKFZlY3RvcjxIYW5kbGVySW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBt
X2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcnMuYmVnaW4oKTsgaXRlciAhPSBtX2NvZGVCbG9j
ay0+ZXhjZXB0aW9uSGFuZGxlcnMuZW5kKCk7ICsraXRlcikKKyAgICAgICAgIGl0ZXItPm5hdGl2
ZUNvZGUgPSBfXyBnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIG1fbGFiZWxzW2l0ZXItPnRhcmdl
dF0pOworCisgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2Nh
bGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIGlm
IChpdGVyLT50bykKKyAgICAgICAgICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBpdGVyLT5m
cm9tLCBpdGVyLT50byk7CisgICAgICAgIG1fY29kZUJsb2NrLT5jdGlSZXR1cm5BZGRyZXNzVlBD
TWFwLmFkZChfXyBnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIGl0ZXItPmZyb20pLCBpdGVyLT5i
eXRlY29kZUluZGV4KTsKKyAgICB9CisKKyAgICAvLyBMaW5rIGFic29sdXRlIGFkZHJlc3NlcyBm
b3IganNyCisgICAgZm9yIChWZWN0b3I8SlNSSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX2pzclNp
dGVzLmJlZ2luKCk7IGl0ZXIgIT0gbV9qc3JTaXRlcy5lbmQoKTsgKytpdGVyKQorICAgICAgICBY
ODZBc3NlbWJsZXI6OmxpbmtBYnNvbHV0ZUFkZHJlc3MoY29kZSwgaXRlci0+YWRkclBvc2l0aW9u
LCBpdGVyLT50YXJnZXQpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29kZUJs
b2NrLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBT
dHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5wcm9wZXJ0eUFjY2Vzc0luc3Ry
dWN0aW9uc1tpXTsKKyAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBYODZBc3NlbWJs
ZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9u
SW5mb1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pOworICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9
IFg4NkFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX3Byb3BlcnR5QWNjZXNz
Q29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhCZWdpbik7CisgICAgfQorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvc1tp
XTsKKyAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBYODZBc3NlbWJsZXI6OmdldFJl
bG9jYXRlZEFkZHJlc3MoY29kZSwgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tp
XS5jYWxsUmV0dXJuTG9jYXRpb24pOworICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IFg4NkFz
c2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29t
cGlsYXRpb25JbmZvW2ldLmhvdFBhdGhCZWdpbik7CisgICAgICAgIGluZm8uaG90UGF0aE90aGVy
ID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIG1fY2FsbFN0cnVjdHVy
ZVN0dWJDb21waWxhdGlvbkluZm9baV0uaG90UGF0aE90aGVyKTsKKyAgICAgICAgaW5mby5jb2xk
UGF0aE90aGVyID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIG1fY2Fs
bFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uY29sZFBhdGhPdGhlcik7CisgICAgfQor
CisgICAgbV9jb2RlQmxvY2stPmN0aUNvZGUgPSBjb2RlOworfQorCit2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkU2VsZihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9m
ZnNldCwgdm9pZCogcmV0dXJuQWRkcmVzcykKK3sKKyAgICAvLyBDaGVjayBlYXggaXMgYW4gb2Jq
ZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCisgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0
ZTo6VGFnTWFzaywgWDg2OjplYXgpOworICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMxID0gX18gam5l
KCk7CisgICAgSm1wU3JjIGZhaWx1cmVDYXNlczIgPSBjaGVja1N0cnVjdHVyZShYODY6OmVheCwg
c3RydWN0dXJlKTsKKworICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXREaXJlY3RPZmZzZXQK
KyAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2Up
LCBYODY6OmVheCwgWDg2OjplYXgpOworICAgIF9fIG1vdmxfbXIoY2FjaGVkT2Zmc2V0ICogc2l6
ZW9mKEpTVmFsdWUqKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICBfXyByZXQoKTsKKworICAg
IHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weSgpOworCisgICAgWDg2QXNzZW1ibGVyOjps
aW5rKGNvZGUsIGZhaWx1cmVDYXNlczEsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJl
dGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3NlbGZfZmFpbCkpOworICAgIFg4NkFzc2VtYmxlcjo6bGlu
ayhjb2RlLCBmYWlsdXJlQ2FzZXMyLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRl
cjo6Y3RpX29wX2dldF9ieV9pZF9zZWxmX2ZhaWwpKTsKKyAgICAKKyAgICBtX2NvZGVCbG9jay0+
Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcykuc3R1YlJvdXRpbmUgPSBjb2RlOworICAgIAorICAg
IGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIGNvZGUpOworfQor
Cit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCB2
b2lkKiByZXR1cm5BZGRyZXNzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyNpZiBVU0UoQ1RJ
X1JFUEFUQ0hfUElDKQorICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2st
PmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOworCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBy
ZXBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRf
Z2VuZXJpYy4KKyAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNz
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9w
cm90b19saXN0KSk7CisKKyAgICAvLyBUaGUgcHJvdG90eXBlIG9iamVjdCBkZWZpbml0ZWx5IGV4
aXN0cyAoaWYgdGhpcyBzdHViIGV4aXN0cyB0aGUgQ29kZUJsb2NrIGlzIHJlZmVyZW5jaW5nIGEg
U3RydWN0dXJlIHRoYXQgaXMKKyAgICAvLyByZWZlcmVuY2luZyB0aGUgcHJvdG90eXBlIG9iamVj
dCAtIGxldCdzIHNwZWN1bGF0aXZlbHkgbG9hZCBpdCdzIHRhYmxlIG5pY2UgYW5kIGVhcmx5ISkK
KyAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSBhc09iamVjdChzdHJ1Y3R1cmUtPnByb3RvdHlw
ZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKKyAgICBQcm9wZXJ0eVN0b3JhZ2UqIHByb3RvUHJvcGVy
dHlTdG9yYWdlID0gJnByb3RvT2JqZWN0LT5tX3Byb3BlcnR5U3RvcmFnZTsKKyAgICBfXyBtb3Zs
X21yKHN0YXRpY19jYXN0PHZvaWQqPihwcm90b1Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWR4KTsK
KworICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0IFN0cnVjdHVyZS4K
KyAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMSA9IGNoZWNrU3RydWN0dXJlKFg4Njo6ZWF4LCBzdHJ1
Y3R1cmUpOworCisgICAgLy8gQ2hlY2sgdGhlIHByb3RvdHlwZSBvYmplY3QncyBTdHJ1Y3R1cmUg
aGFkIG5vdCBjaGFuZ2VkLgorICAgIFN0cnVjdHVyZSoqIHByb3RvdHlwZVN0cnVjdHVyZUFkZHJl
c3MgPSAmKHByb3RvT2JqZWN0LT5tX3N0cnVjdHVyZSk7CisgICAgX18gY21wbF9pMzJtKHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHByb3RvdHlwZVN0cnVjdHVyZSksIHByb3RvdHlwZVN0cnVj
dHVyZUFkZHJlc3MpOworICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMyID0gX18gam5lKCk7CisKKyAg
ICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0RGlyZWN0T2Zmc2V0CisgICAgX18gbW92bF9tcihj
YWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVkeCwgWDg2OjplYXgpOworCisg
ICAgSm1wU3JjIHN1Y2Nlc3MgPSBfXyBqbXAoKTsKKworICAgIHZvaWQqIGNvZGUgPSBfXyBleGVj
dXRhYmxlQ29weSgpOworCisgICAgLy8gVXNlIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uIHRvIGxp
bmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRp
bmUuCisgICAgdm9pZCogc2xvd0Nhc2VCZWdpbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGlu
Zm8uY2FsbFJldHVybkxvY2F0aW9uKSAtIHJlcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxs
OworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMxLCBzbG93Q2FzZUJl
Z2luKTsKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2VzMiwgc2xvd0Nh
c2VCZWdpbik7CisKKyAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0
Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9y
IHVzLgorICAgIGludHB0cl90IHN1Y2Nlc3NEZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9m
ZnNldDsKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgc3VjY2VzcywgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oc3VjY2Vzc0Rlc3QpKTsKKworICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhh
dmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KKyAgICBpbmZvLnN0
dWJSb3V0aW5lID0gY29kZTsKKworICAgIC8vIEZpbmFsbHkgcmVwYXRjaCB0aGUganVtcCB0byBz
bG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCisgICAg
aW50cHRyX3Qgam1wTG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmZvLmhv
dFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2U7CisgICAg
WDg2QXNzZW1ibGVyOjpyZXBhdGNoQnJhbmNoT2Zmc2V0KGptcExvY2F0aW9uLCBjb2RlKTsKKyNl
bHNlCisgICAgLy8gVGhlIHByb3RvdHlwZSBvYmplY3QgZGVmaW5pdGVseSBleGlzdHMgKGlmIHRo
aXMgc3R1YiBleGlzdHMgdGhlIENvZGVCbG9jayBpcyByZWZlcmVuY2luZyBhIFN0cnVjdHVyZSB0
aGF0IGlzCisgICAgLy8gcmVmZXJlbmNpbmcgdGhlIHByb3RvdHlwZSBvYmplY3QgLSBsZXQncyBz
cGVjdWxhdGl2ZWx5IGxvYWQgaXQncyB0YWJsZSBuaWNlIGFuZCBlYXJseSEpCisgICAgSlNPYmpl
Y3QqIHByb3RvT2JqZWN0ID0gYXNPYmplY3Qoc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAo
Y2FsbEZyYW1lKSk7CisgICAgUHJvcGVydHlTdG9yYWdlKiBwcm90b1Byb3BlcnR5U3RvcmFnZSA9
ICZwcm90b09iamVjdC0+bV9wcm9wZXJ0eVN0b3JhZ2U7CisgICAgX18gbW92bF9tcihzdGF0aWNf
Y2FzdDx2b2lkKj4ocHJvdG9Qcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVkeCk7CisKKyAgICAvLyBD
aGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCisgICAgX18gdGVz
dGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOworICAgIEptcFNyYyBmYWls
dXJlQ2FzZXMxID0gX18gam5lKCk7CisgICAgSm1wU3JjIGZhaWx1cmVDYXNlczIgPSBjaGVja1N0
cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJlKTsKKworICAgIC8vIENoZWNrIHRoZSBwcm90b3R5
cGUgb2JqZWN0J3MgU3RydWN0dXJlIGhhZCBub3QgY2hhbmdlZC4KKyAgICBTdHJ1Y3R1cmUqKiBw
cm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzID0gJihwcm90b09iamVjdC0+bV9zdHJ1Y3R1cmUpOwor
ICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihwcm90b3R5cGVTdHJ1
Y3R1cmUpLCBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzKTsKKyAgICBKbXBTcmMgZmFpbHVyZUNh
c2VzMyA9IF9fIGpuZSgpOworCisgICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldERpcmVjdE9m
ZnNldAorICAgIF9fIG1vdmxfbXIoY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2
OjplZHgsIFg4Njo6ZWF4KTsKKworICAgIF9fIHJldCgpOworCisgICAgdm9pZCogY29kZSA9IF9f
IGV4ZWN1dGFibGVDb3B5KCk7CisKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVy
ZUNhc2VzMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRf
YnlfaWRfcHJvdG9fZmFpbCkpOworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJl
Q2FzZXMyLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9i
eV9pZF9wcm90b19mYWlsKSk7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVD
YXNlczMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5
X2lkX3Byb3RvX2ZhaWwpKTsKKworICAgIG1fY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5B
ZGRyZXNzKS5zdHViUm91dGluZSA9IGNvZGU7CisKKyAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJu
QWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBjb2RlKTsKKyNlbmRpZgorfQorCisjaWYgVVNFKENUSV9S
RVBBVENIX1BJQykKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdChTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCog
cG9seW1vcnBoaWNTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCkKK3sKKyAgICBKbXBTcmMgZmFpbHVyZUNhc2UgPSBj
aGVja1N0cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJlKTsKKyAgICBfXyBtb3ZsX21yKEZJRUxE
X09GRlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplYXgp
OworICAgIF9fIG1vdmxfbXIoY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2Ojpl
YXgsIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgc3VjY2VzcyA9IF9fIGptcCgpOworCisgICAgdm9p
ZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7CisgICAgQVNTRVJUKGNvZGUpOworCisgICAg
Ly8gVXNlIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMg
YmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCisgICAgdm9pZCogbGFzdFBy
b3RvQmVnaW4gPSBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0u
c3R1YlJvdXRpbmU7CisgICAgaWYgKCFsYXN0UHJvdG9CZWdpbikKKyAgICAgICAgbGFzdFByb3Rv
QmVnaW4gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0
aW9uKSAtIHJlcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsOworCisgICAgWDg2QXNzZW1i
bGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlLCBsYXN0UHJvdG9CZWdpbik7CisKKyAgICAvLyBP
biBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBp
dCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgorICAgIGludHB0cl90IHN1
Y2Nlc3NEZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3R1YkluZm8tPmhvdFBhdGhC
ZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0OworICAgIFg4NkFz
c2VtYmxlcjo6bGluayhjb2RlLCBzdWNjZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihzdWNj
ZXNzRGVzdCkpOworCisgICAgc3RydWN0dXJlLT5yZWYoKTsKKyAgICBwb2x5bW9ycGhpY1N0cnVj
dHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FjaGVkT2Zmc2V0LCBjb2RlLCBzdHJ1Y3R1
cmUpOworCisgICAgLy8gRmluYWxseSByZXBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNr
IGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KKyAgICBpbnRwdHJfdCBqbXBM
b2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHN0dWJJbmZvLT5ob3RQYXRoQmVn
aW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlOworICAgIFg4NkFzc2Vt
Ymxlcjo6cmVwYXRjaEJyYW5jaE9mZnNldChqbXBMb2NhdGlvbiwgY29kZSk7Cit9CisKK3ZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVy
ZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHBy
b3RvdHlwZVN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCit7CisgICAgLy8gVGhlIHByb3RvdHlwZSBvYmplY3QgZGVmaW5pdGVseSBleGlzdHMgKGlm
IHRoaXMgc3R1YiBleGlzdHMgdGhlIENvZGVCbG9jayBpcyByZWZlcmVuY2luZyBhIFN0cnVjdHVy
ZSB0aGF0IGlzCisgICAgLy8gcmVmZXJlbmNpbmcgdGhlIHByb3RvdHlwZSBvYmplY3QgLSBsZXQn
cyBzcGVjdWxhdGl2ZWx5IGxvYWQgaXQncyB0YWJsZSBuaWNlIGFuZCBlYXJseSEpCisgICAgSlNP
YmplY3QqIHByb3RvT2JqZWN0ID0gYXNPYmplY3Qoc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29r
dXAoY2FsbEZyYW1lKSk7CisgICAgUHJvcGVydHlTdG9yYWdlKiBwcm90b1Byb3BlcnR5U3RvcmFn
ZSA9ICZwcm90b09iamVjdC0+bV9wcm9wZXJ0eVN0b3JhZ2U7CisgICAgX18gbW92bF9tcihzdGF0
aWNfY2FzdDx2b2lkKj4ocHJvdG9Qcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVkeCk7CisKKyAgICAv
LyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCisgICAgSm1w
U3JjIGZhaWx1cmVDYXNlczEgPSBjaGVja1N0cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJlKTsK
KworICAgIC8vIENoZWNrIHRoZSBwcm90b3R5cGUgb2JqZWN0J3MgU3RydWN0dXJlIGhhZCBub3Qg
Y2hhbmdlZC4KKyAgICBTdHJ1Y3R1cmUqKiBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzID0gJihw
cm90b09iamVjdC0+bV9zdHJ1Y3R1cmUpOworICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9j
YXN0PHVpbnQzMl90Pihwcm90b3R5cGVTdHJ1Y3R1cmUpLCBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRy
ZXNzKTsKKyAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMiA9IF9fIGpuZSgpOworCisgICAgLy8gQ2hl
Y2tzIG91dCBva2F5ISAtIGdldERpcmVjdE9mZnNldAorICAgIF9fIG1vdmxfbXIoY2FjaGVkT2Zm
c2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplZHgsIFg4Njo6ZWF4KTsKKworICAgIEptcFNy
YyBzdWNjZXNzID0gX18gam1wKCk7CisKKyAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNv
cHkoKTsKKworICAgIC8vIFVzZSB0aGUgcmVwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBm
YWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgorICAg
IHZvaWQqIGxhc3RQcm90b0JlZ2luID0gcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50
SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFp
bHVyZUNhc2VzMSwgbGFzdFByb3RvQmVnaW4pOworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2Rl
LCBmYWlsdXJlQ2FzZXMyLCBsYXN0UHJvdG9CZWdpbik7CisKKyAgICAvLyBPbiBzdWNjZXNzIHJl
dHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZv
cm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgorICAgIGludHB0cl90IHN1Y2Nlc3NEZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3R1YkluZm8tPmhvdFBhdGhCZWdpbikgKyByZXBh
dGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0OworICAgIFg4NkFzc2VtYmxlcjo6bGlu
ayhjb2RlLCBzdWNjZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihzdWNjZXNzRGVzdCkpOwor
CisgICAgc3RydWN0dXJlLT5yZWYoKTsKKyAgICBwcm90b3R5cGVTdHJ1Y3R1cmUtPnJlZigpOwor
ICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FjaGVkT2Zm
c2V0LCBjb2RlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSk7CisKKyAgICAvLyBGaW5h
bGx5IHJlcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRv
IGp1bXAgaGVyZSBpbnN0ZWFkLgorICAgIGludHB0cl90IGptcExvY2F0aW9uID0gcmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4oc3R1YkluZm8tPmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0
R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2U7CisgICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoQnJhbmNo
T2Zmc2V0KGptcExvY2F0aW9uLCBjb2RlKTsKK30KKwordm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
R2V0QnlJZENoYWluTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRl
eCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNv
dW50LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBB
U1NFUlQoY291bnQpOworICAgIAorICAgIFZlY3RvcjxKbXBTcmM+IGJ1Y2tldHNPZkZhaWw7CisK
KyAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCisg
ICAgYnVja2V0c09mRmFpbC5hcHBlbmQoY2hlY2tTdHJ1Y3R1cmUoWDg2OjplYXgsIHN0cnVjdHVy
ZSkpOworCisgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIFJl
ZlB0cjxTdHJ1Y3R1cmU+KiBjaGFpbkVudHJpZXMgPSBjaGFpbi0+aGVhZCgpOworICAgIEpTT2Jq
ZWN0KiBwcm90b09iamVjdCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKKyAgICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5w
cm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKSk7CisgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBj
aGFpbkVudHJpZXNbaV0uZ2V0KCk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHByb3RvdHlwZSBv
YmplY3QncyBTdHJ1Y3R1cmUgaGFkIG5vdCBjaGFuZ2VkLgorICAgICAgICBTdHJ1Y3R1cmUqKiBw
cm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzID0gJihwcm90b09iamVjdC0+bV9zdHJ1Y3R1cmUpOwor
ICAgICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oY3VyclN0cnVj
dHVyZSksIHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MpOworICAgICAgICBidWNrZXRzT2ZGYWls
LmFwcGVuZChfXyBqbmUoKSk7CisgICAgfQorICAgIEFTU0VSVChwcm90b09iamVjdCk7CisKKyAg
ICBQcm9wZXJ0eVN0b3JhZ2UqIHByb3RvUHJvcGVydHlTdG9yYWdlID0gJnByb3RvT2JqZWN0LT5t
X3Byb3BlcnR5U3RvcmFnZTsKKyAgICBfXyBtb3ZsX21yKHN0YXRpY19jYXN0PHZvaWQqPihwcm90
b1Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWR4KTsKKyAgICBfXyBtb3ZsX21yKGNhY2hlZE9mZnNl
dCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWR4LCBYODY6OmVheCk7CisgICAgSm1wU3JjIHN1
Y2Nlc3MgPSBfXyBqbXAoKTsKKworICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weSgp
OworCisgICAgLy8gVXNlIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1
cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCisgICAgdm9p
ZCogbGFzdFByb3RvQmVnaW4gPSBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRl
eCAtIDFdLnN0dWJSb3V0aW5lOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1Y2tl
dHNPZkZhaWwuc2l6ZSgpOyArK2kpCisgICAgICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBi
dWNrZXRzT2ZGYWlsW2ldLCBsYXN0UHJvdG9CZWdpbik7CisKKyAgICAvLyBPbiBzdWNjZXNzIHJl
dHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZv
cm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgorICAgIGludHB0cl90IHN1Y2Nlc3NEZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3R1YkluZm8tPmhvdFBhdGhCZWdpbikgKyByZXBh
dGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0OworICAgIFg4NkFzc2VtYmxlcjo6bGlu
ayhjb2RlLCBzdWNjZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihzdWNjZXNzRGVzdCkpOwor
CisgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBi
ZSBkZWxldGVkIGxhdGVyLgorICAgIHN0cnVjdHVyZS0+cmVmKCk7CisgICAgY2hhaW4tPnJlZigp
OworICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FjaGVk
T2Zmc2V0LCBjb2RlLCBzdHJ1Y3R1cmUsIGNoYWluKTsKKworICAgIC8vIEZpbmFsbHkgcmVwYXRj
aCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJl
IGluc3RlYWQuCisgICAgaW50cHRyX3Qgam1wTG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGlu
dHB0cl90PihzdHViSW5mby0+aG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkQnJh
bmNoVG9TbG93Q2FzZTsKKyAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hCcmFuY2hPZmZzZXQoam1w
TG9jYXRpb24sIGNvZGUpOworfQorI2VuZGlmCisKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRDaGFpbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBz
aXplX3QgY291bnQsIHNpemVfdCBjYWNoZWRPZmZzZXQsIHZvaWQqIHJldHVybkFkZHJlc3MsIENh
bGxGcmFtZSogY2FsbEZyYW1lKQoreworI2lmIFVTRShDVElfUkVQQVRDSF9QSUMpCisgICAgU3Ry
dWN0dXJlU3R1YkluZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRk
cmVzcyk7CisKKyAgICAvLyBXZSBkb24ndCB3YW50IHRvIHJlcGF0Y2ggbW9yZSB0aGFuIG9uY2Ug
LSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgorICAgIGN0aVJlcGF0
Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKTsKKworICAgIEFT
U0VSVChjb3VudCk7CisgICAgCisgICAgVmVjdG9yPEptcFNyYz4gYnVja2V0c09mRmFpbDsKKwor
ICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0IFN0cnVjdHVyZS4KKyAg
ICBidWNrZXRzT2ZGYWlsLmFwcGVuZChjaGVja1N0cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJl
KSk7CisKKyAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgUmVm
UHRyPFN0cnVjdHVyZT4qIGNoYWluRW50cmllcyA9IGNoYWluLT5oZWFkKCk7CisgICAgSlNPYmpl
Y3QqIHByb3RvT2JqZWN0ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7
ICsraSkgeworICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnBy
b3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKKyAgICAgICAgY3VyclN0cnVjdHVyZSA9IGNo
YWluRW50cmllc1tpXS5nZXQoKTsKKworICAgICAgICAvLyBDaGVjayB0aGUgcHJvdG90eXBlIG9i
amVjdCdzIFN0cnVjdHVyZSBoYWQgbm90IGNoYW5nZWQuCisgICAgICAgIFN0cnVjdHVyZSoqIHBy
b3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MgPSAmKHByb3RvT2JqZWN0LT5tX3N0cnVjdHVyZSk7Cisg
ICAgICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihjdXJyU3RydWN0
dXJlKSwgcHJvdG90eXBlU3RydWN0dXJlQWRkcmVzcyk7CisgICAgICAgIGJ1Y2tldHNPZkZhaWwu
YXBwZW5kKF9fIGpuZSgpKTsKKyAgICB9CisgICAgQVNTRVJUKHByb3RvT2JqZWN0KTsKKworICAg
IFByb3BlcnR5U3RvcmFnZSogcHJvdG9Qcm9wZXJ0eVN0b3JhZ2UgPSAmcHJvdG9PYmplY3QtPm1f
cHJvcGVydHlTdG9yYWdlOworICAgIF9fIG1vdmxfbXIoc3RhdGljX2Nhc3Q8dm9pZCo+KHByb3Rv
UHJvcGVydHlTdG9yYWdlKSwgWDg2OjplZHgpOworICAgIF9fIG1vdmxfbXIoY2FjaGVkT2Zmc2V0
ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplZHgsIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgc3Vj
Y2VzcyA9IF9fIGptcCgpOworCisgICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7
CisKKyAgICAvLyBVc2UgdGhlIHJlcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVy
ZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KKyAgICB2b2lk
KiBzbG93Q2FzZUJlZ2luID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaW5mby5jYWxsUmV0dXJu
TG9jYXRpb24pIC0gcmVwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGw7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVja2V0c09mRmFpbC5zaXplKCk7ICsraSkKKyAgICAgICAg
WDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGJ1Y2tldHNPZkZhaWxbaV0sIHNsb3dDYXNlQmVnaW4p
OworCisgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUs
IGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KKyAg
ICBpbnRwdHJfdCBzdWNjZXNzRGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZm8u
aG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQ7Cisg
ICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIHN1Y2Nlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHN1Y2Nlc3NEZXN0KSk7CisKKyAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0
ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCisgICAgaW5mby5zdHViUm91dGlu
ZSA9IGNvZGU7CisKKyAgICAvLyBGaW5hbGx5IHJlcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNl
IGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgorICAgIGludHB0cl90
IGptcExvY2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVn
aW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlOworICAgIFg4NkFzc2Vt
Ymxlcjo6cmVwYXRjaEJyYW5jaE9mZnNldChqbXBMb2NhdGlvbiwgY29kZSk7CisjZWxzZQorICAg
IEFTU0VSVChjb3VudCk7CisgICAgCisgICAgVmVjdG9yPEptcFNyYz4gYnVja2V0c09mRmFpbDsK
KworICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0IFN0cnVjdHVyZS4K
KyAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7CisgICAg
YnVja2V0c09mRmFpbC5hcHBlbmQoX18gam5lKCkpOworICAgIGJ1Y2tldHNPZkZhaWwuYXBwZW5k
KGNoZWNrU3RydWN0dXJlKFg4Njo6ZWF4LCBzdHJ1Y3R1cmUpKTsKKworICAgIFN0cnVjdHVyZSog
Y3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBSZWZQdHI8U3RydWN0dXJlPiogY2hhaW5F
bnRyaWVzID0gY2hhaW4tPmhlYWQoKTsKKyAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSAwOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIHByb3Rv
T2JqZWN0ID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxG
cmFtZSkpOworICAgICAgICBjdXJyU3RydWN0dXJlID0gY2hhaW5FbnRyaWVzW2ldLmdldCgpOwor
CisgICAgICAgIC8vIENoZWNrIHRoZSBwcm90b3R5cGUgb2JqZWN0J3MgU3RydWN0dXJlIGhhZCBu
b3QgY2hhbmdlZC4KKyAgICAgICAgU3RydWN0dXJlKiogcHJvdG90eXBlU3RydWN0dXJlQWRkcmVz
cyA9ICYocHJvdG9PYmplY3QtPm1fc3RydWN0dXJlKTsKKyAgICAgICAgX18gY21wbF9pMzJtKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGN1cnJTdHJ1Y3R1cmUpLCBwcm90b3R5cGVTdHJ1Y3R1
cmVBZGRyZXNzKTsKKyAgICAgICAgYnVja2V0c09mRmFpbC5hcHBlbmQoX18gam5lKCkpOworICAg
IH0KKyAgICBBU1NFUlQocHJvdG9PYmplY3QpOworCisgICAgUHJvcGVydHlTdG9yYWdlKiBwcm90
b1Byb3BlcnR5U3RvcmFnZSA9ICZwcm90b09iamVjdC0+bV9wcm9wZXJ0eVN0b3JhZ2U7CisgICAg
X18gbW92bF9tcihzdGF0aWNfY2FzdDx2b2lkKj4ocHJvdG9Qcm9wZXJ0eVN0b3JhZ2UpLCBYODY6
OmVkeCk7CisgICAgX18gbW92bF9tcihjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopLCBY
ODY6OmVkeCwgWDg2OjplYXgpOworICAgIF9fIHJldCgpOworCisgICAgdm9pZCogY29kZSA9IF9f
IGV4ZWN1dGFibGVDb3B5KCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVja2V0
c09mRmFpbC5zaXplKCk7ICsraSkKKyAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGJ1
Y2tldHNPZkZhaWxbaV0sIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlf
b3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwpKTsKKworICAgIG1fY29kZUJsb2NrLT5nZXRTdHViSW5m
byhyZXR1cm5BZGRyZXNzKS5zdHViUm91dGluZSA9IGNvZGU7CisKKyAgICBjdGlSZXBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBjb2RlKTsKKyNlbmRpZgorfQorCit2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkUmVwbGFjZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
c2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVzcykKK3sKKyAgICAvLyBDaGVj
ayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCisgICAgX18gdGVzdGxf
aTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOworICAgIEptcFNyYyBmYWlsdXJl
Q2FzZXMxID0gX18gam5lKCk7CisgICAgSm1wU3JjIGZhaWx1cmVDYXNlczIgPSBjaGVja1N0cnVj
dHVyZShYODY6OmVheCwgc3RydWN0dXJlKTsKKworICAgIC8vIGNoZWNrcyBvdXQgb2theSEgLSBw
dXREaXJlY3RPZmZzZXQKKyAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU09iamVjdCwgbV9w
cm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplYXgpOworICAgIF9fIG1vdmxfcm0oWDg2
OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWF4KTsKKyAgICBf
XyByZXQoKTsKKworICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weSgpOworICAgIAor
ICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMxLCByZWludGVycHJldF9j
YXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV9pZF9mYWlsKSk7CisgICAgWDg2
QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X2lkX2ZhaWwpKTsKKworICAgIG1fY29kZUJs
b2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKS5zdHViUm91dGluZSA9IGNvZGU7CisgICAg
CisgICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgY29kZSk7
Cit9CisKK2V4dGVybiAiQyIgeworCisgICAgc3RhdGljIEpTT2JqZWN0KiByZXNpemVQcm9wZXJ0
eVN0b3JhZ2UoSlNPYmplY3QqIGJhc2VPYmplY3QsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3
U2l6ZSkKKyAgICB7CisgICAgICAgIGJhc2VPYmplY3QtPmFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
SW5saW5lKG9sZFNpemUsIG5ld1NpemUpOworICAgICAgICByZXR1cm4gYmFzZU9iamVjdDsKKyAg
ICB9CisKK30KKworc3RhdGljIGlubGluZSBib29sIHRyYW5zaXRpb25XaWxsTmVlZFN0b3JhZ2VS
ZWFsbG9jKFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSkK
K3sKKyAgICByZXR1cm4gb2xkU3RydWN0dXJlLT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpICE9
IG5ld1N0cnVjdHVyZS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKTsKK30KKwordm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUs
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBTdHJ1Y3R1cmVD
aGFpbiogY2hhaW4sIHZvaWQqIHJldHVybkFkZHJlc3MpCit7CisgICAgVmVjdG9yPEptcFNyYywg
MTY+IGZhaWx1cmVDYXNlczsKKyAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSBy
aWdodCBTdHJ1Y3R1cmUuCisgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywg
WDg2OjplYXgpOworICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoX18gam5lKCkpOworICAgIF9fIGNt
cGxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihvbGRTdHJ1Y3R1cmUpLCBGSUVMRF9P
RkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4KTsKKyAgICBmYWlsdXJlQ2FzZXMu
YXBwZW5kKF9fIGpuZSgpKTsKKyAgICBWZWN0b3I8Sm1wU3JjPiBzdWNjZXNzQ2FzZXM7CisKKyAg
ICAvLyAgZWN4ID0gYmFzZU9iamVjdAorICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2Vs
bCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwgWDg2OjplY3gpOworICAgIC8vIHByb3RvKGVjeCkg
PSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBlKCkKKyAgICBfXyBjbXBsX2kzMm0o
T2JqZWN0VHlwZSwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mbykgKyBGSUVMRF9P
RkZTRVQoVHlwZUluZm8sIG1fdHlwZSksIFg4Njo6ZWN4KTsKKyAgICBmYWlsdXJlQ2FzZXMuYXBw
ZW5kKF9fIGpuZSgpKTsKKyAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1f
cHJvdG90eXBlKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKKyAgICAKKyAgICAvLyBlY3ggPSBiYXNl
T2JqZWN0LT5tX3N0cnVjdHVyZQorICAgIGZvciAoUmVmUHRyPFN0cnVjdHVyZT4qIGl0ID0gY2hh
aW4tPmhlYWQoKTsgKml0OyArK2l0KSB7CisgICAgICAgIC8vIG51bGwgY2hlY2sgdGhlIHByb3Rv
dHlwZQorICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKGpzTnVsbCgpKSwgWDg2OjplY3gp
OworICAgICAgICBzdWNjZXNzQ2FzZXMuYXBwZW5kKF9fIGplKCkpOworCisgICAgICAgIC8vIENo
ZWNrIHRoZSBzdHJ1Y3R1cmUgaWQKKyAgICAgICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDMyX3Q+KGl0LT5nZXQoKSksIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJl
KSwgWDg2OjplY3gpOworICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKF9fIGpuZSgpKTsKKyAg
ICAgICAgCisgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1
cmUpLCBYODY6OmVjeCwgWDg2OjplY3gpOworICAgICAgICBfXyBjbXBsX2kzMm0oT2JqZWN0VHlw
ZSwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mbykgKyBGSUVMRF9PRkZTRVQoVHlw
ZUluZm8sIG1fdHlwZSksIFg4Njo6ZWN4KTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChf
XyBqbmUoKSk7CisgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV9w
cm90b3R5cGUpLCBYODY6OmVjeCwgWDg2OjplY3gpOworICAgIH0KKworICAgIGZhaWx1cmVDYXNl
cy5hcHBlbmQoX18gam5lKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdWNjZXNz
Q2FzZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIF9fIGxpbmsoc3VjY2Vzc0Nhc2VzW2ldLCBfXyBs
YWJlbCgpKTsKKworICAgIEptcFNyYyBjYWxsVGFyZ2V0OworCisgICAgLy8gZW1pdCBhIGNhbGwg
b25seSBpZiBzdG9yYWdlIHJlYWxsb2MgaXMgbmVlZGVkCisgICAgaWYgKHRyYW5zaXRpb25XaWxs
TmVlZFN0b3JhZ2VSZWFsbG9jKG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlKSkgeworICAgICAg
ICBfXyBwdXNobF9yKFg4Njo6ZWR4KTsKKyAgICAgICAgX18gcHVzaGxfaTMyKG5ld1N0cnVjdHVy
ZS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSk7CisgICAgICAgIF9fIHB1c2hsX2kzMihvbGRT
dHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCkpOworICAgICAgICBfXyBwdXNobF9y
KFg4Njo6ZWF4KTsKKyAgICAgICAgY2FsbFRhcmdldCA9IF9fIGNhbGwoKTsKKyAgICAgICAgX18g
YWRkbF9pMzJyKDMgKiBzaXplb2Yodm9pZCopLCBYODY6OmVzcCk7CisgICAgICAgIF9fIHBvcGxf
cihYODY6OmVkeCk7CisgICAgfQorCisgICAgLy8gQXNzdW1lcyBtX3JlZkNvdW50IGNhbiBiZSBk
ZWNyZW1lbnRlZCBlYXNpbHksIHJlZmNvdW50IGRlY3JlbWVudCBpcyBzYWZlIGFzIAorICAgIC8v
IGNvZGVibG9jayBzaG91bGQgZW5zdXJlIG9sZFN0cnVjdHVyZS0+bV9yZWZDb3VudCA+IDAKKyAg
ICBfXyBzdWJsX2k4bSgxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihvbGRTdHJ1Y3R1cmUpKTsK
KyAgICBfXyBhZGRsX2k4bSgxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihuZXdTdHJ1Y3R1cmUp
KTsKKyAgICBfXyBtb3ZsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4obmV3U3RydWN0
dXJlKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCk7CisKKyAg
ICAvLyB3cml0ZSB0aGUgdmFsdWUKKyAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU09iamVj
dCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplYXgpOworICAgIF9fIG1vdmxf
cm0oWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWF4KTsK
KworICAgIF9fIHJldCgpOworICAgIAorICAgIEptcFNyYyBmYWlsdXJlSnVtcDsKKyAgICBpZiAo
ZmFpbHVyZUNhc2VzLnNpemUoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZmFpbHVyZUNhc2VzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgX18gbGluayhmYWlsdXJlQ2Fz
ZXNbaV0sIF9fIGxhYmVsKCkpOworICAgICAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2VG
b3JUcmFtcG9saW5lKCk7CisgICAgICAgIGZhaWx1cmVKdW1wID0gX18gam1wKCk7CisgICAgfQor
CisgICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7CisKKyAgICBpZiAoZmFpbHVy
ZUNhc2VzLnNpemUoKSkKKyAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVK
dW1wLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV9p
ZF9mYWlsKSk7CisKKyAgICBpZiAodHJhbnNpdGlvbldpbGxOZWVkU3RvcmFnZVJlYWxsb2Mob2xk
U3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpKQorICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29k
ZSwgY2FsbFRhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVzaXplUHJvcGVydHlTdG9y
YWdlKSk7CisgICAgCisgICAgbV9jb2RlQmxvY2stPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3Mp
LnN0dWJSb3V0aW5lID0gY29kZTsKKyAgICAKKyAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRk
cmVzcyhyZXR1cm5BZGRyZXNzLCBjb2RlKTsKK30KKwordm9pZCBKSVQ6OnVubGlua0NhbGwoQ2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm8pCit7CisgICAgLy8gV2hlbiB0aGUgSlNGdW5jdGlvbiBp
cyBkZWxldGVkIHRoZSBwb2ludGVyIGVtYmVkZGVkIGluIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0g
d2lsbCBubyBsb25nZXIgYmUgdmFsaWQKKyAgICAvLyAoYW5kLCBpZiBhIG5ldyBKU0Z1bmN0aW9u
IGhhcHBlbmVkIHRvIGJlIGNvbnN0cnVjdGVkIGF0IHRoZSBzYW1lIGxvY2F0aW9uLCB3ZSBjb3Vs
ZCBnZXQgYSBmYWxzZSBwb3NpdGl2ZQorICAgIC8vIG1hdGNoKS4gIFJlc2V0IHRoZSBjaGVjayBz
byBpdCBubyBsb25nZXIgbWF0Y2hlcy4KKyAgICByZWludGVycHJldF9jYXN0PHZvaWQqKj4oY2Fs
bExpbmtJbmZvLT5ob3RQYXRoQmVnaW4pWy0xXSA9IGFzUG9pbnRlcihKU0ltbWVkaWF0ZTo6aW1w
b3NzaWJsZVZhbHVlKCkpOworfQorCit2b2lkIEpJVDo6bGlua0NhbGwoSlNGdW5jdGlvbiogY2Fs
bGVlLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgdm9pZCogY3RpQ29kZSwgQ2FsbExpbmtJ
bmZvKiBjYWxsTGlua0luZm8sIGludCBjYWxsZXJBcmdDb3VudCkKK3sKKyAgICAvLyBDdXJyZW50
bHkgd2Ugb25seSBsaW5rIGNhbGxzIHdpdGggdGhlIGV4YWN0IG51bWJlciBvZiBhcmd1bWVudHMu
CisgICAgaWYgKGNhbGxlckFyZ0NvdW50ID09IGNhbGxlZUNvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cykgeworICAgICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNMaW5rZWQoKSk7CisgICAgCisg
ICAgICAgIGNhbGxlZUNvZGVCbG9jay0+YWRkQ2FsbGVyKGNhbGxMaW5rSW5mbyk7CisgICAgCisg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihjYWxsTGlua0luZm8tPmhvdFBhdGhCZWdp
bilbLTFdID0gY2FsbGVlOworICAgICAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhj
YWxsTGlua0luZm8tPmhvdFBhdGhPdGhlciwgY3RpQ29kZSk7CisgICAgfQorCisgICAgLy8gcmVw
YXRjaCB0aGUgaW5zdHJ1Y3Rpb24gdGhhdCBqdW1wcyBvdXQgdG8gdGhlIGNvbGQgcGF0aCwgc28g
dGhhdCB3ZSBvbmx5IHRyeSB0byBsaW5rIG9uY2UuCisgICAgdm9pZCogcmVwYXRjaENoZWNrID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KGNhbGxM
aW5rSW5mby0+aG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRPcENhbGxDYWxsKTsKKyAgICBj
dGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXBhdGNoQ2hlY2ssIGNhbGxMaW5rSW5mby0+
Y29sZFBhdGhPdGhlcik7Cit9CisKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVU
cmFtcG9saW5lcygpCit7CisgICAgLy8gKDEpIFRoZSBmaXJzdCBmdW5jdGlvbiBwcm92aWRlcyBm
YXN0IHByb3BlcnR5IGFjY2VzcyBmb3IgYXJyYXkgbGVuZ3RoCisgICAgCisgICAgLy8gQ2hlY2sg
ZWF4IGlzIGFuIGFycmF5CisgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywg
WDg2OjplYXgpOworICAgIEptcFNyYyBhcnJheV9mYWlsdXJlQ2FzZXMxID0gX18gam5lKCk7Cisg
ICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG1faW50ZXJwcmV0ZXIt
Pm1fanNBcnJheVZwdHIpLCBYODY6OmVheCk7CisgICAgSm1wU3JjIGFycmF5X2ZhaWx1cmVDYXNl
czIgPSBfXyBqbmUoKTsKKworICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXQgdGhlIGxlbmd0
aCBmcm9tIHRoZSBzdG9yYWdlCisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNBcnJheSwg
bV9zdG9yYWdlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICBfXyBtb3ZsX21yKEZJRUxEX09G
RlNFVChBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKKworICAg
IF9fIGNtcGxfaTMycihKU0ltbWVkaWF0ZTo6bWF4SW1tZWRpYXRlSW50LCBYODY6OmVheCk7Cisg
ICAgSm1wU3JjIGFycmF5X2ZhaWx1cmVDYXNlczMgPSBfXyBqYSgpOworCisgICAgX18gYWRkbF9y
cihYODY6OmVheCwgWDg2OjplYXgpOworICAgIF9fIGFkZGxfaThyKDEsIFg4Njo6ZWF4KTsKKyAg
ICAKKyAgICBfXyByZXQoKTsKKworICAgIC8vICgyKSBUaGUgc2Vjb25kIGZ1bmN0aW9uIHByb3Zp
ZGVzIGZhc3QgcHJvcGVydHkgYWNjZXNzIGZvciBzdHJpbmcgbGVuZ3RoCisgICAgCisgICAgSm1w
RHN0IHN0cmluZ0xlbmd0aEJlZ2luID0gX18gYWxpZ24oMTYpOworCisgICAgLy8gQ2hlY2sgZWF4
IGlzIGEgc3RyaW5nCisgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2
OjplYXgpOworICAgIEptcFNyYyBzdHJpbmdfZmFpbHVyZUNhc2VzMSA9IF9fIGpuZSgpOworICAg
IF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2ludGVycHJldGVyLT5t
X2pzU3RyaW5nVnB0ciksIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgc3RyaW5nX2ZhaWx1cmVDYXNl
czIgPSBfXyBqbmUoKTsKKworICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXQgdGhlIGxlbmd0
aCBmcm9tIHRoZSBVc3RyaW5nLgorICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTU3RyaW5n
LCBtX3ZhbHVlKSArIEZJRUxEX09GRlNFVChVU3RyaW5nLCBtX3JlcCksIFg4Njo6ZWF4LCBYODY6
OmVheCk7CisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoVVN0cmluZzo6UmVwLCBsZW4pLCBY
ODY6OmVheCwgWDg2OjplYXgpOworCisgICAgX18gY21wbF9pMzJyKEpTSW1tZWRpYXRlOjptYXhJ
bW1lZGlhdGVJbnQsIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgc3RyaW5nX2ZhaWx1cmVDYXNlczMg
PSBfXyBqYSgpOworCisgICAgX18gYWRkbF9ycihYODY6OmVheCwgWDg2OjplYXgpOworICAgIF9f
IGFkZGxfaThyKDEsIFg4Njo6ZWF4KTsKKyAgICAKKyAgICBfXyByZXQoKTsKKworICAgIC8vICgz
KSBUcmFtcG9saW5lcyBmb3IgdGhlIHNsb3cgY2FzZXMgb2Ygb3BfY2FsbCAvIG9wX2NhbGxfZXZh
bCAvIG9wX2NvbnN0cnVjdC4KKyAgICAKKyAgICBKbXBEc3QgdmlydHVhbENhbGxQcmVMaW5rQmVn
aW4gPSBfXyBhbGlnbigxNik7CisKKyAgICAvLyBMb2FkIHRoZSBjYWxsZWUgQ29kZUJsb2NrKiBp
bnRvIGVheAorICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTRnVuY3Rpb24sIG1fYm9keSks
IFg4Njo6ZWN4LCBYODY6OmVheCk7CisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoRnVuY3Rp
b25Cb2R5Tm9kZSwgbV9jb2RlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICBfXyB0ZXN0bF9y
cihYODY6OmVheCwgWDg2OjplYXgpOworICAgIEptcFNyYyBoYXNDb2RlQmxvY2sxID0gX18gam5l
KCk7CisgICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsKKyAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZl
cmVuY2UoKTsKKyAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFt
ZSk7CisgICAgSm1wU3JjIGNhbGxKU0Z1bmN0aW9uMSA9IF9fIGNhbGwoKTsKKyAgICBlbWl0R2V0
Q1RJQXJnKDAsIFg4Njo6ZWN4KTsKKyAgICBlbWl0R2V0Q1RJQXJnKDgsIFg4Njo6ZWR4KTsKKyAg
ICBfXyBwdXNobF9yKFg4Njo6ZWJ4KTsKKyAgICBfXyBsaW5rKGhhc0NvZGVCbG9jazEsIF9fIGxh
YmVsKCkpOworCisgICAgLy8gQ2hlY2sgYXJnQ291bnQgbWF0Y2hlcyBjYWxsZWUgYXJpdHkuCisg
ICAgX18gY21wbF9ybShYODY6OmVkeCwgRklFTERfT0ZGU0VUKENvZGVCbG9jaywgbnVtUGFyYW1l
dGVycyksIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgYXJpdHlDaGVja09rYXkxID0gX18gamUoKTsK
KyAgICBfXyBwb3BsX3IoWDg2OjplYngpOworICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYngsIDQp
OworICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDEyKTsKKyAgICBfXyByZXN0b3JlQXJndW1l
bnRSZWZlcmVuY2UoKTsKKyAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENUSV9BUkdTX2Nh
bGxGcmFtZSk7CisgICAgSm1wU3JjIGNhbGxBcml0eUNoZWNrMSA9IF9fIGNhbGwoKTsKKyAgICBf
XyBtb3ZsX3JyKFg4Njo6ZWR4LCBYODY6OmVkaSk7CisgICAgZW1pdEdldENUSUFyZygwLCBYODY6
OmVjeCk7CisgICAgZW1pdEdldENUSUFyZyg4LCBYODY6OmVkeCk7CisgICAgX18gcHVzaGxfcihY
ODY6OmVieCk7CisgICAgX18gbGluayhhcml0eUNoZWNrT2theTEsIF9fIGxhYmVsKCkpOworCisg
ICAgY29tcGlsZU9wQ2FsbEluaXRpYWxpemVDYWxsRnJhbWUoKTsKKworICAgIF9fIHBvcGxfcihY
ODY6OmVieCk7CisgICAgZW1pdFB1dENUSUFyZyhYODY6OmVieCwgNCk7CisgICAgX18gcmVzdG9y
ZUFyZ3VtZW50UmVmZXJlbmNlKCk7CisgICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElf
QVJHU19jYWxsRnJhbWUpOworICAgIEptcFNyYyBjYWxsRG9udExhenlMaW5rQ2FsbCA9IF9fIGNh
bGwoKTsKKyAgICBfXyBwdXNobF9yKFg4Njo6ZWJ4KTsKKworICAgIF9fIGptcF9yKFg4Njo6ZWF4
KTsKKworICAgIEptcERzdCB2aXJ0dWFsQ2FsbExpbmtCZWdpbiA9IF9fIGFsaWduKDE2KTsKKwor
ICAgIC8vIExvYWQgdGhlIGNhbGxlZSBDb2RlQmxvY2sqIGludG8gZWF4CisgICAgX18gbW92bF9t
cihGSUVMRF9PRkZTRVQoSlNGdW5jdGlvbiwgbV9ib2R5KSwgWDg2OjplY3gsIFg4Njo6ZWF4KTsK
KyAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChGdW5jdGlvbkJvZHlOb2RlLCBtX2NvZGUpLCBY
ODY6OmVheCwgWDg2OjplYXgpOworICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7
CisgICAgSm1wU3JjIGhhc0NvZGVCbG9jazIgPSBfXyBqbmUoKTsKKyAgICBfXyBwb3BsX3IoWDg2
OjplYngpOworICAgIF9fIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOworICAgIGVtaXRQdXRD
VElQYXJhbShYODY6OmVkaSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKKyAgICBKbXBTcmMgY2FsbEpT
RnVuY3Rpb24yID0gX18gY2FsbCgpOworICAgIGVtaXRHZXRDVElBcmcoMCwgWDg2OjplY3gpOwor
ICAgIGVtaXRHZXRDVElBcmcoOCwgWDg2OjplZHgpOworICAgIF9fIHB1c2hsX3IoWDg2OjplYngp
OworICAgIF9fIGxpbmsoaGFzQ29kZUJsb2NrMiwgX18gbGFiZWwoKSk7CisKKyAgICAvLyBDaGVj
ayBhcmdDb3VudCBtYXRjaGVzIGNhbGxlZSBhcml0eS4KKyAgICBfXyBjbXBsX3JtKFg4Njo6ZWR4
LCBGSUVMRF9PRkZTRVQoQ29kZUJsb2NrLCBudW1QYXJhbWV0ZXJzKSwgWDg2OjplYXgpOworICAg
IEptcFNyYyBhcml0eUNoZWNrT2theTIgPSBfXyBqZSgpOworICAgIF9fIHBvcGxfcihYODY6OmVi
eCk7CisgICAgZW1pdFB1dENUSUFyZyhYODY6OmVieCwgNCk7CisgICAgZW1pdFB1dENUSUFyZyhY
ODY6OmVheCwgMTIpOworICAgIF9fIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOworICAgIGVt
aXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKKyAgICBKbXBTcmMg
Y2FsbEFyaXR5Q2hlY2syID0gX18gY2FsbCgpOworICAgIF9fIG1vdmxfcnIoWDg2OjplZHgsIFg4
Njo6ZWRpKTsKKyAgICBlbWl0R2V0Q1RJQXJnKDAsIFg4Njo6ZWN4KTsKKyAgICBlbWl0R2V0Q1RJ
QXJnKDgsIFg4Njo6ZWR4KTsKKyAgICBfXyBwdXNobF9yKFg4Njo6ZWJ4KTsKKyAgICBfXyBsaW5r
KGFyaXR5Q2hlY2tPa2F5MiwgX18gbGFiZWwoKSk7CisKKyAgICBjb21waWxlT3BDYWxsSW5pdGlh
bGl6ZUNhbGxGcmFtZSgpOworCisgICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsKKyAgICBlbWl0UHV0
Q1RJQXJnKFg4Njo6ZWJ4LCA0KTsKKyAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsK
KyAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7CisgICAg
Sm1wU3JjIGNhbGxMYXp5TGlua0NhbGwgPSBfXyBjYWxsKCk7CisgICAgX18gcHVzaGxfcihYODY6
OmVieCk7CisKKyAgICBfXyBqbXBfcihYODY6OmVheCk7CisKKyAgICBKbXBEc3QgdmlydHVhbENh
bGxCZWdpbiA9IF9fIGFsaWduKDE2KTsKKworICAgIC8vIExvYWQgdGhlIGNhbGxlZSBDb2RlQmxv
Y2sqIGludG8gZWF4CisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNGdW5jdGlvbiwgbV9i
b2R5KSwgWDg2OjplY3gsIFg4Njo6ZWF4KTsKKyAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChG
dW5jdGlvbkJvZHlOb2RlLCBtX2NvZGUpLCBYODY6OmVheCwgWDg2OjplYXgpOworICAgIF9fIHRl
c3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgSm1wU3JjIGhhc0NvZGVCbG9jazMgPSBf
XyBqbmUoKTsKKyAgICBfXyBwb3BsX3IoWDg2OjplYngpOworICAgIF9fIHJlc3RvcmVBcmd1bWVu
dFJlZmVyZW5jZSgpOworICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJX0FSR1NfY2Fs
bEZyYW1lKTsKKyAgICBKbXBTcmMgY2FsbEpTRnVuY3Rpb24zID0gX18gY2FsbCgpOworICAgIGVt
aXRHZXRDVElBcmcoMCwgWDg2OjplY3gpOworICAgIGVtaXRHZXRDVElBcmcoOCwgWDg2OjplZHgp
OworICAgIF9fIHB1c2hsX3IoWDg2OjplYngpOworICAgIF9fIGxpbmsoaGFzQ29kZUJsb2NrMywg
X18gbGFiZWwoKSk7CisKKyAgICAvLyBDaGVjayBhcmdDb3VudCBtYXRjaGVzIGNhbGxlZSBhcml0
eS4KKyAgICBfXyBjbXBsX3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoQ29kZUJsb2NrLCBudW1Q
YXJhbWV0ZXJzKSwgWDg2OjplYXgpOworICAgIEptcFNyYyBhcml0eUNoZWNrT2theTMgPSBfXyBq
ZSgpOworICAgIF9fIHBvcGxfcihYODY6OmVieCk7CisgICAgZW1pdFB1dENUSUFyZyhYODY6OmVi
eCwgNCk7CisgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMTIpOworICAgIF9fIHJlc3RvcmVB
cmd1bWVudFJlZmVyZW5jZSgpOworICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJX0FS
R1NfY2FsbEZyYW1lKTsKKyAgICBKbXBTcmMgY2FsbEFyaXR5Q2hlY2szID0gX18gY2FsbCgpOwor
ICAgIF9fIG1vdmxfcnIoWDg2OjplZHgsIFg4Njo6ZWRpKTsKKyAgICBlbWl0R2V0Q1RJQXJnKDAs
IFg4Njo6ZWN4KTsKKyAgICBlbWl0R2V0Q1RJQXJnKDgsIFg4Njo6ZWR4KTsKKyAgICBfXyBwdXNo
bF9yKFg4Njo6ZWJ4KTsKKyAgICBfXyBsaW5rKGFyaXR5Q2hlY2tPa2F5MywgX18gbGFiZWwoKSk7
CisKKyAgICBjb21waWxlT3BDYWxsSW5pdGlhbGl6ZUNhbGxGcmFtZSgpOworCisgICAgLy8gbG9h
ZCBjdGlDb2RlIGZyb20gdGhlIG5ldyBjb2RlQmxvY2suCisgICAgX18gbW92bF9tcihGSUVMRF9P
RkZTRVQoQ29kZUJsb2NrLCBjdGlDb2RlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKKworICAgIF9f
IGptcF9yKFg4Njo6ZWF4KTsKKworICAgIC8vIEFsbCB0cmFtcG9saW5lcyBjb25zdHJ1Y3RlZCEg
Y29weSB0aGUgY29kZSwgbGluayB1cCBjYWxscywgYW5kIHNldCB0aGUgcG9pbnRlcnMgb24gdGhl
IE1hY2hpbmUgb2JqZWN0LgorCisgICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7
CisKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgYXJyYXlfZmFpbHVyZUNhc2VzMSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfYXJyYXlf
ZmFpbCkpOworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBhcnJheV9mYWlsdXJlQ2FzZXMy
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9h
cnJheV9mYWlsKSk7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGFycmF5X2ZhaWx1cmVD
YXNlczMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5
X2lkX2FycmF5X2ZhaWwpKTsKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgc3RyaW5nX2Zh
aWx1cmVDYXNlczEsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3Bf
Z2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIHN0
cmluZ19mYWlsdXJlQ2FzZXMyLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6
Y3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOworICAgIFg4NkFzc2VtYmxlcjo6bGluayhj
b2RlLCBzdHJpbmdfZmFpbHVyZUNhc2VzMywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJw
cmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKKyAgICBYODZBc3NlbWJsZXI6
OmxpbmsoY29kZSwgY2FsbEFyaXR5Q2hlY2sxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRl
cnByZXRlcjo6Y3RpX29wX2NhbGxfYXJpdHlDaGVjaykpOworICAgIFg4NkFzc2VtYmxlcjo6bGlu
ayhjb2RlLCBjYWxsQXJpdHlDaGVjazIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJl
dGVyOjpjdGlfb3BfY2FsbF9hcml0eUNoZWNrKSk7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNv
ZGUsIGNhbGxBcml0eUNoZWNrMywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6
OmN0aV9vcF9jYWxsX2FyaXR5Q2hlY2spKTsKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwg
Y2FsbEpTRnVuY3Rpb24xLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3Rp
X29wX2NhbGxfSlNGdW5jdGlvbikpOworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBjYWxs
SlNGdW5jdGlvbjIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3Bf
Y2FsbF9KU0Z1bmN0aW9uKSk7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGNhbGxKU0Z1
bmN0aW9uMywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxs
X0pTRnVuY3Rpb24pKTsKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgY2FsbERvbnRMYXp5
TGlua0NhbGwsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfdm1fZG9u
dExhenlMaW5rQ2FsbCkpOworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBjYWxsTGF6eUxp
bmtDYWxsLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX3ZtX2xhenlM
aW5rQ2FsbCkpOworCisgICAgbV9pbnRlcnByZXRlci0+bV9jdGlBcnJheUxlbmd0aFRyYW1wb2xp
bmUgPSBjb2RlOworICAgIG1faW50ZXJwcmV0ZXItPm1fY3RpU3RyaW5nTGVuZ3RoVHJhbXBvbGlu
ZSA9IFg4NkFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBzdHJpbmdMZW5ndGhC
ZWdpbik7CisgICAgbV9pbnRlcnByZXRlci0+bV9jdGlWaXJ0dWFsQ2FsbFByZUxpbmsgPSBYODZB
c3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgdmlydHVhbENhbGxQcmVMaW5rQmVn
aW4pOworICAgIG1faW50ZXJwcmV0ZXItPm1fY3RpVmlydHVhbENhbGxMaW5rID0gWDg2QXNzZW1i
bGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIHZpcnR1YWxDYWxsTGlua0JlZ2luKTsKKyAg
ICBtX2ludGVycHJldGVyLT5tX2N0aVZpcnR1YWxDYWxsID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxv
Y2F0ZWRBZGRyZXNzKGNvZGUsIHZpcnR1YWxDYWxsQmVnaW4pOworfQorCit2b2lkIEpJVDo6ZnJl
ZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIpCit7CisgICAg
V1RGOjpmYXN0RnJlZUV4ZWN1dGFibGUoaW50ZXJwcmV0ZXItPm1fY3RpQXJyYXlMZW5ndGhUcmFt
cG9saW5lKTsKK30KKwordm9pZCBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCB2b2lkKiBy
ZXR1cm5BZGRyZXNzKQoreworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZvID0gY29kZUJsb2Nr
LT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKworICAgIC8vIFdlIGRvbid0IHdhbnQgdG8g
cmVwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfZ2V0X2J5X2lk
X2dlbmVyaWMuCisgICAgLy8gU2hvdWxkIHByb2JhYmx5IGdvIHRvIEludGVycHJldGVyOjpjdGlf
b3BfZ2V0X2J5X2lkX2ZhaWwsIGJ1dCB0aGF0IGRvZXNuJ3QgZG8gYW55dGhpbmcgaW50ZXJlc3Rp
bmcgcmlnaHQgbm93LgorICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFk
ZHJlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5
X2lkX3NlbGZfZmFpbCkpOworCisgICAgLy8gUmVwYXRjaCB0aGUgb2Zmc2V0IGludG8gdGhlIHBy
b3BvZXJ0eSBtYXAgdG8gbG9hZCBmcm9tLCB0aGVuIHJlcGF0Y2ggdGhlIFN0cnVjdHVyZSB0byBs
b29rIGZvci4KKyAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hEaXNwbGFjZW1lbnQocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5
SWRQcm9wZXJ0eU1hcE9mZnNldCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSk7Cisg
ICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoSW1tZWRpYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KGluZm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkU3RydWN0dXJlLCBy
ZWludGVycHJldF9jYXN0PHVpbnQzMl90PihzdHJ1Y3R1cmUpKTsKK30KKwordm9pZCBKSVQ6OnBh
dGNoUHV0QnlJZFJlcGxhY2UoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCB2b2lkKiByZXR1cm5BZGRyZXNzKQoreworICAgIFN0
cnVjdHVyZVN0dWJJbmZvJiBpbmZvID0gY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRy
ZXNzKTsKKyAgICAKKyAgICAvLyBXZSBkb24ndCB3YW50IHRvIHJlcGF0Y2ggbW9yZSB0aGFuIG9u
Y2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgorICAgIC8vIFNo
b3VsZCBwcm9iYWJseSBnbyB0byBJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV9pZF9mYWlsLCBi
dXQgdGhhdCBkb2Vzbid0IGRvIGFueXRoaW5nIGludGVyZXN0aW5nIHJpZ2h0IG5vdy4KKyAgICBj
dGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCByZWludGVycHJldF9j
YXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV9pZF9nZW5lcmljKSk7CisKKyAg
ICAvLyBSZXBhdGNoIHRoZSBvZmZzZXQgaW50byB0aGUgcHJvcG9lcnR5IG1hcCB0byBsb2FkIGZy
b20sIHRoZW4gcmVwYXRjaCB0aGUgU3RydWN0dXJlIHRvIGxvb2sgZm9yLgorICAgIFg4NkFzc2Vt
Ymxlcjo6cmVwYXRjaERpc3BsYWNlbWVudChyZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmZv
LmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0LCBj
YWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopKTsKKyAgICBYODZBc3NlbWJsZXI6OnJlcGF0
Y2hJbW1lZGlhdGUocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVnaW4p
ICsgcmVwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMy
X3Q+KHN0cnVjdHVyZSkpOworfQorCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFy
cmF5TGVuZ3RoKHZvaWQqIHJldHVybkFkZHJlc3MpCit7CisgICAgU3RydWN0dXJlU3R1YkluZm8m
IGluZm8gPSBtX2NvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7CisKKyAgICAv
LyBXZSBkb24ndCB3YW50IHRvIHJlcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28g
dG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgorICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5B
ZGRyZXNzKHJldHVybkFkZHJlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVy
OjpjdGlfb3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwpKTsKKworICAgIC8vIENoZWNrIGVheCBpcyBh
biBhcnJheQorICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2lu
dGVycHJldGVyLT5tX2pzQXJyYXlWcHRyKSwgWDg2OjplYXgpOworICAgIEptcFNyYyBmYWlsdXJl
Q2FzZXMxID0gX18gam5lKCk7CisKKyAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBs
ZW5ndGggZnJvbSB0aGUgc3RvcmFnZQorICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQXJy
YXksIG1fc3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7CisgICAgX18gbW92bF9tcihGSUVM
RF9PRkZTRVQoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCksIFg4Njo6ZWN4LCBYODY6OmVjeCk7CisK
KyAgICBfXyBjbXBsX2kzMnIoSlNJbW1lZGlhdGU6Om1heEltbWVkaWF0ZUludCwgWDg2OjplY3gp
OworICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMyID0gX18gamEoKTsKKworICAgIF9fIGFkZGxfcnIo
WDg2OjplY3gsIFg4Njo6ZWN4KTsKKyAgICBfXyBhZGRsX2k4cigxLCBYODY6OmVjeCk7CisgICAg
X18gbW92bF9ycihYODY6OmVjeCwgWDg2OjplYXgpOworICAgIEptcFNyYyBzdWNjZXNzID0gX18g
am1wKCk7CisKKyAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNvcHkoKTsKKworICAgIC8v
IFVzZSB0aGUgcmVwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJh
Y2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgorICAgIHZvaWQqIHNsb3dDYXNl
QmVnaW4gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbikg
LSByZXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbDsKKyAgICBYODZBc3NlbWJsZXI6Omxp
bmsoY29kZSwgZmFpbHVyZUNhc2VzMSwgc2xvd0Nhc2VCZWdpbik7CisgICAgWDg2QXNzZW1ibGVy
OjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczIsIHNsb3dDYXNlQmVnaW4pOworCisgICAgLy8gT24g
c3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQg
d2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KKyAgICBpbnRwdHJfdCBzdWNj
ZXNzRGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2luKSAr
IHJlcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQ7CisgICAgWDg2QXNzZW1ibGVy
OjpsaW5rKGNvZGUsIHN1Y2Nlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN1Y2Nlc3NEZXN0
KSk7CisKKyAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3
aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCisgICAgbV9jb2RlQmxvY2stPmdldFN0dWJJbmZvKHJldHVy
bkFkZHJlc3MpLnN0dWJSb3V0aW5lID0gY29kZTsKKworICAgIC8vIEZpbmFsbHkgcmVwYXRjaCB0
aGUganVtcCB0byBzb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5z
dGVhZC4KKyAgICBpbnRwdHJfdCBqbXBMb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KGluZm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93
Q2FzZTsKKyAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hCcmFuY2hPZmZzZXQoam1wTG9jYXRpb24s
IGNvZGUpOworfQorCit2b2lkIEpJVDo6ZW1pdEdldFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIoUmVn
aXN0ZXJJRCB2YXJpYWJsZU9iamVjdCwgaW50IGluZGV4LCBSZWdpc3RlcklEIGRzdCkKK3sKKyAg
ICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU1ZhcmlhYmxlT2JqZWN0LCBkKSwgdmFyaWFibGVP
YmplY3QsIGRzdCk7CisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNWYXJpYWJsZU9iamVj
dDo6SlNWYXJpYWJsZU9iamVjdERhdGEsIHJlZ2lzdGVycyksIGRzdCwgZHN0KTsKKyAgICBfXyBt
b3ZsX21yKGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSwgZHN0LCBkc3QpOworfQorCit2b2lkIEpJ
VDo6ZW1pdFB1dFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgdmFyaWFibGVPYmplY3QsIGludCBpbmRleCkKK3sKKyAgICBfXyBtb3ZsX21yKEZJRUxEX09G
RlNFVChKU1ZhcmlhYmxlT2JqZWN0LCBkKSwgdmFyaWFibGVPYmplY3QsIHZhcmlhYmxlT2JqZWN0
KTsKKyAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU1ZhcmlhYmxlT2JqZWN0OjpKU1Zhcmlh
YmxlT2JqZWN0RGF0YSwgcmVnaXN0ZXJzKSwgdmFyaWFibGVPYmplY3QsIHZhcmlhYmxlT2JqZWN0
KTsKKyAgICBfXyBtb3ZsX3JtKHNyYywgaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpLCB2YXJpYWJs
ZU9iamVjdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKSW5kZXg6IGppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBqaXQvSklUQ2FsbC5jcHAJ
KHJldmlzaW9uIDM4OTI3KQorKysgaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgor
I2luY2x1ZGUgIkpJVElubGluZU1ldGhvZHMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5j
bHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCkBAIC0zOSwzNDE1
ICs0MCw1OSBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjZW5kaWYKIAotI2RlZmluZSBfXyBtX2Fz
c2VtYmxlci4gCi0KLSNpZiBQTEFURk9STShXSU4pCi0jdW5kZWYgRklFTERfT0ZGU0VUIC8vIEZp
eCBjb25mbGljdCB3aXRoIHdpbm50LmguCi0jZW5kaWYKLQotLy8gRklFTERfT0ZGU0VUOiBMaWtl
IHRoZSBDKysgb2Zmc2V0b2YgbWFjcm8sIGJ1dCB5b3UgY2FuIHVzZSBpdCB3aXRoIGNsYXNzZXMu
Ci0vLyBUaGUgbWFnaWMgbnVtYmVyIDB4NDAwMCBpcyBpbnNpZ25pZmljYW50LiBXZSB1c2UgaXQg
dG8gYXZvaWQgdXNpbmcgTlVMTCwgc2luY2UKLS8vIE5VTEwgY2FuIGNhdXNlIGNvbXBpbGVyIHBy
b2JsZW1zLCBlc3BlY2lhbGx5IGluIGNhc2VzIG9mIG11bHRpcGxlIGluaGVyaXRhbmNlLgotI2Rl
ZmluZSBGSUVMRF9PRkZTRVQoY2xhc3MsIGZpZWxkKSAocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZm
X3Q+KCYocmVpbnRlcnByZXRfY2FzdDxjbGFzcyo+KDB4NDAwMCktPmZpZWxkKSkgLSAweDQwMDAp
Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFjZSBKU0MgewotCi10eXBlZGVmIFg4
NkFzc2VtYmxlcjo6Sm1wU3JjIEptcFNyYzsKLQotI2lmIFBMQVRGT1JNKE1BQykKLQotc3RhdGlj
IGlubGluZSBib29sIGlzU1NFMlByZXNlbnQoKQotewotICAgIHJldHVybiB0cnVlOyAvLyBBbGwg
WDg2IE1hY3MgYXJlIGd1YXJhbnRlZWQgdG8gc3VwcG9ydCBhdCBsZWFzdCBTU0UyCi19Ci0KLSNl
bHNlCi0KLXN0YXRpYyBib29sIGlzU1NFMlByZXNlbnQoKQotewotICAgIHN0YXRpYyBjb25zdCBp
bnQgU1NFMkZlYXR1cmVCaXQgPSAxIDw8IDI2OwotICAgIHN0cnVjdCBTU0UyQ2hlY2sgewotICAg
ICAgICBTU0UyQ2hlY2soKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgZmxhZ3M7Ci0jaWYg
Q09NUElMRVIoTVNWQykKLSAgICAgICAgICAgIF9hc20gewotICAgICAgICAgICAgICAgIG1vdiBl
YXgsIDEgLy8gY3B1aWQgZnVuY3Rpb24gMSBnaXZlcyB1cyB0aGUgc3RhbmRhcmQgZmVhdHVyZSBz
ZXQKLSAgICAgICAgICAgICAgICBjcHVpZDsKLSAgICAgICAgICAgICAgICBtb3YgZmxhZ3MsIGVk
eDsKLSAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICBmbGFncyA9IDA7Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogQWRkIEdDQyBjb2RlIHRvIGRvIGFib3ZlIGFzbQotI2VuZGlmCi0gICAg
ICAgICAgICBwcmVzZW50ID0gKGZsYWdzICYgU1NFMkZlYXR1cmVCaXQpICE9IDA7Ci0gICAgICAg
IH0KLSAgICAgICAgYm9vbCBwcmVzZW50OwotICAgIH07Ci0gICAgc3RhdGljIFNTRTJDaGVjayBj
aGVjazsKLSAgICByZXR1cm4gY2hlY2sucHJlc2VudDsKLX0KLQotI2VuZGlmCi0KLUNPTVBJTEVf
QVNTRVJUKENUSV9BUkdTX2NvZGUgPT0gMHhDLCBDVElfQVJHU19jb2RlX2lzX0MpOwotQ09NUElM
RV9BU1NFUlQoQ1RJX0FSR1NfY2FsbEZyYW1lID09IDB4RSwgQ1RJX0FSR1NfY2FsbEZyYW1lX2lz
X0UpOwotCi0jaWYgQ09NUElMRVIoR0NDKSAmJiBQTEFURk9STShYODYpCi0KLSNpZiBQTEFURk9S
TShEQVJXSU4pCi0jZGVmaW5lIFNZTUJPTF9TVFJJTkcobmFtZSkgIl8iICNuYW1lCi0jZWxzZQot
I2RlZmluZSBTWU1CT0xfU1RSSU5HKG5hbWUpICNuYW1lCi0jZW5kaWYKLQotYXNtKAotIi5nbG9i
bCAiIFNZTUJPTF9TVFJJTkcoY3RpVHJhbXBvbGluZSkgIlxuIgotU1lNQk9MX1NUUklORyhjdGlU
cmFtcG9saW5lKSAiOiIgIlxuIgotICAgICJwdXNobCAlZXNpIiAiXG4iCi0gICAgInB1c2hsICVl
ZGkiICJcbiIKLSAgICAicHVzaGwgJWVieCIgIlxuIgotICAgICJzdWJsICQweDIwLCAlZXNwIiAi
XG4iCi0gICAgIm1vdmwgJDUxMiwgJWVzaSIgIlxuIgotICAgICJtb3ZsIDB4MzgoJWVzcCksICVl
ZGkiICJcbiIgLy8gT3gzOCA9IDB4MEUgKiA0LCAweDBFID0gQ1RJX0FSR1NfY2FsbEZyYW1lIChz
ZWUgYXNzZXJ0aW9uIGFib3ZlKQotICAgICJjYWxsICoweDMwKCVlc3ApIiAiXG4iIC8vIE94MzAg
PSAweDBDICogNCwgMHgwQyA9IENUSV9BUkdTX2NvZGUgKHNlZSBhc3NlcnRpb24gYWJvdmUpCi0g
ICAgImFkZGwgJDB4MjAsICVlc3AiICJcbiIKLSAgICAicG9wbCAlZWJ4IiAiXG4iCi0gICAgInBv
cGwgJWVkaSIgIlxuIgotICAgICJwb3BsICVlc2kiICJcbiIKLSAgICAicmV0IiAiXG4iCi0pOwot
Ci1hc20oCi0iLmdsb2JsICIgU1lNQk9MX1NUUklORyhjdGlWTVRocm93VHJhbXBvbGluZSkgIlxu
IgotU1lNQk9MX1NUUklORyhjdGlWTVRocm93VHJhbXBvbGluZSkgIjoiICJcbiIKLSNpZiBVU0Uo
Q1RJX0FSR1VNRU5UKQotI2lmIFVTRShGQVNUX0NBTExfQ1RJX0FSR1VNRU5UKQotICAgICJtb3Zs
ICVlc3AsICVlY3giICJcbiIKLSNlbHNlCi0gICAgIm1vdmwgJWVzcCwgMCglZXNwKSIgIlxuIgot
I2VuZGlmCi0gICAgImNhbGwgIiBTWU1CT0xfU1RSSU5HKF9aTjNKU0MxMUludGVycHJldGVyMTJj
dGlfdm1fdGhyb3dFUFB2KSAiXG4iCi0jZWxzZQotICAgICJjYWxsICIgU1lNQk9MX1NUUklORyhf
Wk4zSlNDMTFJbnRlcnByZXRlcjEyY3RpX3ZtX3Rocm93RVB2eikgIlxuIgotI2VuZGlmCi0gICAg
ImFkZGwgJDB4MjAsICVlc3AiICJcbiIKLSAgICAicG9wbCAlZWJ4IiAiXG4iCi0gICAgInBvcGwg
JWVkaSIgIlxuIgotICAgICJwb3BsICVlc2kiICJcbiIKLSAgICAicmV0IiAiXG4iCi0pOwotICAg
IAotI2VsaWYgQ09NUElMRVIoTVNWQykKLQotZXh0ZXJuICJDIiB7Ci0gICAgCi0gICAgX19kZWNs
c3BlYyhuYWtlZCkgSlNWYWx1ZSogY3RpVHJhbXBvbGluZSh2b2lkKiBjb2RlLCBSZWdpc3RlckZp
bGUqLCBDYWxsRnJhbWUqLCBKU1ZhbHVlKiogZXhjZXB0aW9uLCBQcm9maWxlcioqLCBKU0dsb2Jh
bERhdGEqKQotICAgIHsKLSAgICAgICAgX19hc20gewotICAgICAgICAgICAgcHVzaCBlc2k7Ci0g
ICAgICAgICAgICBwdXNoIGVkaTsKLSAgICAgICAgICAgIHB1c2ggZWJ4OwotICAgICAgICAgICAg
c3ViIGVzcCwgMHgyMDsKLSAgICAgICAgICAgIG1vdiBlc2ksIDUxMjsKLSAgICAgICAgICAgIG1v
diBlY3gsIGVzcDsKLSAgICAgICAgICAgIG1vdiBlZGksIFtlc3AgKyAweDM4XTsKLSAgICAgICAg
ICAgIGNhbGwgW2VzcCArIDB4MzBdOyAvLyBPeDMwID0gMHgwQyAqIDQsIDB4MEMgPSBDVElfQVJH
U19jb2RlIChzZWUgYXNzZXJ0aW9uIGFib3ZlKQotICAgICAgICAgICAgYWRkIGVzcCwgMHgyMDsK
LSAgICAgICAgICAgIHBvcCBlYng7Ci0gICAgICAgICAgICBwb3AgZWRpOwotICAgICAgICAgICAg
cG9wIGVzaTsKLSAgICAgICAgICAgIHJldDsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBf
X2RlY2xzcGVjKG5ha2VkKSB2b2lkIGN0aVZNVGhyb3dUcmFtcG9saW5lKCkKLSAgICB7Ci0gICAg
ICAgIF9fYXNtIHsKLSAgICAgICAgICAgIG1vdiBlY3gsIGVzcDsKLSAgICAgICAgICAgIGNhbGwg
SlNDOjpJbnRlcnByZXRlcjo6Y3RpX3ZtX3Rocm93OwotICAgICAgICAgICAgYWRkIGVzcCwgMHgy
MDsKLSAgICAgICAgICAgIHBvcCBlYng7Ci0gICAgICAgICAgICBwb3AgZWRpOwotICAgICAgICAg
ICAgcG9wIGVzaTsKLSAgICAgICAgICAgIHJldDsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLX0K
LQotI2VuZGlmCi0KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHVpbnRwdHJfdCBhc0ludGVnZXIoSlNW
YWx1ZSogdmFsdWUpCi17Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih2
YWx1ZSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmtpbGxMYXN0UmVzdWx0UmVnaXN0
ZXIoKQotewotICAgIG1fbGFzdFJlc3VsdEJ5dGVjb2RlUmVnaXN0ZXIgPSBzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpOwotfQotCi0vLyBnZXQgYXJnIHB1dHMgYW4gYXJnIGZyb20gdGhl
IFNGIHJlZ2lzdGVyIGFycmF5IGludG8gYSBoL3cgcmVnaXN0ZXIKLUFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QsIHVu
c2lnbmVkIGN1cnJlbnRJbnN0cnVjdGlvbkluZGV4KQotewotICAgIC8vIFRPRE86IHdlIHdhbnQg
dG8gcmV1c2UgdmFsdWVzIHRoYXQgYXJlIGFscmVhZHkgaW4gcmVnaXN0ZXJzIGlmIHdlIGNhbiAt
IGFkZCBhIHJlZ2lzdGVyIGFsbG9jYXRvciEKLSAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3Rh
bnRSZWdpc3RlckluZGV4KHNyYykpIHsKLSAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgX18gbW92bF9pMzJyKGFzSW50ZWdlcih2
YWx1ZSksIGRzdCk7Ci0gICAgICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChzcmMgPT0gbV9sYXN0UmVzdWx0Qnl0ZWNvZGVSZWdp
c3RlciAmJiBtX2NvZGVCbG9jay0+aXNUZW1wb3JhcnlSZWdpc3RlckluZGV4KHNyYykpIHsKLSAg
ICAgICAgYm9vbCBhdEp1bXBUYXJnZXQgPSBmYWxzZTsKLSAgICAgICAgd2hpbGUgKG1fanVtcFRh
cmdldHNQb3NpdGlvbiA8IG1fY29kZUJsb2NrLT5qdW1wVGFyZ2V0cy5zaXplKCkgJiYgbV9jb2Rl
QmxvY2stPmp1bXBUYXJnZXRzW21fanVtcFRhcmdldHNQb3NpdGlvbl0gPD0gY3VycmVudEluc3Ry
dWN0aW9uSW5kZXgpIHsKLSAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+anVtcFRhcmdldHNb
bV9qdW1wVGFyZ2V0c1Bvc2l0aW9uXSA9PSBjdXJyZW50SW5zdHJ1Y3Rpb25JbmRleCkKLSAgICAg
ICAgICAgICAgICBhdEp1bXBUYXJnZXQgPSB0cnVlOwotICAgICAgICAgICAgKyttX2p1bXBUYXJn
ZXRzUG9zaXRpb247Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWF0SnVtcFRhcmdldCkgewot
ICAgICAgICAgICAgLy8gVGhlIGFyZ3VtZW50IHdlIHdhbnQgaXMgYWxyZWFkeSBzdG9yZWQgaW4g
ZWF4Ci0gICAgICAgICAgICBpZiAoZHN0ICE9IFg4Njo6ZWF4KQotICAgICAgICAgICAgICAgIF9f
IG1vdmxfcnIoWDg2OjplYXgsIGRzdCk7Ci0gICAgICAgICAgICBraWxsTGFzdFJlc3VsdFJlZ2lz
dGVyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBfXyBt
b3ZsX21yKHNyYyAqIHNpemVvZihSZWdpc3RlciksIFg4Njo6ZWRpLCBkc3QpOwotICAgIGtpbGxM
YXN0UmVzdWx0UmVnaXN0ZXIoKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoaW50IHNyYzEsIFJlZ2lzdGVySUQgZHN0MSwgaW50IHNyYzIsIFJl
Z2lzdGVySUQgZHN0MiwgdW5zaWduZWQgaSkKLXsKLSAgICBpZiAoc3JjMiA9PSBtX2xhc3RSZXN1
bHRCeXRlY29kZVJlZ2lzdGVyKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
MiwgZHN0MiwgaSk7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgZHN0MSwg
aSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBk
c3QxLCBpKTsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBkc3QyLCBpKTsK
LSAgICB9Ci19Ci0KLS8vIGdldCBhcmcgcHV0cyBhbiBhcmcgZnJvbSB0aGUgU0YgcmVnaXN0ZXIg
YXJyYXkgb250byB0aGUgc3RhY2ssIGFzIGFuIGFyZyB0byBhIGNvbnRleHQgdGhyZWFkZWQgZnVu
Y3Rpb24uCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxS
ZWdpc3Rlcih1bnNpZ25lZCBzcmMsIHVuc2lnbmVkIG9mZnNldCwgUmVnaXN0ZXJJRCBzY3JhdGNo
KQotewotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkg
ewotICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMp
OwotICAgICAgICBfXyBtb3ZsX2kzMm0oYXNJbnRlZ2VyKHZhbHVlKSwgb2Zmc2V0ICsgc2l6ZW9m
KHZvaWQqKSwgWDg2Ojplc3ApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIF9fIG1vdmxfbXIoc3Jj
ICogc2l6ZW9mKFJlZ2lzdGVyKSwgWDg2OjplZGksIHNjcmF0Y2gpOwotICAgICAgICBfXyBtb3Zs
X3JtKHNjcmF0Y2gsIG9mZnNldCArIHNpemVvZih2b2lkKiksIFg4Njo6ZXNwKTsKLSAgICB9Ci0K
LSAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Ci19Ci0KLS8vIHB1dHMgYW4gYXJnIG9udG8g
dGhlIHN0YWNrLCBhcyBhbiBhcmcgdG8gYSBjb250ZXh0IHRocmVhZGVkIGZ1bmN0aW9uLgotQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dENUSUFyZyhSZWdpc3RlcklEIHNyYywgdW5zaWdu
ZWQgb2Zmc2V0KQotewotICAgIF9fIG1vdmxfcm0oc3JjLCBvZmZzZXQgKyBzaXplb2Yodm9pZCop
LCBYODY6OmVzcCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRDVElBcmco
dW5zaWduZWQgb2Zmc2V0LCBSZWdpc3RlcklEIGRzdCkKLXsKLSAgICBfXyBtb3ZsX21yKG9mZnNl
dCArIHNpemVvZih2b2lkKiksIFg4Njo6ZXNwLCBkc3QpOwotfQotCi0KLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRQdXRDVElBcmdDb25zdGFudCh1bnNpZ25lZCB2YWx1ZSwgdW5zaWduZWQg
b2Zmc2V0KQotewotICAgIF9fIG1vdmxfaTMybSh2YWx1ZSwgb2Zmc2V0ICsgc2l6ZW9mKHZvaWQq
KSwgWDg2Ojplc3ApOwotfQotCi1BTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpJVDo6Z2V0Q29uc3Rh
bnRJbW1lZGlhdGVOdW1lcmljQXJnKHVuc2lnbmVkIHNyYykKLXsKLSAgICBpZiAobV9jb2RlQmxv
Y2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYykpIHsKLSAgICAgICAgSlNWYWx1ZSogdmFs
dWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjKTsKLSAgICAgICAgcmV0dXJuIEpTSW1t
ZWRpYXRlOjppc051bWJlcih2YWx1ZSkgPyB2YWx1ZSA6IG5vVmFsdWUoKTsKLSAgICB9Ci0gICAg
cmV0dXJuIG5vVmFsdWUoKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dENU
SVBhcmFtKHZvaWQqIHZhbHVlLCB1bnNpZ25lZCBuYW1lKQotewotICAgIF9fIG1vdmxfaTMybShy
ZWludGVycHJldF9jYXN0PGludHB0cl90Pih2YWx1ZSksIG5hbWUgKiBzaXplb2Yodm9pZCopLCBY
ODY6OmVzcCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRDVElQYXJhbShS
ZWdpc3RlcklEIGZyb20sIHVuc2lnbmVkIG5hbWUpCi17Ci0gICAgX18gbW92bF9ybShmcm9tLCBu
YW1lICogc2l6ZW9mKHZvaWQqKSwgWDg2Ojplc3ApOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0R2V0Q1RJUGFyYW0odW5zaWduZWQgbmFtZSwgUmVnaXN0ZXJJRCB0bykKLXsKLSAg
ICBfXyBtb3ZsX21yKG5hbWUgKiBzaXplb2Yodm9pZCopLCBYODY6OmVzcCwgdG8pOwotICAgIGtp
bGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgUmVnaXN0ZXJGaWxlOjpDYWxs
RnJhbWVIZWFkZXJFbnRyeSBlbnRyeSkKLXsKLSAgICBfXyBtb3ZsX3JtKGZyb20sIGVudHJ5ICog
c2l6ZW9mKFJlZ2lzdGVyKSwgWDg2OjplZGkpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcihSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRl
ckVudHJ5IGVudHJ5LCBSZWdpc3RlcklEIHRvKQotewotICAgIF9fIG1vdmxfbXIoZW50cnkgKiBz
aXplb2YoUmVnaXN0ZXIpLCBYODY6OmVkaSwgdG8pOwotICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0
ZXIoKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cih1bnNpZ25lZCBkc3QsIFJlZ2lzdGVySUQgZnJvbSkKLXsKLSAgICBfXyBtb3ZsX3JtKGZyb20s
IGRzdCAqIHNpemVvZihSZWdpc3RlciksIFg4Njo6ZWRpKTsKLSAgICBtX2xhc3RSZXN1bHRCeXRl
Y29kZVJlZ2lzdGVyID0gKGZyb20gPT0gWDg2OjplYXgpID8gZHN0IDogc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKTsKLSAgICAvLyBGSVhNRTogI2lmbmRlZiBOREVCVUcsIFdyaXRlIHRo
ZSBjb3JyZWN0IG1fdHlwZSB0byB0aGUgcmVnaXN0ZXIuCi19Ci0KLUFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRJbml0UmVnaXN0ZXIodW5zaWduZWQgZHN0KQotewotICAgIF9fIG1vdmxfaTMy
bShhc0ludGVnZXIoanNVbmRlZmluZWQoKSksIGRzdCAqIHNpemVvZihSZWdpc3RlciksIFg4Njo6
ZWRpKTsKLSAgICAvLyBGSVhNRTogI2lmbmRlZiBOREVCVUcsIFdyaXRlIHRoZSBjb3JyZWN0IG1f
dHlwZSB0byB0aGUgcmVnaXN0ZXIuCi19Ci0KLXZvaWQgY3RpU2V0UmV0dXJuQWRkcmVzcyh2b2lk
Kiogd2hlcmUsIHZvaWQqIHdoYXQpCi17Ci0gICAgKndoZXJlID0gd2hhdDsKLX0KLQotdm9pZCBj
dGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyh2b2lkKiB3aGVyZSwgdm9pZCogd2hhdCkKLXsK
LSAgICAoc3RhdGljX2Nhc3Q8dm9pZCoqPih3aGVyZSkpWy0xXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih3aGF0KSAtIHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90Pih3aGVyZSkpOwotfQotCi0jaWZuZGVmIE5ERUJVRwotCi12b2lkIEpJVDo6
cHJpbnRCeXRlY29kZU9wZXJhbmRUeXBlcyh1bnNpZ25lZCBzcmMxLCB1bnNpZ25lZCBzcmMyKQot
ewotICAgIGNoYXIgd2hpY2gxID0gJyonOwotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFu
dFJlZ2lzdGVySW5kZXgoc3JjMSkpIHsKLSAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoc3JjMSk7Ci0gICAgICAgIHdoaWNoMSA9IAotICAgICAgICAgICAg
SlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHZhbHVlKSA/Ci0gICAgICAgICAgICAgICAgKEpTSW1t
ZWRpYXRlOjppc051bWJlcih2YWx1ZSkgPyAnaScgOgotICAgICAgICAgICAgICAgIEpTSW1tZWRp
YXRlOjppc0Jvb2xlYW4odmFsdWUpID8gJ2InIDoKLSAgICAgICAgICAgICAgICB2YWx1ZS0+aXNV
bmRlZmluZWQoKSA/ICd1JyA6Ci0gICAgICAgICAgICAgICAgdmFsdWUtPmlzTnVsbCgpID8gJ24n
IDogJz8nKQotICAgICAgICAgICAgICAgIDoKLSAgICAgICAgICAgICh2YWx1ZS0+aXNTdHJpbmco
KSA/ICdzJyA6Ci0gICAgICAgICAgICB2YWx1ZS0+aXNPYmplY3QoKSA/ICdvJyA6Ci0gICAgICAg
ICAgICAnaycpOwotICAgIH0KLSAgICBjaGFyIHdoaWNoMiA9ICcqJzsKLSAgICBpZiAobV9jb2Rl
QmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNyYzIpKSB7Ci0gICAgICAgIEpTVmFsdWUq
IHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYzIpOwotICAgICAgICB3aGljaDIg
PSAKLSAgICAgICAgICAgIEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh2YWx1ZSkgPwotICAgICAg
ICAgICAgICAgIChKU0ltbWVkaWF0ZTo6aXNOdW1iZXIodmFsdWUpID8gJ2knIDoKLSAgICAgICAg
ICAgICAgICBKU0ltbWVkaWF0ZTo6aXNCb29sZWFuKHZhbHVlKSA/ICdiJyA6Ci0gICAgICAgICAg
ICAgICAgdmFsdWUtPmlzVW5kZWZpbmVkKCkgPyAndScgOgotICAgICAgICAgICAgICAgIHZhbHVl
LT5pc051bGwoKSA/ICduJyA6ICc/JykKLSAgICAgICAgICAgICAgICA6Ci0gICAgICAgICAgICAo
dmFsdWUtPmlzU3RyaW5nKCkgPyAncycgOgotICAgICAgICAgICAgdmFsdWUtPmlzT2JqZWN0KCkg
PyAnbycgOgotICAgICAgICAgICAgJ2snKTsKLSAgICB9Ci0gICAgaWYgKCh3aGljaDEgIT0gJyon
KSB8ICh3aGljaDIgIT0gJyonKSkKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJUeXBlcyAlYyAl
Y1xuIiwgd2hpY2gxLCB3aGljaDIpOwotfQotCi0jZW5kaWYKLQotQUxXQVlTX0lOTElORSBKbXBT
cmMgSklUOjplbWl0TmFrZWRDYWxsKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFg4Njo6UmVnaXN0
ZXJJRCByKQotewotICAgIEptcFNyYyBjYWxsID0gX18gY2FsbChyKTsKLSAgICBtX2NhbGxzLmFw
cGVuZChDYWxsUmVjb3JkKGNhbGwsIGJ5dGVjb2RlSW5kZXgpKTsKLQotICAgIHJldHVybiBjYWxs
OwotfQotCi1BTFdBWVNfSU5MSU5FICBKbXBTcmMgSklUOjplbWl0TmFrZWRDYWxsKHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgsIHZvaWQqIGZ1bmN0aW9uKQotewotICAgIEptcFNyYyBjYWxsID0gX18g
Y2FsbCgpOwotICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwgcmVpbnRlcnByZXRf
Y2FzdDxDVElIZWxwZXJfdj4oZnVuY3Rpb24pLCBieXRlY29kZUluZGV4KSk7Ci0gICAgcmV0dXJu
IGNhbGw7Ci19Ci0KLUFMV0FZU19JTkxJTkUgSm1wU3JjIEpJVDo6ZW1pdENUSUNhbGwodW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCwgQ1RJSGVscGVyX2ogaGVscGVyKQotewotI2lmIEVOQUJMRShPUENP
REVfU0FNUExJTkcpCi0gICAgX18gbW92bF9pMzJtKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+
ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIGJ5dGVjb2Rl
SW5kZXgsIHRydWUpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7Ci0j
ZW5kaWYKLSAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBlbWl0UHV0Q1RJ
UGFyYW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7Ci0gICAgSm1wU3JjIGNhbGwgPSBf
XyBjYWxsKCk7Ci0gICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBoZWxwZXIsIGJ5
dGVjb2RlSW5kZXgpKTsKLSNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotICAgIF9fIG1vdmxf
aTMybShtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29kZUluZGV4LCBmYWxzZSksIG1faW50ZXJwcmV0
ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKLSNlbmRpZgotICAgIGtpbGxMYXN0UmVzdWx0
UmVnaXN0ZXIoKTsKLQotICAgIHJldHVybiBjYWxsOwotfQotCi1BTFdBWVNfSU5MSU5FIEptcFNy
YyBKSVQ6OmVtaXRDVElDYWxsKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENUSUhlbHBlcl9vIGhl
bHBlcikKLXsKLSNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotICAgIF9fIG1vdmxfaTMybSht
X2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29kZUluZGV4LCB0cnVlKSwgbV9pbnRlcnByZXRlci0+c2Ft
cGxlcigpLT5zYW1wbGVTbG90KCkpOwotI2VuZGlmCi0gICAgX18gcmVzdG9yZUFyZ3VtZW50UmVm
ZXJlbmNlKCk7Ci0gICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJh
bWUpOwotICAgIEptcFNyYyBjYWxsID0gX18gY2FsbCgpOwotICAgIG1fY2FsbHMuYXBwZW5kKENh
bGxSZWNvcmQoY2FsbCwgaGVscGVyLCBieXRlY29kZUluZGV4KSk7Ci0jaWYgRU5BQkxFKE9QQ09E
RV9TQU1QTElORykKLSAgICBfXyBtb3ZsX2kzMm0obV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5l
bmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgYnl0ZWNvZGVJ
bmRleCwgZmFsc2UpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7Ci0j
ZW5kaWYKLSAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Ci0KLSAgICByZXR1cm4gY2FsbDsK
LX0KLQotQUxXQVlTX0lOTElORSBKbXBTcmMgSklUOjplbWl0Q1RJQ2FsbCh1bnNpZ25lZCBieXRl
Y29kZUluZGV4LCBDVElIZWxwZXJfcCBoZWxwZXIpCi17Ci0jaWYgRU5BQkxFKE9QQ09ERV9TQU1Q
TElORykKLSAgICBfXyBtb3ZsX2kzMm0obV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNvZGVT
YW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgYnl0ZWNvZGVJbmRleCwg
dHJ1ZSksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKLSNlbmRpZgot
ICAgIF9fIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAgIGVtaXRQdXRDVElQYXJhbShY
ODY6OmVkaSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKLSAgICBKbXBTcmMgY2FsbCA9IF9fIGNhbGwo
KTsKLSAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIGhlbHBlciwgYnl0ZWNvZGVJ
bmRleCkpOwotI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgX18gbW92bF9pMzJtKG1f
aW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXgsIGZhbHNlKSwgbV9pbnRlcnByZXRlci0+c2Ft
cGxlcigpLT5zYW1wbGVTbG90KCkpOwotI2VuZGlmCi0gICAga2lsbExhc3RSZXN1bHRSZWdpc3Rl
cigpOwotCi0gICAgcmV0dXJuIGNhbGw7Ci19Ci0KLUFMV0FZU19JTkxJTkUgSm1wU3JjIEpJVDo6
ZW1pdENUSUNhbGwodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ1RJSGVscGVyX2IgaGVscGVyKQot
ewotI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgX18gbW92bF9pMzJtKG1faW50ZXJw
cmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMu
YmVnaW4oKSArIGJ5dGVjb2RlSW5kZXgsIHRydWUpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCkt
PnNhbXBsZVNsb3QoKSk7Ci0jZW5kaWYKLSAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2Uo
KTsKLSAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7Ci0g
ICAgSm1wU3JjIGNhbGwgPSBfXyBjYWxsKCk7Ci0gICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29y
ZChjYWxsLCBoZWxwZXIsIGJ5dGVjb2RlSW5kZXgpKTsKLSNpZiBFTkFCTEUoT1BDT0RFX1NBTVBM
SU5HKQotICAgIF9fIG1vdmxfaTMybShtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNh
bXBsZShtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29kZUluZGV4LCBm
YWxzZSksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKLSNlbmRpZgot
ICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKLQotICAgIHJldHVybiBjYWxsOwotfQotCi1B
TFdBWVNfSU5MSU5FIEptcFNyYyBKSVQ6OmVtaXRDVElDYWxsKHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgsIENUSUhlbHBlcl92IGhlbHBlcikKLXsKLSNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQot
ICAgIF9fIG1vdmxfaTMybShtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZSht
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29kZUluZGV4LCB0cnVlKSwg
bV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpOwotI2VuZGlmCi0gICAgX18g
cmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRp
LCBDVElfQVJHU19jYWxsRnJhbWUpOwotICAgIEptcFNyYyBjYWxsID0gX18gY2FsbCgpOwotICAg
IG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwgaGVscGVyLCBieXRlY29kZUluZGV4KSk7
Ci0jaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKLSAgICBfXyBtb3ZsX2kzMm0obV9pbnRlcnBy
ZXRlci0+c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5i
ZWdpbigpICsgYnl0ZWNvZGVJbmRleCwgZmFsc2UpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCkt
PnNhbXBsZVNsb3QoKSk7Ci0jZW5kaWYKLSAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Ci0K
LSAgICByZXR1cm4gY2FsbDsKLX0KLQotQUxXQVlTX0lOTElORSBKbXBTcmMgSklUOjplbWl0Q1RJ
Q2FsbCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDVElIZWxwZXJfcyBoZWxwZXIpCi17Ci0jaWYg
RU5BQkxFKE9QQ09ERV9TQU1QTElORykKLSAgICBfXyBtb3ZsX2kzMm0obV9pbnRlcnByZXRlci0+
c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigp
ICsgYnl0ZWNvZGVJbmRleCwgdHJ1ZSksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2FtcGxl
U2xvdCgpKTsKLSNlbmRpZgotICAgIF9fIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAg
IGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKLSAgICBKbXBT
cmMgY2FsbCA9IF9fIGNhbGwoKTsKLSAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGws
IGhlbHBlciwgYnl0ZWNvZGVJbmRleCkpOwotI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0g
ICAgX18gbW92bF9pMzJtKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXgsIGZhbHNlKSwg
bV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpOwotI2VuZGlmCi0gICAga2ls
bExhc3RSZXN1bHRSZWdpc3RlcigpOwotCi0gICAgcmV0dXJuIGNhbGw7Ci19Ci0KLUFMV0FZU19J
TkxJTkUgSm1wU3JjIEpJVDo6ZW1pdENUSUNhbGwodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ1RJ
SGVscGVyXzIgaGVscGVyKQotewotI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgX18g
bW92bF9pMzJtKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXgsIHRydWUpLCBtX2ludGVy
cHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7Ci0jZW5kaWYKLSAgICBfXyByZXN0b3Jl
QXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENUSV9B
UkdTX2NhbGxGcmFtZSk7Ci0gICAgSm1wU3JjIGNhbGwgPSBfXyBjYWxsKCk7Ci0gICAgbV9jYWxs
cy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBoZWxwZXIsIGJ5dGVjb2RlSW5kZXgpKTsKLSNpZiBF
TkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotICAgIF9fIG1vdmxfaTMybShtX2ludGVycHJldGVyLT5z
YW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkg
KyBieXRlY29kZUluZGV4LCBmYWxzZSksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2FtcGxl
U2xvdCgpKTsKLSNlbmRpZgotICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKLQotICAgIHJl
dHVybiBjYWxsOwotfQotCi1KbXBTcmMgSklUOjpjaGVja1N0cnVjdHVyZShSZWdpc3RlcklEIHJl
ZywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi17Ci0gICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3Q+KHN0cnVjdHVyZSksIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0
dXJlKSwgcmVnKTsKLSAgICByZXR1cm4gX18gam5lKCk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdN
YXNrLCByZWcpOwotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgp
LCBieXRlY29kZUluZGV4KSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCwgaW50IHZSZWcpCi17Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRl
KHZSZWcpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnLCBieXRlY29kZUluZGV4KTsKLX0KLQotQUxXQVlTX0lOTElORSBib29sIEpJVDo6bGlu
a1Nsb3dDYXNlSWZOb3RKU0NlbGwoY29uc3QgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlciwgaW50IHZSZWcpCi17Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0tub3duTm90SW1t
ZWRpYXRlKHZSZWcpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgX18gbGluayhp
dGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFJlZ2lzdGVySUQgcmVn
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQotewotICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlh
dGU6OlRhZ0JpdFR5cGVJbnRlZ2VyLCByZWcpOwotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93
Q2FzZUVudHJ5KF9fIGplKCksIGJ5dGVjb2RlSW5kZXgpKTsKLX0KLQotQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtcyhSZWdpc3RlcklEIHJlZzEsIFJl
Z2lzdGVySUQgcmVnMiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBfXyBtb3ZsX3Jy
KHJlZzEsIFg4Njo6ZWN4KTsKLSAgICBfXyBhbmRsX3JyKHJlZzIsIFg4Njo6ZWN4KTsKLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplY3gsIGJ5dGVjb2RlSW5kZXgpOwotfQot
Ci1BTFdBWVNfSU5MSU5FIHVuc2lnbmVkIEpJVDo6Z2V0RGVUYWdnZWRDb25zdGFudEltbWVkaWF0
ZShKU1ZhbHVlKiBpbW0pCi17Ci0gICAgQVNTRVJUKEpTSW1tZWRpYXRlOjppc051bWJlcihpbW0p
KTsKLSAgICByZXR1cm4gYXNJbnRlZ2VyKGltbSkgJiB+SlNJbW1lZGlhdGU6OlRhZ0JpdFR5cGVJ
bnRlZ2VyOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0RmFzdEFyaXRoRGVUYWdJ
bW1lZGlhdGUoUmVnaXN0ZXJJRCByZWcpCi17Ci0gICAgX18gc3VibF9pOHIoSlNJbW1lZGlhdGU6
OlRhZ0JpdFR5cGVJbnRlZ2VyLCByZWcpOwotfQotCi1BTFdBWVNfSU5MSU5FIEptcFNyYyBKSVQ6
OmVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZUp1bXBJZlplcm8oUmVnaXN0ZXJJRCByZWcpCi17
Ci0gICAgX18gc3VibF9pOHIoSlNJbW1lZGlhdGU6OlRhZ0JpdFR5cGVJbnRlZ2VyLCByZWcpOwot
ICAgIHJldHVybiBfXyBqZSgpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0RmFz
dEFyaXRoUmVUYWdJbW1lZGlhdGUoUmVnaXN0ZXJJRCByZWcpCi17Ci0gICAgX18gYWRkbF9pOHIo
SlNJbW1lZGlhdGU6OlRhZ0JpdFR5cGVJbnRlZ2VyLCByZWcpOwotfQotCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0RmFzdEFyaXRoUG90ZW50aWFsbHlSZVRhZ0ltbWVkaWF0ZShSZWdpc3Rl
cklEIHJlZykKLXsKLSAgICBfXyBvcmxfaTMycihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVn
ZXIsIHJlZyk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRGYXN0QXJpdGhJbW1U
b0ludChSZWdpc3RlcklEIHJlZykKLXsKLSAgICBfXyBzYXJsX2k4cigxLCByZWcpOwotfQotCi1B
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0RmFzdEFyaXRoSW50VG9JbW1PclNsb3dDYXNlKFJl
Z2lzdGVySUQgcmVnLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQotewotICAgIF9fIGFkZGxfcnIo
cmVnLCByZWcpOwotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCks
IGJ5dGVjb2RlSW5kZXgpKTsKLSAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUocmVnKTsK
LX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVj
ayhSZWdpc3RlcklEIHJlZykKLXsKLSAgICBfXyBhZGRsX3JyKHJlZywgcmVnKTsKLSAgICBlbWl0
RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUocmVnKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdFRhZ0FzQm9vbEltbWVkaWF0ZShSZWdpc3RlcklEIHJlZykKLXsKLSAgICBfXyBzaGxf
aThyKEpTSW1tZWRpYXRlOjpFeHRlbmRlZFBheWxvYWRTaGlmdCwgcmVnKTsKLSAgICBfXyBvcmxf
aTMycihKU0ltbWVkaWF0ZTo6RnVsbFRhZ1R5cGVCb29sLCByZWcpOwotfQotCi1KSVQ6OkpJVChK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrKQotICAgIDogbV9h
c3NlbWJsZXIoZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPmFzc2VtYmxlckJ1ZmZlcigpKQotICAg
ICwgbV9pbnRlcnByZXRlcihnbG9iYWxEYXRhLT5pbnRlcnByZXRlcikKLSAgICAsIG1fZ2xvYmFs
RGF0YShnbG9iYWxEYXRhKQotICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAgICwgbV9s
YWJlbHMoY29kZUJsb2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuc2l6ZSgpIDogMCkKLSAg
ICAsIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm8oY29kZUJsb2NrID8gY29kZUJsb2Nr
LT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCkgOiAwKQotICAgICwgbV9jYWxsU3Ry
dWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mbyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmNhbGxMaW5r
SW5mb3Muc2l6ZSgpIDogMCkKLSAgICAsIG1fbGFzdFJlc3VsdEJ5dGVjb2RlUmVnaXN0ZXIoc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKLSAgICAsIG1fanVtcFRhcmdldHNQb3NpdGlv
bigwKQotewotfQotCi0jZGVmaW5lIENUSV9DT01QSUxFX0JJTkFSWV9PUChuYW1lKSBcCi0gICAg
Y2FzZSBuYW1lOiB7IFwKLSAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIo
aW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOyBcCi0gICAgICAgIGVt
aXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJh
bmQsIDQsIFg4Njo6ZWN4KTsgXAotICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6
Y3RpXyMjbmFtZSk7IFwKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kKTsgXAotICAgICAgICBpICs9IDQ7IFwKLSAgICAgICAgYnJlYWs7
IFwKLSAgICB9Ci0KLSNkZWZpbmUgQ1RJX0NPTVBJTEVfVU5BUllfT1AobmFtZSkgXAotICAgIGNh
c2UgbmFtZTogeyBcCi0gICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGlu
c3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsgXAotICAgICAgICBlbWl0
Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpXyMjbmFtZSk7IFwKLSAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsgXAotICAgICAgICBp
ICs9IDM7IFwKLSAgICAgICAgYnJlYWs7IFwKLSAgICB9Ci0KLXN0YXRpYyB2b2lkIHVucmVhY2hh
YmxlKCkKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBleGl0KDEpOwotfQotCi12
b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbEluaXRpYWxpemVDYWxsRnJhbWUoKQotewotICAgIF9fIG1v
dmxfcm0oWDg2OjplZHgsIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0
PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSksIFg4Njo6ZWRpKTsKLQotICAgIF9fIG1vdmxfbXIoRklF
TERfT0ZGU0VUKEpTRnVuY3Rpb24sIG1fc2NvcGVDaGFpbikgKyBGSUVMRF9PRkZTRVQoU2NvcGVD
aGFpbiwgbV9ub2RlKSwgWDg2OjplY3gsIFg4Njo6ZWR4KTsgLy8gbmV3U2NvcGVDaGFpbgotCi0g
ICAgX18gbW92bF9pMzJtKGFzSW50ZWdlcihub1ZhbHVlKCkpLCBSZWdpc3RlckZpbGU6Ok9wdGlv
bmFsQ2FsbGVlQXJndW1lbnRzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwg
WDg2OjplZGkpOwotICAgIF9fIG1vdmxfcm0oWDg2OjplY3gsIFJlZ2lzdGVyRmlsZTo6Q2FsbGVl
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkpOwotICAgIF9f
IG1vdmxfcm0oWDg2OjplZHgsIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbiAqIHN0YXRpY19jYXN0
PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSksIFg4Njo6ZWRpKTsKLX0KLQotdm9pZCBKSVQ6OmNvbXBp
bGVPcENhbGxTZXR1cEFyZ3MoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQotewotICAgIGludCBh
cmdDb3VudCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpbnQgcmVnaXN0ZXJPZmZz
ZXQgPSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7Ci0KLSAgICAvLyBlY3ggaG9sZHMgZnVuYwot
ICAgIGVtaXRQdXRDVElBcmcoWDg2OjplY3gsIDApOwotICAgIGVtaXRQdXRDVElBcmdDb25zdGFu
dChyZWdpc3Rlck9mZnNldCwgNCk7Ci0gICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGFyZ0NvdW50
LCA4KTsKLSAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZD4oaW5zdHJ1Y3Rpb24pLCAxMik7Ci19Ci0KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsRXZhbFNl
dHVwQXJncyhJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGFyZ0NvdW50ID0g
aW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGludCByZWdpc3Rlck9mZnNldCA9IGluc3Ry
dWN0aW9uWzRdLnUub3BlcmFuZDsKLQotICAgIC8vIGVjeCBob2xkcyBmdW5jCi0gICAgZW1pdFB1
dENUSUFyZyhYODY6OmVjeCwgMCk7Ci0gICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlZ2lzdGVy
T2Zmc2V0LCA0KTsKLSAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoYXJnQ291bnQsIDgpOwotICAg
IGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpbnN0cnVj
dGlvbiksIDEyKTsKLX0KLQotdm9pZCBKSVQ6OmNvbXBpbGVPcENvbnN0cnVjdFNldHVwQXJncyhJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOwotICAgIGludCByZWdpc3Rlck9mZnNldCA9IGluc3RydWN0aW9uWzRd
LnUub3BlcmFuZDsKLSAgICBpbnQgcHJvdG8gPSBpbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7Ci0g
ICAgaW50IHRoaXNSZWdpc3RlciA9IGluc3RydWN0aW9uWzZdLnUub3BlcmFuZDsKLQotICAgIC8v
IGVjeCBob2xkcyBmdW5jCi0gICAgZW1pdFB1dENUSUFyZyhYODY6OmVjeCwgMCk7Ci0gICAgZW1p
dFB1dENUSUFyZ0NvbnN0YW50KHJlZ2lzdGVyT2Zmc2V0LCA0KTsKLSAgICBlbWl0UHV0Q1RJQXJn
Q29uc3RhbnQoYXJnQ291bnQsIDgpOwotICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lz
dGVyKHByb3RvLCAxMiwgWDg2OjplYXgpOwotICAgIGVtaXRQdXRDVElBcmdDb25zdGFudCh0aGlz
UmVnaXN0ZXIsIDE2KTsKLSAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZD4oaW5zdHJ1Y3Rpb24pLCAyMCk7Ci19Ci0KLXZvaWQgSklUOjpjb21waWxlT3BD
YWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVk
IGksIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQotewotICAgIGludCBkc3QgPSBpbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGNhbGxlZSA9IGluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKLSAgICBpbnQgYXJnQ291bnQgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAg
aW50IHJlZ2lzdGVyT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwotCi0gICAgLy8g
SGFuZGxlIGV2YWwKLSAgICBKbXBTcmMgd2FzRXZhbDsKLSAgICBpZiAob3Bjb2RlSUQgPT0gb3Bf
Y2FsbF9ldmFsKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBYODY6
OmVjeCwgaSk7Ci0gICAgICAgIGNvbXBpbGVPcENhbGxFdmFsU2V0dXBBcmdzKGluc3RydWN0aW9u
KTsKLQotICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2NhbGxfZXZh
bCk7Ci0gICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6OmltcG9zc2li
bGVWYWx1ZSgpKSwgWDg2OjplYXgpOwotICAgICAgICB3YXNFdmFsID0gX18gam5lKCk7Ci0gICAg
fQotCi0gICAgLy8gVGhpcyBwbGFudHMgYSBjaGVjayBmb3IgYSBjYWNoZWQgSlNGdW5jdGlvbiB2
YWx1ZSwgc28gd2UgY2FuIHBsYW50IGEgZmFzdCBsaW5rIHRvIHRoZSBjYWxsZWUuCi0gICAgLy8g
VGhpcyBkZWxpYmVyYXRlbHkgbGVhdmVzIHRoZSBjYWxsZWUgaW4gZWN4LCB1c2VkIHdoZW4gc2V0
dGluZyB1cCB0aGUgc3RhY2sgZnJhbWUgYmVsb3cKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGNhbGxlZSwgWDg2OjplY3gsIGkpOwotICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1l
ZGlhdGU6OmltcG9zc2libGVWYWx1ZSgpKSwgWDg2OjplY3gpOwotICAgIEptcERzdCBhZGRyZXNz
T2ZMaW5rZWRGdW5jdGlvbkNoZWNrID0gX18gbGFiZWwoKTsKLSAgICBtX3Nsb3dDYXNlcy5hcHBl
bmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwotICAgIEFTU0VSVChYODZBc3NlbWJsZXI6
OmdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ss
IF9fIGxhYmVsKCkpID09IHJlcGF0Y2hPZmZzZXRPcENhbGxDYWxsKTsKLSAgICBtX2NhbGxTdHJ1
Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoQmVnaW4g
PSBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBp
cyB0aGUgZmFzdCBjYXNlLCBvbmx5IHVzZWQgd2hhbiBhIGNhbGxlZSBjYW4gYmUgbGlua2VkLgot
Ci0gICAgLy8gSW4gdGhlIGNhc2Ugb2YgT3BDb25zdHJ1Y3QsIGNhbGwgb3V0IHRvIGEgY3RpXyBm
dW5jdGlvbiB0byBjcmVhdGUgdGhlIG5ldyBvYmplY3QuCi0gICAgaWYgKG9wY29kZUlEID09IG9w
X2NvbnN0cnVjdCkgewotICAgICAgICBpbnQgcHJvdG8gPSBpbnN0cnVjdGlvbls1XS51Lm9wZXJh
bmQ7Ci0gICAgICAgIGludCB0aGlzUmVnaXN0ZXIgPSBpbnN0cnVjdGlvbls2XS51Lm9wZXJhbmQ7
Ci0KLSAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVjeCwgMCk7Ci0gICAgICAgIGVtaXRQdXRD
VElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHByb3RvLCAxMiwgWDg2OjplYXgpOwotICAgICAgICBl
bWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2NvbnN0cnVjdF9KU0NvbnN0cnVjdCk7
Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZ2lzdGVyKTsKLSAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIFg4Njo6ZWN4LCBpKTsKLSAgICB9Ci0KLSAg
ICAvLyBGYXN0IHZlcnNpb24gb2Ygc3RhY2sgZnJhbWUgaW5pdGlhbGl6YXRpb24sIGRpcmVjdGx5
IHJlbGF0aXZlIHRvIGVkaS4KLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBvbWl0cyB0byBzZXQgdXAg
UmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2ssIHdoaWNoIGlzIHNldCBpbiB0aGUgY2FsbGVlCi0gICAg
X18gbW92bF9pMzJtKGFzSW50ZWdlcihub1ZhbHVlKCkpLCAocmVnaXN0ZXJPZmZzZXQgKyBSZWdp
c3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJndW1lbnRzKSAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSksIFg4Njo6ZWRpKTsKLSAgICBfXyBtb3ZsX3JtKFg4Njo6ZWN4LCAocmVn
aXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkNhbGxlZSkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpLCBYODY6OmVkaSk7Ci0gICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQo
SlNGdW5jdGlvbiwgbV9zY29wZUNoYWluKSArIEZJRUxEX09GRlNFVChTY29wZUNoYWluLCBtX25v
ZGUpLCBYODY6OmVjeCwgWDg2OjplZHgpOyAvLyBuZXdTY29wZUNoYWluCi0gICAgX18gbW92bF9p
MzJtKGFyZ0NvdW50LCAocmVnaXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291
bnQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkpOwotICAg
IF9fIG1vdmxfcm0oWDg2OjplZGksIChyZWdpc3Rlck9mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2Fs
bGVyRnJhbWUpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkp
OwotICAgIF9fIG1vdmxfcm0oWDg2OjplZHgsIChyZWdpc3Rlck9mZnNldCArIFJlZ2lzdGVyRmls
ZTo6U2NvcGVDaGFpbikgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6
OmVkaSk7Ci0gICAgX18gYWRkbF9pMzJyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVy
KSwgWDg2OjplZGkpOwotCi0gICAgLy8gQ2FsbCB0byB0aGUgY2FsbGVlCi0gICAgbV9jYWxsU3Ry
dWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVy
ID0gZW1pdE5ha2VkQ2FsbChpLCByZWludGVycHJldF9jYXN0PHZvaWQqPih1bnJlYWNoYWJsZSkp
OwotICAgIAotICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpCi0gICAgICAgIF9fIGxp
bmsod2FzRXZhbCwgX18gbGFiZWwoKSk7Ci0KLSAgICAvLyBQdXQgdGhlIHJldHVybiB2YWx1ZSBp
biBkc3QuIEluIHRoZSBpbnRlcnByZXRlciwgb3BfcmV0IGRvZXMgdGhpcy4KLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KLSNpZiBFTkFCTEUoQ09ERUJMT0NLX1NBTVBMSU5HKQot
ICAgICAgICBfXyBtb3ZsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9jb2RlQmxv
Y2spLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmNvZGVCbG9ja1Nsb3QoKSk7Ci0jZW5kaWYK
LX0KLQotdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgdW5zaWduZWQgaSwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCi17Ci0gICAgYm9vbCBu
ZWdhdGVkID0gKHR5cGUgPT0gT3BOU3RyaWN0RXEpOwotCi0gICAgdW5zaWduZWQgZHN0ID0gaW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHNyYzEgPSBpbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgc3JjMiA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIFg4Njo6ZWF4LCBzcmMyLCBY
ODY6OmVkeCwgaSk7Ci0KLSAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBY
ODY6OmVheCk7Ci0gICAgSm1wU3JjIGZpcnN0Tm90SW1tZWRpYXRlID0gX18gamUoKTsKLSAgICBf
XyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVkeCk7Ci0gICAgSm1wU3Jj
IHNlY29uZE5vdEltbWVkaWF0ZSA9IF9fIGplKCk7Ci0KLSAgICBfXyBjbXBsX3JyKFg4Njo6ZWR4
LCBYODY6OmVheCk7Ci0gICAgaWYgKG5lZ2F0ZWQpCi0gICAgICAgIF9fIHNldG5lX3IoWDg2Ojpl
YXgpOwotICAgIGVsc2UKLSAgICAgICAgX18gc2V0ZV9yKFg4Njo6ZWF4KTsKLSAgICBfXyBtb3Z6
YmxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBlbWl0VGFnQXNCb29sSW1tZWRpYXRlKFg4
Njo6ZWF4KTsKLSAgICAgICAgICAgIAotICAgIEptcFNyYyBib3RoV2VyZUltbWVkaWF0ZXMgPSBf
XyBqbXAoKTsKLQotICAgIF9fIGxpbmsoZmlyc3ROb3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwot
Ci0gICAgLy8gY2hlY2sgdGhhdCBlZHggaXMgaW1tZWRpYXRlIGJ1dCBub3QgdGhlIHplcm8gaW1t
ZWRpYXRlCi0gICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplZHgp
OwotICAgIF9fIHNldHpfcihYODY6OmVjeCk7Ci0gICAgX18gbW92emJsX3JyKFg4Njo6ZWN4LCBY
ODY6OmVjeCk7IC8vIGVjeCBpcyBub3cgMSBpZiBlZHggd2FzIG5vbmltbWVkaWF0ZQotICAgIF9f
IGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSksIFg4Njo6
ZWR4KTsKLSAgICBfXyBzZXRlX3IoWDg2OjplZHgpOwotICAgIF9fIG1vdnpibF9ycihYODY6OmVk
eCwgWDg2OjplZHgpOyAvLyBlZHggaXMgbm93IDEgaWYgZWR4IHdhcyB0aGUgMCBpbW1lZGlhdGUK
LSAgICBfXyBvcmxfcnIoWDg2OjplY3gsIFg4Njo6ZWR4KTsKLQotICAgIG1fc2xvd0Nhc2VzLmFw
cGVuZChTbG93Q2FzZUVudHJ5KF9fIGpueigpLCBpKSk7Ci0KLSAgICBfXyBtb3ZsX2kzMnIoYXNJ
bnRlZ2VyKGpzQm9vbGVhbihuZWdhdGVkKSksIFg4Njo6ZWF4KTsKLQotICAgIEptcFNyYyBmaXJz
dFdhc05vdEltbWVkaWF0ZSA9IF9fIGptcCgpOwotCi0gICAgX18gbGluayhzZWNvbmROb3RJbW1l
ZGlhdGUsIF9fIGxhYmVsKCkpOwotICAgIC8vIGNoZWNrIHRoYXQgZWF4IGlzIG5vdCB0aGUgemVy
byBpbW1lZGlhdGUgKHdlIGtub3cgaXQgbXVzdCBiZSBpbW1lZGlhdGUpCi0gICAgX18gY21wbF9p
MzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOwot
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGplKCksIGkpKTsKLQotICAg
IF9fIG1vdmxfaTMycihhc0ludGVnZXIoanNCb29sZWFuKG5lZ2F0ZWQpKSwgWDg2OjplYXgpOwot
Ci0gICAgX18gbGluayhib3RoV2VyZUltbWVkaWF0ZXMsIF9fIGxhYmVsKCkpOwotICAgIF9fIGxp
bmsoZmlyc3RXYXNOb3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwotCi0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dTY3JpcHRDaGVjayh1bnNp
Z25lZCBieXRlY29kZUluZGV4KQotewotICAgIF9fIHN1YmxfaThyKDEsIFg4Njo6ZXNpKTsKLSAg
ICBKbXBTcmMgc2tpcFRpbWVvdXQgPSBfXyBqbmUoKTsKLSAgICBlbWl0Q1RJQ2FsbChieXRlY29k
ZUluZGV4LCBJbnRlcnByZXRlcjo6Y3RpX3RpbWVvdXRfY2hlY2spOwotCi0gICAgZW1pdEdldENU
SVBhcmFtKENUSV9BUkdTX2dsb2JhbERhdGEsIFg4Njo6ZWN4KTsKLSAgICBfXyBtb3ZsX21yKEZJ
RUxEX09GRlNFVChKU0dsb2JhbERhdGEsIGludGVycHJldGVyKSwgWDg2OjplY3gsIFg4Njo6ZWN4
KTsKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChJbnRlcnByZXRlciwgbV90aWNrc1VudGls
TmV4dFRpbWVvdXRDaGVjayksIFg4Njo6ZWN4LCBYODY6OmVzaSk7Ci0gICAgX18gbGluayhza2lw
VGltZW91dCwgX18gbGFiZWwoKSk7Ci0KLSAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Ci19
Ci0KLS8qCi0gIFRoaXMgaXMgcmVxdWlyZWQgc2luY2UgbnVtYmVyIHJlcHJlc2VudGF0aW9uIGlz
IGNhbm9uaWNhbCAtIHZhbHVlcyByZXByZXNlbnRhYmxlIGFzIGEgSlNJbW1lZGlhdGUgc2hvdWxk
IG5vdCBiZSBzdG9yZWQgaW4gYSBKU051bWJlckNlbGwuCi0gIAotICBJbiB0aGUgY29tbW9uIGNh
c2UsIHRoZSBkb3VibGUgdmFsdWUgZnJvbSAneG1tU291cmNlJyBpcyB3cml0dGVuIHRvIHRoZSBy
ZXVzYWJsZSBKU051bWJlckNlbGwgcG9pbnRlZCB0byBieSAnanNOdW1iZXJDZWxsJywgdGhlbiAn
anNOdW1iZXJDZWxsJwotICBpcyB3cml0dGVuIHRvIHRoZSBvdXRwdXQgU0YgUmVnaXN0ZXIgJ2Rz
dCcsIGFuZCB0aGVuIGEganVtcCBpcyBwbGFudGVkIChzdG9yZWQgaW50byAqd3JvdGVKU051bWJl
ckNlbGwpLgotICAKLSAgSG93ZXZlciBpZiB0aGUgdmFsdWUgZnJvbSB4bW1Tb3VyY2UgaXMgcmVw
cmVzZW50YWJsZSBhcyBhIEpTSW1tZWRpYXRlLCB0aGVuIHRoZSBKU0ltbWVkaWF0ZSB2YWx1ZSB3
aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIG91dHB1dCwgYW5kIGZsb3cKLSAgY29udHJvbCB3aWxsIGZh
bGwgdGhyb3VnaCBmcm9tIHRoZSBjb2RlIHBsYW50ZWQuCi0qLwotdm9pZCBKSVQ6OnB1dERvdWJs
ZVJlc3VsdFRvSlNOdW1iZXJDZWxsT3JKU0ltbWVkaWF0ZShYODY6OlhNTVJlZ2lzdGVySUQgeG1t
U291cmNlLCBYODY6OlJlZ2lzdGVySUQganNOdW1iZXJDZWxsLCB1bnNpZ25lZCBkc3QsIEptcFNy
Yyogd3JvdGVKU051bWJlckNlbGwsICBYODY6OlhNTVJlZ2lzdGVySUQgdGVtcFhtbSwgWDg2OjpS
ZWdpc3RlcklEIHRlbXBSZWcxLCBYODY6OlJlZ2lzdGVySUQgdGVtcFJlZzIpCi17Ci0gICAgLy8g
Y29udmVydCAoZG91YmxlIC0+IEpTSW1tZWRpYXRlIC0+IGRvdWJsZSksIGFuZCBjaGVjayBpZiB0
aGUgdmFsdWUgaXMgdW5jaGFuZ2VkIC0gaW4gd2hpY2ggY2FzZSB0aGUgdmFsdWUgaXMgcmVwcmVz
ZW50YWJsZSBhcyBhIEpTSW1tZWRpYXRlLgotICAgIF9fIGN2dHRzZDJzaV9ycih4bW1Tb3VyY2Us
IHRlbXBSZWcxKTsKLSAgICBfXyBhZGRsX3JyKHRlbXBSZWcxLCB0ZW1wUmVnMSk7Ci0gICAgX18g
c2FybF9pOHIoMSwgdGVtcFJlZzEpOwotICAgIF9fIGN2dHNpMnNkX3JyKHRlbXBSZWcxLCB0ZW1w
WG1tKTsKLSAgICAvLyBDb21wYXJlICYgYnJhbmNoIGlmIGltbWVkaWF0ZS4gCi0gICAgX18gdWNv
bWlzX3JyKHRlbXBYbW0sIHhtbVNvdXJjZSk7Ci0gICAgSm1wU3JjIHJlc3VsdElzSW1tID0gX18g
amUoKTsKLSAgICBKbXBEc3QgcmVzdWx0TG9va2VkTGlrZUltbUJ1dEFjdHVhbGx5SXNudCA9IF9f
IGxhYmVsKCk7Ci0gICAgCi0gICAgLy8gU3RvcmUgdGhlIHJlc3VsdCB0byB0aGUgSlNOdW1iZXJD
ZWxsIGFuZCBqdW1wLgotICAgIF9fIG1vdnNkX3JtKHhtbVNvdXJjZSwgRklFTERfT0ZGU0VUKEpT
TnVtYmVyQ2VsbCwgbV92YWx1ZSksIGpzTnVtYmVyQ2VsbCk7Ci0gICAgaWYgKGpzTnVtYmVyQ2Vs
bCAhPSBYODY6OmVheCkKLSAgICAgICAgX18gbW92bF9ycihqc051bWJlckNlbGwsIFg4Njo6ZWF4
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgKndyb3RlSlNOdW1iZXJD
ZWxsID0gX18gam1wKCk7Ci0KLSAgICBfXyBsaW5rKHJlc3VsdElzSW1tLCBfXyBsYWJlbCgpKTsK
LSAgICAvLyB2YWx1ZSA9PSAoZG91YmxlKShKU0ltbWVkaWF0ZSl2YWx1ZS4uLiBvciBhdCBsZWFz
dCwgaXQgbG9va3MgdGhhdCB3YXkuLi4KLSAgICAvLyB1Y29taSB3aWxsIHJlcG9ydCB0aGF0ICgw
ID09IC0wKSwgYW5kIHdpbGwgcmVwb3J0IHRydWUgaWYgZWl0aGVyIGlucHV0IGluIE5hTiAocmVz
dWx0IGlzIHVub3JkZXJlZCkuCi0gICAgX18gbGluayhfXyBqcCgpLCByZXN1bHRMb29rZWRMaWtl
SW1tQnV0QWN0dWFsbHlJc250KTsgLy8gQWN0dWFsbHkgd2FzIGEgTmFOCi0gICAgX18gcGV4dHJ3
X2lycigzLCB4bW1Tb3VyY2UsIHRlbXBSZWcyKTsKLSAgICBfXyBjbXBsX2kzMnIoMHg4MDAwLCB0
ZW1wUmVnMik7Ci0gICAgX18gbGluayhfXyBqZSgpLCByZXN1bHRMb29rZWRMaWtlSW1tQnV0QWN0
dWFsbHlJc250KTsgLy8gQWN0dWFsbHkgd2FzIC0wCi0gICAgLy8gWWVzIGl0IHJlYWxseSByZWFs
bHkgcmVhbGx5IGlzIHJlcHJlc2VudGFibGUgYXMgYSBKU0ltbWVkaWF0ZS4KLSAgICBlbWl0RmFz
dEFyaXRoSW50VG9JbW1Ob0NoZWNrKHRlbXBSZWcxKTsKLSAgICBpZiAodGVtcFJlZzEgIT0gWDg2
OjplYXgpCi0gICAgICAgIF9fIG1vdmxfcnIodGVtcFJlZzEsIFg4Njo6ZWF4KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLXZvaWQgSklUOjpjb21waWxlQmluYXJ5QXJp
dGhPcChPcGNvZGVJRCBvcGNvZGVJRCwgdW5zaWduZWQgZHN0LCB1bnNpZ25lZCBzcmMxLCB1bnNp
Z25lZCBzcmMyLCBPcGVyYW5kVHlwZXMgdHlwZXMsIHVuc2lnbmVkIGkpCi17Ci0gICAgU3RydWN0
dXJlKiBudW1iZXJTdHJ1Y3R1cmUgPSBtX2dsb2JhbERhdGEtPm51bWJlclN0cnVjdHVyZS5nZXQo
KTsKLSAgICBKbXBTcmMgd2FzSlNOdW1iZXJDZWxsMTsKLSAgICBKbXBTcmMgd2FzSlNOdW1iZXJD
ZWxsMWI7Ci0gICAgSm1wU3JjIHdhc0pTTnVtYmVyQ2VsbDI7Ci0gICAgSm1wU3JjIHdhc0pTTnVt
YmVyQ2VsbDJiOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgWDg2OjplYXgs
IHNyYzIsIFg4Njo6ZWR4LCBpKTsKLQotICAgIGlmICh0eXBlcy5zZWNvbmQoKS5pc1JldXNhYmxl
KCkgJiYgaXNTU0UyUHJlc2VudCgpKSB7Ci0gICAgICAgIEFTU0VSVCh0eXBlcy5zZWNvbmQoKS5t
aWdodEJlTnVtYmVyKCkpOwotCi0gICAgICAgIC8vIENoZWNrIG9wMiBpcyBhIG51bWJlcgotICAg
ICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgWDg2Ojpl
ZHgpOwotICAgICAgICBKbXBTcmMgb3AyaW1tID0gX18gam5lKCk7Ci0gICAgICAgIGlmICghdHlw
ZXMuc2Vjb25kKCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVkeCwgaSwgc3JjMik7Ci0gICAgICAgICAgICBfXyBj
bXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obnVtYmVyU3RydWN0dXJlKSwgRklF
TERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBt
X3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gKDEpIEluIHRoaXMgY2FzZSBzcmMyIGlzIGEgcmV1c2FibGUgbnVtYmVy
IGNlbGwuCi0gICAgICAgIC8vICAgICBTbG93IGNhc2UgaWYgc3JjMSBpcyBub3QgYSBudW1iZXIg
dHlwZS4KLSAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVn
ZXIsIFg4Njo6ZWF4KTsKLSAgICAgICAgSm1wU3JjIG9wMWltbSA9IF9fIGpuZSgpOwotICAgICAg
ICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVheCwgaSwgc3JjMSk7Ci0gICAgICAg
ICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obnVtYmVyU3RydWN0
dXJlKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCk7Ci0gICAg
ICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gKDFhKSBpZiB3ZSBnZXQgaGVyZSwgc3JjMSBpcyBhbHNv
IGEgbnVtYmVyIGNlbGwKLSAgICAgICAgX18gbW92c2RfbXIoRklFTERfT0ZGU0VUKEpTTnVtYmVy
Q2VsbCwgbV92YWx1ZSksIFg4Njo6ZWF4LCBYODY6OnhtbTApOwotICAgICAgICBKbXBTcmMgbG9h
ZGVkRG91YmxlID0gX18gam1wKCk7Ci0gICAgICAgIC8vICgxYikgaWYgd2UgZ2V0IGhlcmUsIHNy
YzEgaXMgYW4gaW1tZWRpYXRlCi0gICAgICAgIF9fIGxpbmsob3AxaW1tLCBfXyBsYWJlbCgpKTsK
LSAgICAgICAgZW1pdEZhc3RBcml0aEltbVRvSW50KFg4Njo6ZWF4KTsKLSAgICAgICAgX18gY3Z0
c2kyc2RfcnIoWDg2OjplYXgsIFg4Njo6eG1tMCk7Ci0gICAgICAgIC8vICgxYykgCi0gICAgICAg
IF9fIGxpbmsobG9hZGVkRG91YmxlLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgaWYgKG9wY29kZUlE
ID09IG9wX2FkZCkKLSAgICAgICAgICAgIF9fIGFkZHNkX21yKEZJRUxEX09GRlNFVChKU051bWJl
ckNlbGwsIG1fdmFsdWUpLCBYODY6OmVkeCwgWDg2Ojp4bW0wKTsKLSAgICAgICAgZWxzZSBpZiAo
b3Bjb2RlSUQgPT0gb3Bfc3ViKQotICAgICAgICAgICAgX18gc3Vic2RfbXIoRklFTERfT0ZGU0VU
KEpTTnVtYmVyQ2VsbCwgbV92YWx1ZSksIFg4Njo6ZWR4LCBYODY6OnhtbTApOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9tdWwpOwotICAgICAgICAg
ICAgX18gbXVsc2RfbXIoRklFTERfT0ZGU0VUKEpTTnVtYmVyQ2VsbCwgbV92YWx1ZSksIFg4Njo6
ZWR4LCBYODY6OnhtbTApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHV0RG91YmxlUmVzdWx0VG9K
U051bWJlckNlbGxPckpTSW1tZWRpYXRlKFg4Njo6eG1tMCwgWDg2OjplZHgsIGRzdCwgJndhc0pT
TnVtYmVyQ2VsbDIsIFg4Njo6eG1tMSwgWDg2OjplY3gsIFg4Njo6ZWF4KTsKLSAgICAgICAgd2Fz
SlNOdW1iZXJDZWxsMmIgPSBfXyBqbXAoKTsKLQotICAgICAgICAvLyAoMikgVGhpcyBoYW5kbGVz
IGNhc2VzIHdoZXJlIHNyYzIgaXMgYW4gaW1tZWRpYXRlIG51bWJlci4KLSAgICAgICAgLy8gICAg
IFR3byBzbG93IGNhc2VzIC0gZWl0aGVyIHNyYzEgaXNuJ3QgYW4gaW1tZWRpYXRlLCBvciB0aGUg
c3VidHJhY3Qgb3ZlcmZsb3dzLgotICAgICAgICBfXyBsaW5rKG9wMmltbSwgX18gbGFiZWwoKSk7
Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7Ci0gICAg
fSBlbHNlIGlmICh0eXBlcy5maXJzdCgpLmlzUmV1c2FibGUoKSAmJiBpc1NTRTJQcmVzZW50KCkp
IHsKLSAgICAgICAgQVNTRVJUKHR5cGVzLmZpcnN0KCkubWlnaHRCZU51bWJlcigpKTsKLQotICAg
ICAgICAvLyBDaGVjayBvcDEgaXMgYSBudW1iZXIKLSAgICAgICAgX18gdGVzdGxfaTMycihKU0lt
bWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWF4KTsKLSAgICAgICAgSm1wU3JjIG9w
MWltbSA9IF9fIGpuZSgpOwotICAgICAgICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVseUlz
TnVtYmVyKCkpIHsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6
OmVheCwgaSwgc3JjMSk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZD4obnVtYmVyU3RydWN0dXJlKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1
Y3R1cmUpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nh
c2VFbnRyeShfXyBqbmUoKSwgaSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gKDEpIEluIHRo
aXMgY2FzZSBzcmMxIGlzIGEgcmV1c2FibGUgbnVtYmVyIGNlbGwuCi0gICAgICAgIC8vICAgICBT
bG93IGNhc2UgaWYgc3JjMiBpcyBub3QgYSBudW1iZXIgdHlwZS4KLSAgICAgICAgX18gdGVzdGxf
aTMycihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWR4KTsKLSAgICAgICAg
Sm1wU3JjIG9wMmltbSA9IF9fIGpuZSgpOwotICAgICAgICBpZiAoIXR5cGVzLnNlY29uZCgpLmRl
ZmluaXRlbHlJc051bWJlcigpKSB7Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoWDg2OjplZHgsIGksIHNyYzIpOwotICAgICAgICAgICAgX18gY21wbF9pMzJtKHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG51bWJlclN0cnVjdHVyZSksIEZJRUxEX09GRlNFVChKU0Nl
bGwsIG1fc3RydWN0dXJlKSwgWDg2OjplZHgpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBw
ZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
ICgxYSkgaWYgd2UgZ2V0IGhlcmUsIHNyYzIgaXMgYWxzbyBhIG51bWJlciBjZWxsCi0gICAgICAg
IF9fIG1vdnNkX21yKEZJRUxEX09GRlNFVChKU051bWJlckNlbGwsIG1fdmFsdWUpLCBYODY6OmVk
eCwgWDg2Ojp4bW0xKTsKLSAgICAgICAgSm1wU3JjIGxvYWRlZERvdWJsZSA9IF9fIGptcCgpOwot
ICAgICAgICAvLyAoMWIpIGlmIHdlIGdldCBoZXJlLCBzcmMyIGlzIGFuIGltbWVkaWF0ZQotICAg
ICAgICBfXyBsaW5rKG9wMmltbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgIGVtaXRGYXN0QXJpdGhJ
bW1Ub0ludChYODY6OmVkeCk7Ci0gICAgICAgIF9fIGN2dHNpMnNkX3JyKFg4Njo6ZWR4LCBYODY6
OnhtbTEpOwotICAgICAgICAvLyAoMWMpIAotICAgICAgICBfXyBsaW5rKGxvYWRlZERvdWJsZSwg
X18gbGFiZWwoKSk7Ci0gICAgICAgIF9fIG1vdnNkX21yKEZJRUxEX09GRlNFVChKU051bWJlckNl
bGwsIG1fdmFsdWUpLCBYODY6OmVheCwgWDg2Ojp4bW0wKTsKLSAgICAgICAgaWYgKG9wY29kZUlE
ID09IG9wX2FkZCkKLSAgICAgICAgICAgIF9fIGFkZHNkX3JyKFg4Njo6eG1tMSwgWDg2Ojp4bW0w
KTsKLSAgICAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3Bfc3ViKQotICAgICAgICAgICAgX18g
c3Vic2RfcnIoWDg2Ojp4bW0xLCBYODY6OnhtbTApOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9tdWwpOwotICAgICAgICAgICAgX18gbXVsc2RfcnIo
WDg2Ojp4bW0xLCBYODY6OnhtbTApOwotICAgICAgICB9Ci0gICAgICAgIF9fIG1vdnNkX3JtKFg4
Njo6eG1tMCwgRklFTERfT0ZGU0VUKEpTTnVtYmVyQ2VsbCwgbV92YWx1ZSksIFg4Njo6ZWF4KTsK
LSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCi0gICAgICAgIHB1dERvdWJs
ZVJlc3VsdFRvSlNOdW1iZXJDZWxsT3JKU0ltbWVkaWF0ZShYODY6OnhtbTAsIFg4Njo6ZWF4LCBk
c3QsICZ3YXNKU051bWJlckNlbGwxLCBYODY6OnhtbTEsIFg4Njo6ZWN4LCBYODY6OmVkeCk7Ci0g
ICAgICAgIHdhc0pTTnVtYmVyQ2VsbDFiID0gX18gam1wKCk7Ci0KLSAgICAgICAgLy8gKDIpIFRo
aXMgaGFuZGxlcyBjYXNlcyB3aGVyZSBzcmMxIGlzIGFuIGltbWVkaWF0ZSBudW1iZXIuCi0gICAg
ICAgIC8vICAgICBUd28gc2xvdyBjYXNlcyAtIGVpdGhlciBzcmMyIGlzbid0IGFuIGltbWVkaWF0
ZSwgb3IgdGhlIHN1YnRyYWN0IG92ZXJmbG93cy4KLSAgICAgICAgX18gbGluayhvcDFpbW0sIF9f
IGxhYmVsKCkpOwotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplZHgs
IGkpOwotICAgIH0gZWxzZQotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW1zKFg4
Njo6ZWF4LCBYODY6OmVkeCwgaSk7Ci0KLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfYWRkKSB7Ci0g
ICAgICAgIGVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZShYODY6OmVheCk7Ci0gICAgICAgIF9f
IGFkZGxfcnIoWDg2OjplZHgsIFg4Njo6ZWF4KTsKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5k
KFNsb3dDYXNlRW50cnkoX18gam8oKSwgaSkpOwotICAgIH0gZWxzZSAgaWYgKG9wY29kZUlEID09
IG9wX3N1YikgewotICAgICAgICBfXyBzdWJsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0gICAg
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKLSAgICAg
ICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbXVsKTsKLSAgICAgICAgLy8gY29udmVydCBl
YXggJiBlZHggZnJvbSBKU0ltbWVkaWF0ZXMgdG8gaW50cywgYW5kIGNoZWNrIGlmIGVpdGhlciBh
cmUgemVybwotICAgICAgICBlbWl0RmFzdEFyaXRoSW1tVG9JbnQoWDg2OjplZHgpOwotICAgICAg
ICBKbXBTcmMgb3AxWmVybyA9IGVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZUp1bXBJZlplcm8o
WDg2OjplYXgpOwotICAgICAgICBfXyB0ZXN0bF9ycihYODY6OmVkeCwgWDg2OjplZHgpOwotICAg
ICAgICBKbXBTcmMgb3AyTm9uWmVybyA9IF9fIGpuZSgpOwotICAgICAgICBfXyBsaW5rKG9wMVpl
cm8sIF9fIGxhYmVsKCkpOwotICAgICAgICAvLyBpZiBlaXRoZXIgaW5wdXQgaXMgemVybywgYWRk
IHRoZSB0d28gdG9nZXRoZXIsIGFuZCBjaGVjayBpZiB0aGUgcmVzdWx0IGlzIDwgMC4KLSAgICAg
ICAgLy8gSWYgaXQgaXMsIHdlIGhhdmUgYSBwcm9ibGVtIChOIDwgMCksIChOICogMCkgPT0gLTAs
IG5vdCByZXByZXNlbnRhdGJsZSBhcyBhIEpTSW1tZWRpYXRlLiAKLSAgICAgICAgX18gbW92bF9y
cihYODY6OmVheCwgWDg2OjplY3gpOwotICAgICAgICBfXyBhZGRsX3JyKFg4Njo6ZWR4LCBYODY6
OmVjeCk7Ci0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpzKCks
IGkpKTsKLSAgICAgICAgLy8gU2tpcCB0aGUgYWJvdmUgY2hlY2sgaWYgbmVpdGhlciBpbnB1dCBp
cyB6ZXJvCi0gICAgICAgIF9fIGxpbmsob3AyTm9uWmVybywgX18gbGFiZWwoKSk7Ci0gICAgICAg
IF9fIGltdWxsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0gICAgICAgIG1fc2xvd0Nhc2VzLmFw
cGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKLSAgICAgICAgZW1pdEZhc3RBcml0aFJl
VGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOwotCi0gICAgaWYgKHR5cGVzLnNlY29uZCgpLmlzUmV1c2FibGUoKSAmJiBpc1NTRTJQ
cmVzZW50KCkpIHsKLSAgICAgICAgX18gbGluayh3YXNKU051bWJlckNlbGwyLCBfXyBsYWJlbCgp
KTsKLSAgICAgICAgX18gbGluayh3YXNKU051bWJlckNlbGwyYiwgX18gbGFiZWwoKSk7Ci0gICAg
fQotICAgIGVsc2UgaWYgKHR5cGVzLmZpcnN0KCkuaXNSZXVzYWJsZSgpICYmIGlzU1NFMlByZXNl
bnQoKSkgewotICAgICAgICBfXyBsaW5rKHdhc0pTTnVtYmVyQ2VsbDEsIF9fIGxhYmVsKCkpOwot
ICAgICAgICBfXyBsaW5rKHdhc0pTTnVtYmVyQ2VsbDFiLCBfXyBsYWJlbCgpKTsKLSAgICB9Ci19
Ci0KLXZvaWQgSklUOjpjb21waWxlQmluYXJ5QXJpdGhPcFNsb3dDYXNlKE9wY29kZUlEIG9wY29k
ZUlELCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBkc3Qs
IHVuc2lnbmVkIHNyYzEsIHVuc2lnbmVkIHNyYzIsIE9wZXJhbmRUeXBlcyB0eXBlcywgdW5zaWdu
ZWQgaSkKLXsKLSAgICBKbXBEc3QgaGVyZSA9IF9fIGxhYmVsKCk7Ci0gICAgX18gbGluayhpdGVy
LT5mcm9tLCBoZXJlKTsKLSAgICBpZiAodHlwZXMuc2Vjb25kKCkuaXNSZXVzYWJsZSgpICYmIGlz
U1NFMlByZXNlbnQoKSkgewotICAgICAgICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVseUlz
TnVtYmVyKCkpIHsKLSAgICAgICAgICAgIGlmIChsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbCgrK2l0
ZXIsIHNyYzEpKQotICAgICAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgICAgIF9fIGxpbmso
aXRlci0+ZnJvbSwgaGVyZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF0eXBlcy5zZWNvbmQo
KS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkgewotICAgICAgICAgICAgaWYgKGxpbmtTbG93Q2FzZUlm
Tm90SlNDZWxsKCsraXRlciwgc3JjMikpCi0gICAgICAgICAgICAgICAgKytpdGVyOwotICAgICAg
ICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBoZXJlKTsKLSAgICAgICAgfQotICAgICAgICBfXyBs
aW5rKCgrK2l0ZXIpLT5mcm9tLCBoZXJlKTsKLSAgICB9IGVsc2UgaWYgKHR5cGVzLmZpcnN0KCku
aXNSZXVzYWJsZSgpICYmIGlzU1NFMlByZXNlbnQoKSkgewotICAgICAgICBpZiAoIXR5cGVzLmZp
cnN0KCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIGlmIChsaW5rU2xvd0Nh
c2VJZk5vdEpTQ2VsbCgrK2l0ZXIsIHNyYzEpKQotICAgICAgICAgICAgICAgICsraXRlcjsKLSAg
ICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgaGVyZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKCF0eXBlcy5zZWNvbmQoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkgewotICAgICAgICAgICAg
aWYgKGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKCsraXRlciwgc3JjMikpCi0gICAgICAgICAgICAg
ICAgKytpdGVyOwotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBoZXJlKTsKLSAgICAg
ICAgfQotICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBoZXJlKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgaGVyZSk7Ci0KLSAgICAvLyBhZGRpdGlv
bmFsIGVudHJ5IHBvaW50IHRvIGhhbmRsZSAtMCBjYXNlcy4KLSAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfbXVsKQotICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBoZXJlKTsKLQotICAgIGVt
aXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzEsIDAsIFg4Njo6ZWN4KTsKLSAgICBl
bWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzcmMyLCA0LCBYODY6OmVjeCk7Ci0gICAg
aWYgKG9wY29kZUlEID09IG9wX2FkZCkKLSAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0
ZXI6OmN0aV9vcF9hZGQpOwotICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX3N1YikKLSAgICAg
ICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9zdWIpOwotICAgIGVsc2Ugewot
ICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbXVsKTsKLSAgICAgICAgZW1pdENUSUNhbGwo
aSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9tdWwpOwotICAgIH0KLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7Ci19Ci0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKLXsK
LSAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
LmJlZ2luKCk7Ci0gICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMuc2l6ZSgpOwotCi0gICAgdW5zaWduZWQgcHJvcGVydHlBY2Nlc3NJbnN0cnVj
dGlvbkluZGV4ID0gMDsKLSAgICB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCA9IDA7Ci0KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7Ci0gICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UobV9pbnRlcnByZXRlci0+aXNPcGNvZGUoaW5zdHJ1Y3Rpb25b
aV0udS5vcGNvZGUpLCAicHJpdmF0ZUNvbXBpbGVNYWluUGFzcyBnb25lIGJhZCBAICVkIiwgaSk7
Ci0KLSNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotICAgICAgICBpZiAoaSA+IDApIC8vIEF2
b2lkIHRoZSBvdmVyaGVhZCBvZiBzYW1wbGluZyBvcF9lbnRlciB0d2ljZS4KLSAgICAgICAgICAg
IF9fIG1vdmxfaTMybShtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShpbnN0
cnVjdGlvbiArIGkpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7Ci0j
ZW5kaWYKLQotICAgICAgICBtX2xhYmVsc1tpXSA9IF9fIGxhYmVsKCk7Ci0gICAgICAgIE9wY29k
ZUlEIG9wY29kZUlEID0gbV9pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25baV0u
dS5vcGNvZGUpOwotICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgICAgIGNhc2Ugb3Bf
bW92OiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMgPSBpbnN0cnVjdGlvbltpICsgMl0udS5v
cGVyYW5kOwotICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJ
bmRleChzcmMpKQotICAgICAgICAgICAgICAgIF9fIG1vdmxfaTMycihhc0ludGVnZXIobV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KHNyYykpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIFg4Njo6ZWF4LCBpKTsK
LSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIG9wX2FkZDogewotICAgICAgICAgICAgdW5zaWduZWQgZHN0ID0g
aW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYzEg
PSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgdW5zaWduZWQgc3Jj
MiA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgICAgIGlmIChKU1Zh
bHVlKiB2YWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMxKSkgewotICAg
ICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgWDg2OjplYXgsIGkpOwot
ICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7
Ci0gICAgICAgICAgICAgICAgX18gYWRkbF9pMzJyKGdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlh
dGUodmFsdWUpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5k
KFNsb3dDYXNlRW50cnkoX18gam8oKSwgaSkpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoSlNWYWx1ZSogdmFsdWUg
PSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMikpIHsKLSAgICAgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOwotICAgICAgICAg
ICAgICAgIF9fIGFkZGxfaTMycihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKHZhbHVlKSwg
WDg2OjplYXgpOwotICAgICAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVu
dHJ5KF9fIGpvKCksIGkpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIE9wZXJhbmRUeXBl
cyB0eXBlcyA9IE9wZXJhbmRUeXBlczo6ZnJvbUludChpbnN0cnVjdGlvbltpICsgNF0udS5vcGVy
YW5kKTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZXMuZmlyc3QoKS5taWdodEJlTnVtYmVyKCkg
JiYgdHlwZXMuc2Vjb25kKCkubWlnaHRCZU51bWJlcigpKQotICAgICAgICAgICAgICAgICAgICBj
b21waWxlQmluYXJ5QXJpdGhPcChvcF9hZGQsIGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQs
IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJh
bmQsIE9wZXJhbmRUeXBlczo6ZnJvbUludChpbnN0cnVjdGlvbltpICsgNF0udS5vcGVyYW5kKSwg
aSk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRQdXRD
VElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAs
IFg4Njo6ZWN4KTsKLSAgICAgICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOwotICAg
ICAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2FkZCk7
Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpICs9IDU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX2VuZDogewotICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxT
Y29wZUNoYWluKQotICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpj
dGlfb3BfZW5kKTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgX18gcHVzaGxf
bShSZWdpc3RlckZpbGU6OlJldHVyblBDICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0
ZXIpKSwgWDg2OjplZGkpOwotICAgICAgICAgICAgX18gcmV0KCk7Ci0gICAgICAgICAgICBpICs9
IDI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2ptcDog
ewotICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGptcCgpLCBp
ICsgMSArIHRhcmdldCkpOwotICAgICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wcmVfaW5jOiB7Ci0gICAgICAgICAgICBpbnQg
c3JjRHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgX18gYWRk
bF9pOHIoZ2V0RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZShKU0ltbWVkaWF0ZTo6b25lSW1tZWRp
YXRlKCkpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nh
c2VFbnRyeShfXyBqbygpLCBpKSk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHNyY0RzdCk7Ci0gICAgICAgICAgICBpICs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIG9wX2xvb3A6IHsKLSAgICAgICAgICAgIGVtaXRTbG93U2NyaXB0
Q2hlY2soaSk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShf
XyBqbXAoKSwgaSArIDEgKyB0YXJnZXQpKTsKLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9sZXNzOiB7Ci0g
ICAgICAgICAgICBlbWl0U2xvd1NjcmlwdENoZWNrKGkpOwotCi0gICAgICAgICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOwotICAgICAgICAgICAgSlNW
YWx1ZSogc3JjMmltbSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhpbnN0cnVjdGlv
bltpICsgMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGlmIChzcmMyaW1tKSB7Ci0gICAgICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kLCBYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW1tTnVtKFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRl
Z2VyKHNyYzJpbW0pLCBYODY6OmVkeCk7Ci0gICAgICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBl
bmQoSm1wVGFibGUoX18gamwoKSwgaSArIDMgKyB0YXJnZXQpKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZCwgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQs
IFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1O
dW0oWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElt
bU51bShYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICAgICAgX18gY21wbF9ycihYODY6OmVkeCwg
WDg2OjplYXgpOwotICAgICAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9f
IGpsKCksIGkgKyAzICsgdGFyZ2V0KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpICs9
IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2xvb3Bf
aWZfbGVzc2VxOiB7Ci0gICAgICAgICAgICBlbWl0U2xvd1NjcmlwdENoZWNrKGkpOwotCi0gICAg
ICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOwot
ICAgICAgICAgICAgSlNWYWx1ZSogc3JjMmltbSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJp
Y0FyZyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGlmIChzcmMy
aW1tKSB7Ci0gICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgICAgICBfXyBj
bXBsX2kzMnIoYXNJbnRlZ2VyKHNyYzJpbW0pLCBYODY6OmVkeCk7Ci0gICAgICAgICAgICAgICAg
bV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gamxlKCksIGkgKyAzICsgdGFyZ2V0KSk7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltp
ICsgMl0udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgICAgIF9fIGNt
cGxfcnIoWDg2OjplZHgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBtX2ptcFRhYmxlLmFw
cGVuZChKbXBUYWJsZShfXyBqbGUoKSwgaSArIDMgKyB0YXJnZXQpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2Ugb3BfbmV3X29iamVjdDogewotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50
ZXJwcmV0ZXI6OmN0aV9vcF9uZXdfb2JqZWN0KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9
IDI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9i
eV9pZDogewotICAgICAgICAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byByZXBhdGNoIGJv
dGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9p
bnRlciwKLSAgICAgICAgICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJl
ZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUg
Y29kZQotICAgICAgICAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJl
IGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCi0KLSAgICAgICAgICAgIGlu
dCBiYXNlVlJlZyA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJlZywgWDg2OjplYXgsIGluc3RydWN0aW9uW2kg
KyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKLQotICAgICAgICAgICAgQVNTRVJUKG1fY29k
ZUJsb2NrLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0
aW9uSW5kZXhdLmJ5dGVjb2RlSW5kZXggPT0gaSk7Ci0KLSAgICAgICAgICAgIC8vIEp1bXAgdG8g
YSBzbG93IGNhc2UgaWYgZWl0aGVyIHRoZSBiYXNlIG9iamVjdCBpcyBhbiBpbW1lZGlhdGUsIG9y
IGlmIHRoZSBTdHJ1Y3R1cmUgZG9lcyBub3QgbWF0Y2guCi0gICAgICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoWDg2OjplYXgsIGksIGJhc2VWUmVnKTsKLQotICAgICAgICAgICAg
Sm1wRHN0IGhvdFBhdGhCZWdpbiA9IF9fIGxhYmVsKCk7Ci0gICAgICAgICAgICBtX3Byb3BlcnR5
QWNjZXNzQ29tcGlsYXRpb25JbmZvW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uaG90
UGF0aEJlZ2luID0gaG90UGF0aEJlZ2luOwotICAgICAgICAgICAgKytwcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uSW5kZXg7Ci0KLSAgICAgICAgICAgIC8vIEl0IGlzIGltcG9ydGFudCB0aGF0IHRo
ZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gcGxhbnRzIGEgMzJiaXQgaW1tZWRpYXRlLCBpbiBvcmRl
ciB0aGF0IGl0IGNhbiBiZSBwYXRjaGVkIG92ZXIuCi0gICAgICAgICAgICBfXyBjbXBsX2kzMm0o
cmVwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlLCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0
cnVjdHVyZSksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEFTU0VSVChYODZBc3NlbWJsZXI6Omdl
dERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKGhvdFBhdGhCZWdpbiwgX18gbGFiZWwoKSkgPT0gcmVw
YXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBw
ZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKLQotICAgICAgICAgICAgLy8gUGxhbnQg
YSBsb2FkIGZyb20gYSBib2d1cyBvZnNldCBpbiB0aGUgb2JqZWN0J3MgcHJvcGVydHkgbWFwOyB3
ZSB3aWxsIHBhdGNoIHRoaXMgbGF0ZXIsIGlmIGl0IGlzIHRvIGJlIHVzZWQuCi0gICAgICAgICAg
ICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBY
ODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgX18gbW92bF9ybShYODY6OmVkeCwgcmVw
YXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBBU1NFUlQo
WDg2QXNzZW1ibGVyOjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhob3RQYXRoQmVnaW4sIF9f
IGxhYmVsKCkpID09IHJlcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBPZmZzZXQpOwotCi0g
ICAgICAgICAgICBpICs9IDg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX2dldF9ieV9pZDogewotICAgICAgICAgICAgLy8gQXMgZm9yIHB1dF9ieV9pZCwg
Z2V0X2J5X2lkIHJlcXVpcmVzIHRoZSBvZmZzZXQgb2YgdGhlIFN0cnVjdHVyZSBhbmQgdGhlIG9m
ZnNldCBvZiB0aGUgYWNjZXNzIHRvIGJlIHJlcGF0Y2hlZC4KLSAgICAgICAgICAgIC8vIEFkZGl0
aW9uYWxseSwgZm9yIGdldF9ieV9pZCB3ZSBuZWVkIHJlcGF0Y2ggdGhlIG9mZnNldCBvZiB0aGUg
YnJhbmNoIHRvIHRoZSBzbG93IGNhc2UgKHdlIHJlcGF0Y2ggdGhpcyB0byBqdW1wCi0gICAgICAg
ICAgICAvLyB0byBhcnJheS1sZW5ndGggLyBwcm90b3R5cGUgYWNjZXNzIHRyYW5wb2xpbmVzLCBh
bmQgZmluYWxseSB3ZSBhbHNvIHRoZSB0aGUgcHJvcGVydHktbWFwIGFjY2VzcyBvZmZzZXQgYXMg
YSBsYWJlbAotICAgICAgICAgICAgLy8gdG8ganVtcCBiYWNrIHRvIGlmIG9uZSBvZiB0aGVzZSB0
cmFtcG9saWVzIGZpbmRzIGEgbWF0Y2guCi0KLSAgICAgICAgICAgIGludCBiYXNlVlJlZyA9IGlu
c3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2VWUmVnLCBYODY6OmVheCwgaSk7Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX2Nv
ZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbcHJvcGVydHlBY2Nlc3NJbnN0cnVj
dGlvbkluZGV4XS5ieXRlY29kZUluZGV4ID09IGkpOwotCi0gICAgICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoWDg2OjplYXgsIGksIGJhc2VWUmVnKTsKLQotICAgICAgICAgICAg
Sm1wRHN0IGhvdFBhdGhCZWdpbiA9IF9fIGxhYmVsKCk7Ci0gICAgICAgICAgICBtX3Byb3BlcnR5
QWNjZXNzQ29tcGlsYXRpb25JbmZvW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uaG90
UGF0aEJlZ2luID0gaG90UGF0aEJlZ2luOwotICAgICAgICAgICAgKytwcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uSW5kZXg7Ci0KLSAgICAgICAgICAgIF9fIGNtcGxfaTMybShyZXBhdGNoR2V0QnlJ
ZERlZmF1bHRTdHJ1Y3R1cmUsIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2
OjplYXgpOwotICAgICAgICAgICAgQVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJl
dHdlZW5MYWJlbHMoaG90UGF0aEJlZ2luLCBfXyBsYWJlbCgpKSA9PSByZXBhdGNoT2Zmc2V0R2V0
QnlJZFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VF
bnRyeShfXyBqbmUoKSwgaSkpOwotICAgICAgICAgICAgQVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0
RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoaG90UGF0aEJlZ2luLCBfXyBsYWJlbCgpKSA9PSByZXBh
dGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwotCi0gICAgICAgICAgICBfXyBtb3Zs
X21yKEZJRUxEX09GRlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwg
WDg2OjplYXgpOwotICAgICAgICAgICAgX18gbW92bF9tcihyZXBhdGNoR2V0QnlJZERlZmF1bHRP
ZmZzZXQsIFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBBU1NFUlQoWDg2QXNzZW1i
bGVyOjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhob3RQYXRoQmVnaW4sIF9fIGxhYmVsKCkp
ID09IHJlcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQpOwotICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLQot
ICAgICAgICAgICAgaSArPSA4OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9pbnN0YW5jZW9mOiB7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsgLy8gdmFsdWUK
LSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUu
b3BlcmFuZCwgWDg2OjplY3gsIGkpOyAvLyBiYXNlVmFsCi0gICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyA0XS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsg
Ly8gcHJvdG8KLQotICAgICAgICAgICAgLy8gY2hlY2sgaWYgYW55IGFyZSBpbW1lZGlhdGVzCi0g
ICAgICAgICAgICBfXyBvcmxfcnIoWDg2OjplYXgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9f
IG9ybF9ycihYODY6OmVkeCwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gdGVzdGxfaTMycihK
U0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplY3gpOwotCi0gICAgICAgICAgICBtX3Nsb3dDYXNl
cy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbnooKSwgaSkpOwotCi0gICAgICAgICAgICAvLyBj
aGVjayB0aGF0IGFsbCBhcmUgb2JqZWN0IHR5cGUgLSB0aGlzIGlzIGEgYml0IG9mIGEgYml0aGFj
ayB0byBhdm9pZCBleGNlc3MgYnJhbmNoaW5nOwotICAgICAgICAgICAgLy8gd2UgY2hlY2sgdGhh
dCB0aGUgc3VtIG9mIHRoZSB0aHJlZSB0eXBlIGNvZGVzIGZyb20gU3RydWN0dXJlcyBpcyBleGFj
dGx5IDMgKiBPYmplY3RUeXBlLAotICAgICAgICAgICAgLy8gdGhpcyB3b3JrcyBiZWNhdXNlIE51
bWJlclR5cGUgYW5kIFN0cmluZ1R5cGUgYXJlIHNtYWxsZXIKLSAgICAgICAgICAgIF9fIG1vdmxf
aTMycigzICogT2JqZWN0VHlwZSwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gbW92bF9tcihG
SUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0g
ICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwg
WDg2OjplZHgsIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIF9fIHN1YmxfbXIoRklFTERfT0ZGU0VU
KFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX3R5cGUpLCBYODY6OmVheCwgWDg2OjplY3gpOwotICAg
ICAgICAgICAgX18gc3VibF9tcihGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvLm1f
dHlwZSksIFg4Njo6ZWR4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsgLy8gcmVs
b2FkIGJhc2VWYWwKLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwg
bV9zdHJ1Y3R1cmUpLCBYODY6OmVkeCwgWDg2OjplZHgpOwotICAgICAgICAgICAgX18gY21wbF9y
bShYODY6OmVjeCwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX3R5cGUpLCBY
ODY6OmVkeCk7Ci0KLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5
KF9fIGpuZSgpLCBpKSk7Ci0KLSAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgYmFzZVZhbCdzIGZs
YWdzIGluY2x1ZGUgSW1wbGVtZW50c0hhc0luc3RhbmNlIGJ1dCBub3QgT3ZlcnJpZGVzSGFzSW5z
dGFuY2UKLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90
eXBlSW5mby5tX2ZsYWdzKSwgWDg2OjplZHgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIGFu
ZGxfaTMycihJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBPdmVycmlkZXNIYXNJbnN0YW5jZSwgWDg2
OjplY3gpOwotICAgICAgICAgICAgX18gY21wbF9pMzJyKEltcGxlbWVudHNIYXNJbnN0YW5jZSwg
WDg2OjplY3gpOwotCi0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRy
eShfXyBqbmUoKSwgaSkpOwotCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGlu
c3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWN4LCBpKTsgLy8gcmVsb2FkIHZhbHVl
Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyA0XS51
Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsgLy8gcmVsb2FkIHByb3RvCi0KLSAgICAgICAgICAgIC8v
IG9wdGltaXN0aWNhbGx5IGxvYWQgdHJ1ZSByZXN1bHQKLSAgICAgICAgICAgIF9fIG1vdmxfaTMy
cihhc0ludGVnZXIoanNCb29sZWFuKHRydWUpKSwgWDg2OjplYXgpOwotCi0gICAgICAgICAgICBK
bXBEc3QgbG9vcCA9IF9fIGxhYmVsKCk7Ci0KLSAgICAgICAgICAgIC8vIGxvYWQgdmFsdWUncyBw
cm90b3R5cGUKLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9z
dHJ1Y3R1cmUpLCBYODY6OmVjeCwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gbW92bF9tcihG
SUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3Byb3RvdHlwZSksIFg4Njo6ZWN4LCBYODY6OmVjeCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIF9fIGNtcGxfcnIoWDg2OjplY3gsIFg4Njo6ZWR4
KTsKLSAgICAgICAgICAgIEptcFNyYyBleGl0ID0gX18gamUoKTsKLQotICAgICAgICAgICAgX18g
Y21wbF9pMzJyKGFzSW50ZWdlcihqc051bGwoKSksIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIEpt
cFNyYyBnb1RvTG9vcCA9IF9fIGpuZSgpOwotICAgICAgICAgICAgX18gbGluayhnb1RvTG9vcCwg
bG9vcCk7Ci0KLSAgICAgICAgICAgIF9fIG1vdmxfaTMycihhc0ludGVnZXIoanNCb29sZWFuKGZh
bHNlKSksIFg4Njo6ZWF4KTsKLQotICAgICAgICAgICAgX18gbGluayhleGl0LCBfXyBsYWJlbCgp
KTsKLQotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kKTsKLQotICAgICAgICAgICAgaSArPSA1OwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9kZWxfYnlfaWQ6IHsKLSAgICAgICAgICAgIGVt
aXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJh
bmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZF0pOwotICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+
KGlkZW50KSwgNCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3Rp
X29wX2RlbF9ieV9pZCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9tdWw6IHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGRzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBzcmMxID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHNyYzIgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOwotCi0gICAg
ICAgICAgICAvLyBGb3Igbm93LCBvbmx5IHBsYW50IGEgZmFzdCBpbnQgY2FzZSBpZiB0aGUgY29u
c3RhbnQgb3BlcmFuZCBpcyBncmVhdGVyIHRoYW4gemVyby4KLSAgICAgICAgICAgIEpTVmFsdWUq
IHNyYzFWYWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMxKTsKLSAgICAg
ICAgICAgIEpTVmFsdWUqIHNyYzJWYWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0Fy
ZyhzcmMyKTsKLSAgICAgICAgICAgIGludDMyX3QgdmFsdWU7Ci0gICAgICAgICAgICBpZiAoc3Jj
MVZhbHVlICYmICgodmFsdWUgPSBKU0ltbWVkaWF0ZTo6aW50VmFsdWUoc3JjMVZhbHVlKSkgPiAw
KSkgewotICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgWDg2Ojpl
YXgsIGkpOwotICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6
OmVheCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1pdEZhc3RBcml0aERlVGFnSW1tZWRpYXRlKFg4
Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBfXyBpbXVsbF9pMzJyKFg4Njo6ZWF4LCB2YWx1ZSwg
WDg2OjplYXgpOwotICAgICAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVu
dHJ5KF9fIGpvKCksIGkpKTsKLSAgICAgICAgICAgICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1l
ZGlhdGUoWDg2OjplYXgpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3JjMlZhbHVlICYmICgodmFsdWUgPSBKU0lt
bWVkaWF0ZTo6aW50VmFsdWUoc3JjMlZhbHVlKSkgPiAwKSkgewotICAgICAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICAg
ICAgZW1pdEZhc3RBcml0aERlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAg
ICBfXyBpbXVsbF9pMzJyKFg4Njo6ZWF4LCB2YWx1ZSwgWDg2OjplYXgpOwotICAgICAgICAgICAg
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKLSAgICAg
ICAgICAgICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUoWDg2OjplYXgpOwotICAgICAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgIGNvbXBpbGVCaW5hcnlBcml0aE9wKG9wX211bCwgaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgaW5zdHJ1
Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgT3BlcmFuZFR5cGVzOjpmcm9tSW50KGluc3RydWN0aW9u
W2kgKyA0XS51Lm9wZXJhbmQpLCBpKTsKLQotICAgICAgICAgICAgaSArPSA1OwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uZXdfZnVuYzogewotICAgICAg
ICAgICAgRnVuY0RlY2xOb2RlKiBmdW5jID0gKG1fY29kZUJsb2NrLT5mdW5jdGlvbnNbaW5zdHJ1
Y3Rpb25baSArIDJdLnUub3BlcmFuZF0pLmdldCgpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFy
Z0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGZ1bmMpLCAwKTsKLSAgICAgICAg
ICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbmV3X2Z1bmMpOwotICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfY2FsbDoKLSAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6Ci0gICAgICAg
IGNhc2Ugb3BfY29uc3RydWN0OiB7Ci0gICAgICAgICAgICBjb21waWxlT3BDYWxsKG9wY29kZUlE
LCBpbnN0cnVjdGlvbiArIGksIGksIGNhbGxMaW5rSW5mb0luZGV4KyspOwotICAgICAgICAgICAg
aSArPSAob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0ID8gNyA6IDUpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfZ2xvYmFsX3ZhcjogewotICAgICAg
ICAgICAgSlNWYXJpYWJsZU9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNWYXJp
YWJsZU9iamVjdCo+KGluc3RydWN0aW9uW2kgKyAyXS51LmpzQ2VsbCk7Ci0gICAgICAgICAgICBf
XyBtb3ZsX2kzMnIoYXNJbnRlZ2VyKGdsb2JhbE9iamVjdCksIFg4Njo6ZWF4KTsKLSAgICAgICAg
ICAgIGVtaXRHZXRWYXJpYWJsZU9iamVjdFJlZ2lzdGVyKFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltp
ICsgM10udS5vcGVyYW5kLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXRfZ2xv
YmFsX3ZhcjogewotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgM10udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICBKU1ZhcmlhYmxl
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oaW5z
dHJ1Y3Rpb25baSArIDFdLnUuanNDZWxsKTsKLSAgICAgICAgICAgIF9fIG1vdmxfaTMycihhc0lu
dGVnZXIoZ2xvYmFsT2JqZWN0KSwgWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1dFZhcmlh
YmxlT2JqZWN0UmVnaXN0ZXIoWDg2OjplZHgsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X3Njb3BlZF92YXI6IHsKLSAgICAgICAgICAgIGlu
dCBza2lwID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCArIG1fY29kZUJsb2NrLT5uZWVk
c0Z1bGxTY29wZUNoYWluOwotCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFJl
Z2lzdGVyRmlsZTo6U2NvcGVDaGFpbiwgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgd2hpbGUg
KHNraXAtLSkKLSAgICAgICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChTY29wZUNo
YWluTm9kZSwgbmV4dCksIFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0KLSAgICAgICAgICAgIF9fIG1v
dmxfbXIoRklFTERfT0ZGU0VUKFNjb3BlQ2hhaW5Ob2RlLCBvYmplY3QpLCBYODY6OmVheCwgWDg2
OjplYXgpOwotICAgICAgICAgICAgZW1pdEdldFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIoWDg2Ojpl
YXgsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX3B1dF9zY29wZWRfdmFyOiB7Ci0gICAgICAgICAgICBpbnQgc2tpcCA9IGluc3Ry
dWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFp
bjsKLQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihSZWdpc3RlckZpbGU6OlNj
b3BlQ2hhaW4sIFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOwotICAgICAgICAg
ICAgd2hpbGUgKHNraXAtLSkKLSAgICAgICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNF
VChTY29wZUNoYWluTm9kZSwgbmV4dCksIFg4Njo6ZWR4LCBYODY6OmVkeCk7Ci0KLSAgICAgICAg
ICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKFNjb3BlQ2hhaW5Ob2RlLCBvYmplY3QpLCBYODY6
OmVkeCwgWDg2OjplZHgpOwotICAgICAgICAgICAgZW1pdFB1dFZhcmlhYmxlT2JqZWN0UmVnaXN0
ZXIoWDg2OjplYXgsIFg4Njo6ZWR4LCBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3BfdGVhcl9vZmZfYWN0aXZhdGlvbjogewotICAgICAgICAgICAgZW1pdFB1dENUSUFy
Z0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgMCwgWDg2
OjplY3gpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF90
ZWFyX29mZl9hY3RpdmF0aW9uKTsKLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfdGVhcl9vZmZfYXJndW1lbnRzOiB7Ci0g
ICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3RlYXJfb2ZmX2Fy
Z3VtZW50cyk7Ci0gICAgICAgICAgICBpICs9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIG9wX3JldDogewotICAgICAgICAgICAgLy8gV2UgY291bGQgSklU
IGdlbmVyYXRlIHRoZSBkZXJlZiwgb25seSBjYWxsaW5nIG91dCB0byBDIHdoZW4gdGhlIHJlZmNv
dW50IGhpdHMgemVyby4KLSAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2Nv
cGVDaGFpbikKLSAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3Rp
X29wX3JldF9zY29wZUNoYWluKTsKLQotICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQg
aW4gJWVheC4KLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOwotCi0gICAgICAgICAgICAvLyBHcmFiIHRo
ZSByZXR1cm4gYWRkcmVzcy4KLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoUmVn
aXN0ZXJGaWxlOjpSZXR1cm5QQywgWDg2OjplZHgsIGkpOwotCi0gICAgICAgICAgICAvLyBSZXN0
b3JlIG91ciBjYWxsZXIncyAiciIuCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUsIFg4Njo6ZWRpLCBpKTsKLQotICAgICAgICAgICAg
Ly8gUmV0dXJuLgotICAgICAgICAgICAgX18gcHVzaGxfcihYODY6OmVkeCk7Ci0gICAgICAgICAg
ICBfXyByZXQoKTsKLQotICAgICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uZXdfYXJyYXk6IHsKLSAgICAgICAgICAgIF9fIGxl
YWxfbXIoc2l6ZW9mKFJlZ2lzdGVyKSAqIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4
Njo6ZWRpLCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCAw
KTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChpbnN0cnVjdGlvbltpICsgM10u
dS5vcGVyYW5kLCA0KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpj
dGlfb3BfbmV3X2FycmF5KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Jlc29sdmU6IHsKLSAgICAg
ICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZF0pOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Nv
bnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgMCk7Ci0gICAgICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmUpOwotICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsK
LSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZlcmlmeTogewotICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7Ci0K
LSAgICAgICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4
KTsKLSAgICAgICAgICAgIEptcFNyYyBpc0ltbWVkaWF0ZSA9IF9fIGpuZSgpOwotICAgICAgICAg
ICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4
LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMm0oT2JqZWN0VHlwZSwgRklFTERf
T0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mbykgKyBGSUVMRF9PRkZTRVQoVHlwZUluZm8sIG1f
dHlwZSksIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIEptcFNyYyBpc09iamVjdCA9IF9fIGplKCk7
Ci0KLSAgICAgICAgICAgIF9fIGxpbmsoaXNJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwotICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5k
LCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgX18gbGluayhpc09iamVjdCwg
X18gbGFiZWwoKSk7Ci0KLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDogewotICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2Ojpl
YXgsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKLSAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVkeCwgaSk7Ci0gICAgICAgICAg
ICBlbWl0RmFzdEFyaXRoSW1tVG9JbnQoWDg2OjplZHgpOwotICAgICAgICAgICAgX18gdGVzdGxf
aTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9zbG93
Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKLSAgICAgICAgICAgIF9f
IGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2ludGVycHJldGVyLT5tX2pz
QXJyYXlWcHRyKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNs
b3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKLQotICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBh
cnJheTsgZ2V0IHRoZSBtX3N0b3JhZ2UgcG9pbnRlciBpbnRvIGVjeCwgdGhlbiBjaGVjayBpZiB0
aGUgaW5kZXggaXMgYmVsb3cgdGhlIGZhc3QgY3V0b2ZmCi0gICAgICAgICAgICBfXyBtb3ZsX21y
KEZJRUxEX09GRlNFVChKU0FycmF5LCBtX3N0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplY3gpOwot
ICAgICAgICAgICAgX18gY21wbF9ybShYODY6OmVkeCwgRklFTERfT0ZGU0VUKEpTQXJyYXksIG1f
ZmFzdEFjY2Vzc0N1dG9mZiksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFw
cGVuZChTbG93Q2FzZUVudHJ5KF9fIGpiZSgpLCBpKSk7Ci0KLSAgICAgICAgICAgIC8vIEdldCB0
aGUgdmFsdWUgZnJvbSB0aGUgdmVjdG9yCi0gICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09G
RlNFVChBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSwgWDg2OjplY3gsIFg4Njo6ZWR4LCBzaXpl
b2YoSlNWYWx1ZSopLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0Owot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2Z1
bmM6IHsKLSAgICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZF0pOwotICAgICAgICAgICAgZW1p
dFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgMCk7
Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVf
ZnVuYyk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3N1Yjogewot
ICAgICAgICAgICAgY29tcGlsZUJpbmFyeUFyaXRoT3Aob3Bfc3ViLCBpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kLCBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBpbnN0cnVjdGlvbltp
ICsgM10udS5vcGVyYW5kLCBPcGVyYW5kVHlwZXM6OmZyb21JbnQoaW5zdHJ1Y3Rpb25baSArIDRd
LnUub3BlcmFuZCksIGkpOwotICAgICAgICAgICAgaSArPSA1OwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsOiB7Ci0gICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6
OmVheCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOwotICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWR4LCBpKTsKLSAgICAgICAg
ICAgIGVtaXRGYXN0QXJpdGhJbW1Ub0ludChYODY6OmVkeCk7Ci0gICAgICAgICAgICBfXyB0ZXN0
bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX3Ns
b3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwotICAgICAgICAgICAg
X18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG1faW50ZXJwcmV0ZXItPm1f
anNBcnJheVZwdHIpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQo
U2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwotCi0gICAgICAgICAgICAvLyBUaGlzIGlzIGFu
IGFycmF5OyBnZXQgdGhlIG1fc3RvcmFnZSBwb2ludGVyIGludG8gZWN4LCB0aGVuIGNoZWNrIGlm
IHRoZSBpbmRleCBpcyBiZWxvdyB0aGUgZmFzdCBjdXRvZmYKLSAgICAgICAgICAgIF9fIG1vdmxf
bXIoRklFTERfT0ZGU0VUKEpTQXJyYXksIG1fc3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7
Ci0gICAgICAgICAgICBfXyBjbXBsX3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoSlNBcnJheSwg
bV9mYXN0QWNjZXNzQ3V0b2ZmKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgSm1wU3JjIGluRmFz
dFZlY3RvciA9IF9fIGphKCk7Ci0gICAgICAgICAgICAvLyBObzsgb2ggd2VsbCwgY2hlY2sgaWYg
dGhlIGFjY2VzcyBpZiB3aXRoaW4gdGhlIHZlY3RvciAtIGlmIHNvLCB3ZSBtYXkgc3RpbGwgYmUg
b2theS4KLSAgICAgICAgICAgIF9fIGNtcGxfcm0oWDg2OjplZHgsIEZJRUxEX09GRlNFVChBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yTGVuZ3RoKSwgWDg2OjplY3gpOwotICAgICAgICAgICAgbV9zbG93
Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gamJlKCksIGkpKTsKLQotICAgICAgICAgICAg
Ly8gVGhpcyBpcyBhIHdyaXRlIHRvIHRoZSBzbG93IHBhcnQgb2YgdGhlIHZlY3RvcjsgZmlyc3Qs
IHdlIGhhdmUgdG8gY2hlY2sgaWYgdGhpcyB3b3VsZCBiZSB0aGUgZmlyc3Qgd3JpdGUgdG8gdGhp
cyBsb2NhdGlvbi4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgYmUgYWJsZSB0byBoYW5k
bGUgaW5pdGlhbCB3cml0ZSB0byBhcnJheTsgaW5jcmVtZW50IHRoZSB0aGUgbnVtYmVyIG9mIGl0
ZW1zIGluIHRoZSBhcnJheSwgYW5kIHBvdGVudGlhbGx5IHVwZGF0ZSBmYXN0IGFjY2VzcyBjdXRv
ZmYuIAotICAgICAgICAgICAgX18gY21wbF9pOG0oMCwgRklFTERfT0ZGU0VUKEFycmF5U3RvcmFn
ZSwgbV92ZWN0b3JbMF0pLCBYODY6OmVjeCwgWDg2OjplZHgsIHNpemVvZihKU1ZhbHVlKikpOwot
ICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gamUoKSwgaSkp
OwotCi0gICAgICAgICAgICAvLyBBbGwgZ29vZCAtIHB1dCB0aGUgdmFsdWUgaW50byB0aGUgYXJy
YXkuCi0gICAgICAgICAgICBfXyBsaW5rKGluRmFzdFZlY3RvciwgX18gbGFiZWwoKSk7Ci0gICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJh
bmQsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIF9fIG1vdmxfcm0oWDg2OjplYXgsIEZJRUxE
X09GRlNFVChBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSwgWDg2OjplY3gsIFg4Njo6ZWR4LCBz
aXplb2YoSlNWYWx1ZSopKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIENUSV9DT01QSUxFX0JJTkFSWV9PUChvcF9sZXNzZXEpCi0g
ICAgICAgIGNhc2Ugb3BfbG9vcF9pZl90cnVlOiB7Ci0gICAgICAgICAgICBlbWl0U2xvd1Njcmlw
dENoZWNrKGkpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltp
ICsgMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0
cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7Ci0KLSAgICAgICAgICAgIF9f
IGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSksIFg4Njo6
ZWF4KTsKLSAgICAgICAgICAgIEptcFNyYyBpc1plcm8gPSBfXyBqZSgpOwotICAgICAgICAgICAg
X18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWF4KTsK
LSAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGpuZSgpLCBpICsgMiAr
IHRhcmdldCkpOwotCi0gICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRp
YXRlOjp0cnVlSW1tZWRpYXRlKCkpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX2ptcFRhYmxl
LmFwcGVuZChKbXBUYWJsZShfXyBqZSgpLCBpICsgMiArIHRhcmdldCkpOwotICAgICAgICAgICAg
X18gY21wbF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6ZmFsc2VJbW1lZGlhdGUoKSksIFg4
Njo6ZWF4KTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9f
IGpuZSgpLCBpKSk7Ci0KLSAgICAgICAgICAgIF9fIGxpbmsoaXNaZXJvLCBfXyBsYWJlbCgpKTsK
LSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9OwotICAg
ICAgICBjYXNlIG9wX3Jlc29sdmVfYmFzZTogewotICAgICAgICAgICAgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVy
YW5kXSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZD4oaWRlbnQpLCAwKTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVy
cHJldGVyOjpjdGlfb3BfcmVzb2x2ZV9iYXNlKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9
IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25lZ2F0
ZTogewotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdENU
SUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZWdhdGUpOwotICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAg
ICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfcmVzb2x2ZV9za2lwOiB7Ci0gICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKTsKLSAg
ICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVk
PihpZGVudCksIDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGluc3RydWN0
aW9uW2kgKyAzXS51Lm9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbiwg
NCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29s
dmVfc2tpcCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2dsb2JhbDogewotICAgICAg
ICAgICAgLy8gRmFzdCBjYXNlCi0gICAgICAgICAgICB1bnNpZ25lZCBnbG9iYWxPYmplY3QgPSBh
c0ludGVnZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUuanNDZWxsKTsKLSAgICAgICAgICAgIElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSAr
IDNdLnUub3BlcmFuZF0pOwotICAgICAgICAgICAgdm9pZCogc3RydWN0dXJlQWRkcmVzcyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGluc3RydWN0aW9uICsgaSArIDQpOwotICAgICAgICAgICAg
dm9pZCogb2Zmc2V0QWRkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGluc3RydWN0aW9uICsg
aSArIDUpOwotCi0gICAgICAgICAgICAvLyBDaGVjayBTdHJ1Y3R1cmUgb2YgZ2xvYmFsIG9iamVj
dAotICAgICAgICAgICAgX18gbW92bF9pMzJyKGdsb2JhbE9iamVjdCwgWDg2OjplYXgpOwotICAg
ICAgICAgICAgX18gbW92bF9tcihzdHJ1Y3R1cmVBZGRyZXNzLCBYODY6OmVkeCk7Ci0gICAgICAg
ICAgICBfXyBjbXBsX3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVy
ZSksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEptcFNyYyBub01hdGNoID0gX18gam5lKCk7IC8v
IFN0cnVjdHVyZXMgZG9uJ3QgbWF0Y2gKLQotICAgICAgICAgICAgLy8gTG9hZCBjYWNoZWQgcHJv
cGVydHkKLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTR2xvYmFsT2JqZWN0
LCBtX3Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBf
XyBtb3ZsX21yKG9mZnNldEFkZHIsIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIF9fIG1vdmxfbXIo
MCwgWDg2OjplYXgsIFg4Njo6ZWR4LCBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVheCk7Ci0gICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQpOwotICAgICAgICAgICAgSm1wU3JjIGVuZCA9IF9fIGptcCgpOwotCi0gICAgICAgICAgICAv
LyBTbG93IGNhc2UKLSAgICAgICAgICAgIF9fIGxpbmsobm9NYXRjaCwgX18gbGFiZWwoKSk7Ci0g
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoZ2xvYmFsT2JqZWN0LCAwKTsKLSAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihp
ZGVudCksIDQpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0
X2Nhc3Q8dW5zaWduZWQ+KGluc3RydWN0aW9uICsgaSksIDgpOwotICAgICAgICAgICAgZW1pdENU
SUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlX2dsb2JhbCk7Ci0gICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwot
ICAgICAgICAgICAgX18gbGluayhlbmQsIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgaSArPSA2
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgQ1RJX0NPTVBJTEVfQklO
QVJZX09QKG9wX2RpdikKLSAgICAgICAgY2FzZSBvcF9wcmVfZGVjOiB7Ci0gICAgICAgICAgICBp
bnQgc3JjRHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgX18g
c3VibF9pOHIoZ2V0RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZShKU0ltbWVkaWF0ZTo6b25lSW1t
ZWRpYXRlKCkpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xv
d0Nhc2VFbnRyeShfXyBqbygpLCBpKSk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHNyY0RzdCk7Ci0gICAgICAgICAgICBpICs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX2pubGVzczogewotICAgICAgICAgICAgdW5zaWduZWQg
dGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIEpTVmFs
dWUqIHNyYzJpbW0gPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoaW5zdHJ1Y3Rpb25b
aSArIDJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpZiAoc3JjMmltbSkgewotICAgICAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFu
ZCwgWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElt
bU51bShYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdl
cihzcmMyaW1tKSwgWDg2OjplZHgpOwotICAgICAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5k
KEptcFRhYmxlKF9fIGpnZSgpLCBpICsgMyArIHRhcmdldCkpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltp
ICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwg
WDg2OjplZHgsIGkpOwotICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51
bShYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1t
TnVtKFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgICAgICBfXyBjbXBsX3JyKFg4Njo6ZWR4LCBY
ODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18g
amdlKCksIGkgKyAzICsgdGFyZ2V0KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpICs9
IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25vdDog
ewotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kLCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBfXyB4b3JsX2k4cihKU0ltbWVk
aWF0ZTo6RnVsbFRhZ1R5cGVCb29sLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBfXyB0ZXN0bF9p
MzJyKEpTSW1tZWRpYXRlOjpGdWxsVGFnVHlwZU1hc2ssIFg4Njo6ZWF4KTsgLy8gaTg/Ci0gICAg
ICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwot
ICAgICAgICAgICAgX18geG9ybF9pOHIoKEpTSW1tZWRpYXRlOjpGdWxsVGFnVHlwZUJvb2wgfCBK
U0ltbWVkaWF0ZTo6RXh0ZW5kZWRQYXlsb2FkQml0Qm9vbFZhbHVlKSwgWDg2OjplYXgpOwotICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2Ugb3BfamZhbHNlOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQg
PSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7Ci0K
LSAgICAgICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6Onplcm9JbW1l
ZGlhdGUoKSksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRh
YmxlKF9fIGplKCksIGkgKyAyICsgdGFyZ2V0KSk7Ci0gICAgICAgICAgICBfXyB0ZXN0bF9pMzJy
KEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgWDg2OjplYXgpOwotICAgICAgICAgICAg
Sm1wU3JjIGlzTm9uWmVybyA9IF9fIGpuZSgpOwotCi0gICAgICAgICAgICBfXyBjbXBsX2kzMnIo
YXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjpmYWxzZUltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOwotICAg
ICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gamUoKSwgaSArIDIgKyB0YXJn
ZXQpKTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6OnRy
dWVJbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVu
ZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7Ci0KLSAgICAgICAgICAgIF9fIGxpbmsoaXNO
b25aZXJvLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9OwotICAgICAgICBjYXNlIG9wX2plcV9udWxsOiB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBzcmMgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLQotICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIFg4Njo6ZWF4LCBpKTsKLSAgICAg
ICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKLSAg
ICAgICAgICAgIEptcFNyYyBpc0ltbWVkaWF0ZSA9IF9fIGpueigpOwotCi0gICAgICAgICAgICBf
XyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgsIFg4
Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIHRlc3RsX2kzMm0oTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX2ZsYWdzKSwgWDg2OjplY3gp
OwotICAgICAgICAgICAgX18gc2V0bnpfcihYODY6OmVheCk7Ci0KLSAgICAgICAgICAgIEptcFNy
YyB3YXNOb3RJbW1lZGlhdGUgPSBfXyBqbXAoKTsKLQotICAgICAgICAgICAgX18gbGluayhpc0lt
bWVkaWF0ZSwgX18gbGFiZWwoKSk7Ci0KLSAgICAgICAgICAgIF9fIG1vdmxfaTMycih+SlNJbW1l
ZGlhdGU6OkV4dGVuZGVkVGFnQml0VW5kZWZpbmVkLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBf
XyBhbmRsX3JyKFg4Njo6ZWF4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMnIo
SlNJbW1lZGlhdGU6OkZ1bGxUYWdUeXBlTnVsbCwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18g
c2V0ZV9yKFg4Njo6ZWF4KTsKLQotICAgICAgICAgICAgX18gbGluayh3YXNOb3RJbW1lZGlhdGUs
IF9fIGxhYmVsKCkpOwotCi0gICAgICAgICAgICBfXyBtb3Z6YmxfcnIoWDg2OjplYXgsIFg4Njo6
ZWF4KTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMycigwLCBYODY6OmVheCk7Ci0gICAgICAgICAg
ICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbnooKSwgaSArIDIgKyB0YXJnZXQpKTsg
ICAgICAgICAgICAKLQotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH07Ci0gICAgICAgIGNhc2Ugb3Bfam5lcV9udWxsOiB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBzcmMgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgdW5z
aWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLQotICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAg
IF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKLSAgICAgICAg
ICAgIEptcFNyYyBpc0ltbWVkaWF0ZSA9IF9fIGpueigpOwotCi0gICAgICAgICAgICBfXyBtb3Zs
X21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgsIFg4Njo6ZWN4
KTsKLSAgICAgICAgICAgIF9fIHRlc3RsX2kzMm0oTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRklF
TERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX2ZsYWdzKSwgWDg2OjplY3gpOwotICAg
ICAgICAgICAgX18gc2V0el9yKFg4Njo6ZWF4KTsKLQotICAgICAgICAgICAgSm1wU3JjIHdhc05v
dEltbWVkaWF0ZSA9IF9fIGptcCgpOwotCi0gICAgICAgICAgICBfXyBsaW5rKGlzSW1tZWRpYXRl
LCBfXyBsYWJlbCgpKTsKLQotICAgICAgICAgICAgX18gbW92bF9pMzJyKH5KU0ltbWVkaWF0ZTo6
RXh0ZW5kZWRUYWdCaXRVbmRlZmluZWQsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIGFuZGxf
cnIoWDg2OjplYXgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMycihKU0ltbWVk
aWF0ZTo6RnVsbFRhZ1R5cGVOdWxsLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBzZXRuZV9y
KFg4Njo6ZWF4KTsKLQotICAgICAgICAgICAgX18gbGluayh3YXNOb3RJbW1lZGlhdGUsIF9fIGxh
YmVsKCkpOwotCi0gICAgICAgICAgICBfXyBtb3Z6YmxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsK
LSAgICAgICAgICAgIF9fIGNtcGxfaTMycigwLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX2pt
cFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbnooKSwgaSArIDIgKyB0YXJnZXQpKTsgICAgICAg
ICAgICAKLQotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBvcF9wb3N0X2luYzogewotICAgICAgICAgICAgaW50IHNyY0RzdCA9
IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyY0RzdCwgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgX18gbW92bF9ycihY
ODY6OmVheCwgWDg2OjplZHgpOwotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1t
TnVtKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIF9fIGFkZGxfaThyKGdldERlVGFnZ2VkQ29u
c3RhbnRJbW1lZGlhdGUoSlNJbW1lZGlhdGU6Om9uZUltbWVkaWF0ZSgpKSwgWDg2OjplZHgpOwot
ICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam8oKSwgaSkp
OwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIFg4Njo6ZWR4KTsK
LSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIG9wX3VuZXhwZWN0ZWRfbG9hZDogewotICAgICAgICAgICAgSlNW
YWx1ZSogdiA9IG1fY29kZUJsb2NrLT51bmV4cGVjdGVkQ29uc3RhbnRzW2luc3RydWN0aW9uW2kg
KyAyXS51Lm9wZXJhbmRdOwotICAgICAgICAgICAgX18gbW92bF9pMzJyKGFzSW50ZWdlcih2KSwg
WDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfanNyOiB7Ci0gICAgICAgICAgICBpbnQg
cmV0QWRkckRzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBp
bnQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIF9f
IG1vdmxfaTMybSgwLCBzaXplb2YoUmVnaXN0ZXIpICogcmV0QWRkckRzdCwgWDg2OjplZGkpOwot
ICAgICAgICAgICAgSm1wRHN0IGFkZHJQb3NpdGlvbiA9IF9fIGxhYmVsKCk7Ci0gICAgICAgICAg
ICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbXAoKSwgaSArIDIgKyB0YXJnZXQpKTsK
LSAgICAgICAgICAgIEptcERzdCBzcmV0VGFyZ2V0ID0gX18gbGFiZWwoKTsKLSAgICAgICAgICAg
IG1fanNyU2l0ZXMuYXBwZW5kKEpTUkluZm8oYWRkclBvc2l0aW9uLCBzcmV0VGFyZ2V0KSk7Ci0g
ICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX3NyZXQ6IHsKLSAgICAgICAgICAgIF9fIGptcF9tKHNpemVvZihSZWdpc3Rlcikg
KiBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVkaSk7Ci0gICAgICAgICAgICBp
ICs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2Vx
OiB7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsg
Ml0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2
OjplZHgsIGkpOwotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtcyhYODY6
OmVheCwgWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgX18gY21wbF9ycihYODY6OmVkeCwgWDg2
OjplYXgpOwotICAgICAgICAgICAgX18gc2V0ZV9yKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIF9f
IG1vdnpibF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFRhZ0FzQm9v
bEltbWVkaWF0ZShYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0OwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9sc2hpZnQ6IHsKLSAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAyXS51Lm9w
ZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVjeCwg
aSk7Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkp
OwotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWN4LCBpKTsK
LSAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhJbW1Ub0ludChYODY6OmVheCk7Ci0gICAgICAgICAg
ICBlbWl0RmFzdEFyaXRoSW1tVG9JbnQoWDg2OjplY3gpOwotICAgICAgICAgICAgX18gc2hsbF9D
THIoWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdEZhc3RBcml0aEludFRvSW1tT3JTbG93Q2Fz
ZShYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9iaXRhbmQ6IHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHNyYzEgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotICAgICAg
ICAgICAgdW5zaWduZWQgc3JjMiA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBkc3QgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAg
ICAgICAgICAgaWYgKEpTVmFsdWUqIHZhbHVlID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmlj
QXJnKHNyYzEpKSB7Ci0gICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMy
LCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1t
TnVtKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgICAgICBfXyBhbmRsX2kzMnIoYXNJbnRlZ2Vy
KHZhbHVlKSwgWDg2OjplYXgpOyAvLyBGSVhNRTogbWFrZSBpdCBtb3JlIG9idmlvdXMgdGhpcyBp
cyByZWx5aW5nIG9uIHRoZSBmb3JtYXQgb2YgSlNJbW1lZGlhdGUKLSAgICAgICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKEpTVmFs
dWUqIHZhbHVlID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzIpKSB7Ci0gICAg
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBYODY6OmVheCwgaSk7Ci0g
ICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsK
LSAgICAgICAgICAgICAgICBfXyBhbmRsX2kzMnIoYXNJbnRlZ2VyKHZhbHVlKSwgWDg2OjplYXgp
OwotICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3Jj
MSwgWDg2OjplYXgsIHNyYzIsIFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgICAgICBfXyBhbmRs
X3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpICs9IDU7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3JzaGlmdDogewotICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3Bl
cmFuZCwgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWN4LCBp
KTsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7
Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplY3gsIGkpOwot
ICAgICAgICAgICAgZW1pdEZhc3RBcml0aEltbVRvSW50KFg4Njo6ZWN4KTsKLSAgICAgICAgICAg
IF9fIHNhcmxfQ0xyKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhQb3RlbnRp
YWxseVJlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9
IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2JpdG5v
dDogewotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsg
Ml0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgX18geG9ybF9pOHIofkpTSW1t
ZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAg
ICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfcmVzb2x2ZV93aXRoX2Jhc2U6IHsKLSAgICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZF0p
OwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQ+KGlkZW50KSwgMCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRl
cjo6Y3RpX29wX3Jlc29sdmVfd2l0aF9iYXNlKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplZHgpOwotICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOiB7Ci0gICAgICAgICAgICBGdW5jRXhwck5vZGUq
IGZ1bmMgPSAobV9jb2RlQmxvY2stPmZ1bmN0aW9uRXhwcmVzc2lvbnNbaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZF0pLmdldCgpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50
KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGZ1bmMpLCAwKTsKLSAgICAgICAgICAgIGVtaXRD
VElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbmV3X2Z1bmNfZXhwKTsKLSAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX21vZDogewotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAzXS51
Lm9wZXJhbmQsIFg4Njo6ZWN4LCBpKTsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEltbU51bShYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJ
bW1OdW0oWDg2OjplY3gsIGkpOwotICAgICAgICAgICAgZW1pdEZhc3RBcml0aERlVGFnSW1tZWRp
YXRlKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVu
dHJ5KGVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZUp1bXBJZlplcm8oWDg2OjplY3gpLCBpKSk7
Ci0gICAgICAgICAgICBfXyBjZHEoKTsKLSAgICAgICAgICAgIF9fIGlkaXZsX3IoWDg2OjplY3gp
OwotICAgICAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKFg4Njo6ZWR4KTsKLSAg
ICAgICAgICAgIF9fIG1vdmxfcnIoWDg2OjplZHgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX2p0cnVlOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlv
bltpICsgMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7Ci0KLSAgICAgICAgICAg
IF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSksIFg4
Njo6ZWF4KTsKLSAgICAgICAgICAgIEptcFNyYyBpc1plcm8gPSBfXyBqZSgpOwotICAgICAgICAg
ICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWF4
KTsKLSAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGpuZSgpLCBpICsg
MiArIHRhcmdldCkpOwotCi0gICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1t
ZWRpYXRlOjp0cnVlSW1tZWRpYXRlKCkpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX2ptcFRh
YmxlLmFwcGVuZChKbXBUYWJsZShfXyBqZSgpLCBpICsgMiArIHRhcmdldCkpOwotICAgICAgICAg
ICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6ZmFsc2VJbW1lZGlhdGUoKSks
IFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5
KF9fIGpuZSgpLCBpKSk7Ci0KLSAgICAgICAgICAgIF9fIGxpbmsoaXNaZXJvLCBfXyBsYWJlbCgp
KTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIENUSV9DT01QSUxFX0JJTkFSWV9PUChvcF9sZXNzKQotICAgICAgICBjYXNlIG9wX25l
cTogewotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZCwgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4
Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bXMoWDg2
OjplYXgsIFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgIF9fIGNtcGxfcnIoWDg2OjplYXgsIFg4
Njo6ZWR4KTsKLQotICAgICAgICAgICAgX18gc2V0bmVfcihYODY6OmVheCk7Ci0gICAgICAgICAg
ICBfXyBtb3Z6YmxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRUYWdB
c0Jvb2xJbW1lZGlhdGUoWDg2OjplYXgpOwotCi0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotCi0gICAgICAgICAgICBpICs9
IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Bvc3Rf
ZGVjOiB7Ci0gICAgICAgICAgICBpbnQgc3JjRHN0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVh
eCwgaSk7Ci0gICAgICAgICAgICBfXyBtb3ZsX3JyKFg4Njo6ZWF4LCBYODY6OmVkeCk7Ci0gICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOwotICAgICAg
ICAgICAgX18gc3VibF9pOHIoZ2V0RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZShKU0ltbWVkaWF0
ZTo6b25lSW1tZWRpYXRlKCkpLCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5h
cHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbygpLCBpKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKHNyY0RzdCwgWDg2OjplZHgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkg
Kz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIENUSV9DT01QSUxF
X0JJTkFSWV9PUChvcF91cnNoaWZ0KQotICAgICAgICBjYXNlIG9wX2JpdHhvcjogewotICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFu
ZCwgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsK
LSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bXMoWDg2OjplYXgsIFg4Njo6
ZWR4LCBpKTsKLSAgICAgICAgICAgIF9fIHhvcmxfcnIoWDg2OjplZHgsIFg4Njo6ZWF4KTsKLSAg
ICAgICAgICAgIGVtaXRGYXN0QXJpdGhSZVRhZ0ltbWVkaWF0ZShYODY6OmVheCk7Ci0gICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQp
OwotICAgICAgICAgICAgaSArPSA1OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOiB7Ci0gICAgICAgICAgICBSZWdFeHAqIHJlZ0V4cCA9
IG1fY29kZUJsb2NrLT5yZWdleHBzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdLmdldCgp
OwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQ+KHJlZ0V4cCksIDApOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0
ZXI6OmN0aV9vcF9uZXdfcmVnZXhwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2JpdG9yOiB7Ci0g
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMl0udS5v
cGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplZHgs
IGkpOwotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtcyhYODY6OmVheCwg
WDg2OjplZHgsIGkpOwotICAgICAgICAgICAgX18gb3JsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7
Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51
Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA1OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF90aHJvdzogewotICAgICAgICAgICAgZW1pdFB1dENUSUFy
Z0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgMCwgWDg2
OjplY3gpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF90
aHJvdyk7Ci0gICAgICAgICAgICBfXyBhZGRsX2k4cigweDIwLCBYODY6OmVzcCk7Ci0gICAgICAg
ICAgICBfXyBwb3BsX3IoWDg2OjplYngpOwotICAgICAgICAgICAgX18gcG9wbF9yKFg4Njo6ZWRp
KTsKLSAgICAgICAgICAgIF9fIHBvcGxfcihYODY6OmVzaSk7Ci0gICAgICAgICAgICBfXyByZXQo
KTsKLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfZ2V0X3BuYW1lczogewotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zy
b21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2Ojpl
Y3gpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRf
cG5hbWVzKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25leHRfcG5hbWU6IHsKLSAgICAgICAgICAg
IGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9w
ZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3Ry
dWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRl
cnByZXRlcjo6Y3RpX29wX25leHRfcG5hbWUpOwotICAgICAgICAgICAgX18gdGVzdGxfcnIoWDg2
OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEptcFNyYyBlbmRPZkl0ZXIgPSBfXyBqZSgp
OwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0u
dS5vcGVyYW5kKTsKLSAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGpt
cCgpLCBpICsgMyArIHRhcmdldCkpOwotICAgICAgICAgICAgX18gbGluayhlbmRPZkl0ZXIsIF9f
IGxhYmVsKCkpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXNoX3Njb3BlOiB7Ci0gICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAw
LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3Rp
X29wX3B1c2hfc2NvcGUpOwotICAgICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wb3Bfc2NvcGU6IHsKLSAgICAgICAgICAgIGVt
aXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcG9wX3Njb3BlKTsKLSAgICAgICAgICAg
IGkgKz0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIENUSV9DT01Q
SUxFX1VOQVJZX09QKG9wX3R5cGVvZikKLSAgICAgICAgQ1RJX0NPTVBJTEVfVU5BUllfT1Aob3Bf
aXNfdW5kZWZpbmVkKQotICAgICAgICBDVElfQ09NUElMRV9VTkFSWV9PUChvcF9pc19ib29sZWFu
KQotICAgICAgICBDVElfQ09NUElMRV9VTkFSWV9PUChvcF9pc19udW1iZXIpCi0gICAgICAgIENU
SV9DT01QSUxFX1VOQVJZX09QKG9wX2lzX3N0cmluZykKLSAgICAgICAgQ1RJX0NPTVBJTEVfVU5B
UllfT1Aob3BfaXNfb2JqZWN0KQotICAgICAgICBDVElfQ09NUElMRV9VTkFSWV9PUChvcF9pc19m
dW5jdGlvbikKLSAgICAgICAgY2FzZSBvcF9zdHJpY3RlcTogewotICAgICAgICAgICAgY29tcGls
ZU9wU3RyaWN0RXEoaW5zdHJ1Y3Rpb24gKyBpLCBpLCBPcFN0cmljdEVxKTsKLSAgICAgICAgICAg
IGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bf
bnN0cmljdGVxOiB7Ci0gICAgICAgICAgICBjb21waWxlT3BTdHJpY3RFcShpbnN0cnVjdGlvbiAr
IGksIGksIE9wTlN0cmljdEVxKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfdG9fanNudW1iZXI6IHsKLSAgICAgICAg
ICAgIGludCBzcmNWUmVnID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgWDg2OjplYXgsIGkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBl
SW50ZWdlciwgWDg2OjplYXgpOwotICAgICAgICAgICAgSm1wU3JjIHdhc0ltbWVkaWF0ZSA9IF9f
IGpueigpOwotCi0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoWDg2Ojpl
YXgsIGksIHNyY1ZSZWcpOwotCi0gICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChK
U0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9f
IGNtcGxfaTMybShOdW1iZXJUeXBlLCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZv
Lm1fdHlwZSksIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9zbG93Q2Fz
ZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgX18gbGluayh3YXNJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwotCi0gICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwot
ICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9pbjogewotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVn
aXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOwotICAgICAg
ICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNd
LnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50
ZXJwcmV0ZXI6OmN0aV9vcF9pbik7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0OwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXNoX25ld19zY29w
ZTogewotICAgICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSk7Ci0gICAgICAgICAgICBlbWl0
UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaWRlbnQpLCAwKTsK
LSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAzXS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3BfcHVzaF9uZXdfc2NvcGUpOwotICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAg
ICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfY2F0Y2g6IHsKLSAgICAgICAgICAgIGVtaXRHZXRDVElQYXJhbShDVElfQVJHU19jYWxs
RnJhbWUsIFg4Njo6ZWRpKTsgLy8gZWRpIDo9IHIKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9
IDI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2ptcF9z
Y29wZXM6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZDsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChjb3VudCwgMCk7
Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2ptcF9zY29w
ZXMpOwotICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGptcCgp
LCBpICsgMiArIHRhcmdldCkpOwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXRfYnlfaW5kZXg6IHsKLSAgICAgICAg
ICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51
Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFu
dChpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCA0KTsKLSAgICAgICAgICAgIGVtaXRQdXRD
VElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDgs
IFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlf
b3BfcHV0X2J5X2luZGV4KTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbTogewotICAgICAgICAgICAg
dW5zaWduZWQgdGFibGVJbmRleCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGluc3RydWN0aW9uW2kgKyAz
XS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0
Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgICAgICAg
ICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+aW1tZWRpYXRlU3dp
dGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKLSAgICAgICAgICAgIG1fc3dpdGNoZXMuYXBwZW5k
KFN3aXRjaFJlY29yZChqdW1wVGFibGUsIGksIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6
SW1tZWRpYXRlKSk7Ci0gICAgICAgICAgICBqdW1wVGFibGUtPmN0aU9mZnNldHMuZ3JvdyhqdW1w
VGFibGUtPmJyYW5jaE9mZnNldHMuc2l6ZSgpKTsKLQotICAgICAgICAgICAgZW1pdFB1dENUSUFy
Z0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCAwLCBYODY6OmVjeCk7Ci0gICAgICAgICAg
ICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQodGFibGVJbmRleCwgNCk7Ci0gICAgICAgICAgICBlbWl0
Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3N3aXRjaF9pbW0pOwotICAgICAgICAgICAg
X18gam1wX3IoWDg2OjplYXgpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjogewotICAgICAgICAg
ICAgdW5zaWduZWQgdGFibGVJbmRleCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUu
b3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGluc3RydWN0aW9uW2kg
KyAzXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBz
d2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgICAg
ICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+Y2hhcmFjdGVy
U3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKLSAgICAgICAgICAgIG1fc3dpdGNoZXMuYXBw
ZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIGksIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29y
ZDo6Q2hhcmFjdGVyKSk7Ci0gICAgICAgICAgICBqdW1wVGFibGUtPmN0aU9mZnNldHMuZ3Jvdyhq
dW1wVGFibGUtPmJyYW5jaE9mZnNldHMuc2l6ZSgpKTsKLQotICAgICAgICAgICAgZW1pdFB1dENU
SUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCAwLCBYODY6OmVjeCk7Ci0gICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQodGFibGVJbmRleCwgNCk7Ci0gICAgICAgICAgICBl
bWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3N3aXRjaF9jaGFyKTsKLSAgICAgICAg
ICAgIF9fIGptcF9yKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzogewotICAg
ICAgICAgICAgdW5zaWduZWQgdGFibGVJbmRleCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGluc3RydWN0
aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxl
IGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0g
ICAgICAgICAgICBTdHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3Ry
aW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsKLSAgICAgICAgICAgIG1fc3dpdGNoZXMu
YXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIGksIGRlZmF1bHRPZmZzZXQpKTsKLQotICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCAwLCBY
ODY6OmVjeCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQodGFibGVJbmRleCwg
NCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3N3aXRj
aF9zdHJpbmcpOwotICAgICAgICAgICAgX18gam1wX3IoWDg2OjplYXgpOwotICAgICAgICAgICAg
aSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9k
ZWxfYnlfdmFsOiB7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rl
cihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7Ci0gICAgICAgICAg
ICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5v
cGVyYW5kLCA0LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnBy
ZXRlcjo6Y3RpX29wX2RlbF9ieV92YWwpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2dldHRl
cjogewotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsg
Ml0udS5vcGVyYW5kXSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZD4oaWRlbnQpLCA0KTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElB
cmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDgsIFg4
Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bf
cHV0X2dldHRlcik7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9zZXR0ZXI6IHsKLSAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQs
IDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZF0pOwotICAgICAg
ICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlk
ZW50KSwgNCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rlcihp
bnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBl
bWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9zZXR0ZXIpOwotICAgICAgICAg
ICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9uZXdfZXJyb3I6IHsKLSAgICAgICAgICAgIEpTVmFsdWUqIG1lc3NhZ2UgPSBtX2NvZGVCbG9j
ay0+dW5leHBlY3RlZENvbnN0YW50c1tpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kXTsKLSAg
ICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChpbnN0cnVjdGlvbltpICsgMl0udS5vcGVy
YW5kLCAwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChhc0ludGVnZXIobWVz
c2FnZSksIDQpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KG1fY29kZUJsb2Nr
LT5saW5lTnVtYmVyRm9yVlBDKCZpbnN0cnVjdGlvbltpXSksIDgpOwotICAgICAgICAgICAgZW1p
dENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXdfZXJyb3IpOwotICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3BfZGVidWc6IHsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChpbnN0
cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdD
b25zdGFudChpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCA0KTsKLSAgICAgICAgICAgIGVt
aXRQdXRDVElBcmdDb25zdGFudChpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA4KTsKLSAg
ICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfZGVidWcpOwotICAg
ICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9lcV9udWxsOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkc3QgPSBpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgdW5zaWduZWQgc3JjMSA9IGluc3RydWN0
aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc3JjMSwgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVk
aWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOwotICAgICAgICAgICAgSm1wU3JjIGlzSW1tZWRpYXRl
ID0gX18gam56KCk7Ci0KLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2Vs
bCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gdGVz
dGxfaTMybShNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBt
X3R5cGVJbmZvLm1fZmxhZ3MpLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBzZXRuel9yKFg4
Njo6ZWF4KTsKLQotICAgICAgICAgICAgSm1wU3JjIHdhc05vdEltbWVkaWF0ZSA9IF9fIGptcCgp
OwotCi0gICAgICAgICAgICBfXyBsaW5rKGlzSW1tZWRpYXRlLCBfXyBsYWJlbCgpKTsKLQotICAg
ICAgICAgICAgX18gbW92bF9pMzJyKH5KU0ltbWVkaWF0ZTo6RXh0ZW5kZWRUYWdCaXRVbmRlZmlu
ZWQsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIGFuZGxfcnIoWDg2OjplYXgsIFg4Njo6ZWN4
KTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMycihKU0ltbWVkaWF0ZTo6RnVsbFRhZ1R5cGVOdWxs
LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBzZXRlX3IoWDg2OjplYXgpOwotCi0gICAgICAg
ICAgICBfXyBsaW5rKHdhc05vdEltbWVkaWF0ZSwgX18gbGFiZWwoKSk7Ci0KLSAgICAgICAgICAg
IF9fIG1vdnpibF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFRhZ0Fz
Qm9vbEltbWVkaWF0ZShYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7Ci0KLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmVxX251bGw6IHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGRzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBzcmMxID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLQotICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBfXyB0
ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBK
bXBTcmMgaXNJbW1lZGlhdGUgPSBfXyBqbnooKTsKLQotICAgICAgICAgICAgX18gbW92bF9tcihG
SUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7Ci0g
ICAgICAgICAgICBfXyB0ZXN0bF9pMzJtKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIEZJRUxEX09G
RlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV9mbGFncyksIFg4Njo6ZWN4KTsKLSAgICAgICAg
ICAgIF9fIHNldHpfcihYODY6OmVheCk7Ci0KLSAgICAgICAgICAgIEptcFNyYyB3YXNOb3RJbW1l
ZGlhdGUgPSBfXyBqbXAoKTsKLQotICAgICAgICAgICAgX18gbGluayhpc0ltbWVkaWF0ZSwgX18g
bGFiZWwoKSk7Ci0KLSAgICAgICAgICAgIF9fIG1vdmxfaTMycih+SlNJbW1lZGlhdGU6OkV4dGVu
ZGVkVGFnQml0VW5kZWZpbmVkLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBhbmRsX3JyKFg4
Njo6ZWF4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMnIoSlNJbW1lZGlhdGU6
OkZ1bGxUYWdUeXBlTnVsbCwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gc2V0bmVfcihYODY6
OmVheCk7Ci0KLSAgICAgICAgICAgIF9fIGxpbmsod2FzTm90SW1tZWRpYXRlLCBfXyBsYWJlbCgp
KTsKLQotICAgICAgICAgICAgX18gbW92emJsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAg
ICAgICAgICBlbWl0VGFnQXNCb29sSW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQotICAgICAgICAgICAgaSArPSAzOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9lbnRlcjogewotICAgICAg
ICAgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUg
b3VyIGNvbnN0YW50Ci0gICAgICAgICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50
ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKLSAgICAgICAgICAgIC8vIG9i
amVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICAgICAgICAgIHNp
emVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzICsgbV9jb2RlQmxvY2stPmNvbnN0YW50
UmVnaXN0ZXJzLnNpemUoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgY291
bnQ7ICsraikKLSAgICAgICAgICAgICAgICBlbWl0SW5pdFJlZ2lzdGVyKGopOwotCi0gICAgICAg
ICAgICBpKz0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfZW50ZXJfd2l0aF9hY3RpdmF0aW9uOiB7Ci0gICAgICAgICAgICAvLyBFdmVuIHRob3VnaCBD
VEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKLSAgICAgICAg
ICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNz
YXJpbHkgcHJvbG9uZ2luZwotICAgICAgICAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNy
ZWFzaW5nIEdDIHByZXNzdXJlLgotICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxv
Y2stPm51bVZhcnMgKyBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwotICAg
ICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBjb3VudDsgKytqKQotICAgICAgICAgICAg
ICAgIGVtaXRJbml0UmVnaXN0ZXIoaik7Ci0KLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIElu
dGVycHJldGVyOjpjdGlfb3BfcHVzaF9hY3RpdmF0aW9uKTsKLSAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0KLSAgICAgICAg
ICAgIGkrPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF9jcmVhdGVfYXJndW1lbnRzOiB7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCAobV9jb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMgPT0gMSkgPyBJbnRlcnByZXRlcjo6Y3RpX29wX2NyZWF0ZV9h
cmd1bWVudHNfbm9fcGFyYW1zIDogSW50ZXJwcmV0ZXI6OmN0aV9vcF9jcmVhdGVfYXJndW1lbnRz
KTsKLSAgICAgICAgICAgIGkgKz0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfY29udmVydF90aGlzOiB7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsKLQot
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFg4Njo6ZWF4LCBpKTsKLSAg
ICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBY
ODY6OmVheCwgWDg2OjplZHgpOwotICAgICAgICAgICAgX18gdGVzdGxfaTMybShOZWVkc1RoaXND
b252ZXJzaW9uLCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvLm1fZmxhZ3MpLCBY
ODY6OmVkeCk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShf
XyBqbnooKSwgaSkpOwotCi0gICAgICAgICAgICBpICs9IDI7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfd2lsbF9jYWxsOiB7Ci0gICAgICAg
ICAgICBlbWl0R2V0Q1RJUGFyYW0oQ1RJX0FSR1NfcHJvZmlsZXJSZWZlcmVuY2UsIFg4Njo6ZWF4
KTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMybSgwLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBK
bXBTcmMgbm9Qcm9maWxlciA9IF9fIGplKCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJv
bVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAwLCBYODY6OmVh
eCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Byb2Zp
bGVfd2lsbF9jYWxsKTsKLSAgICAgICAgICAgIF9fIGxpbmsobm9Qcm9maWxlciwgX18gbGFiZWwo
KSk7Ci0KLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2Ugb3BfcHJvZmlsZV9kaWRfY2FsbDogewotICAgICAgICAgICAgZW1pdEdl
dENUSVBhcmFtKENUSV9BUkdTX3Byb2ZpbGVyUmVmZXJlbmNlLCBYODY6OmVheCk7Ci0gICAgICAg
ICAgICBfXyBjbXBsX2kzMm0oMCwgWDg2OjplYXgpOwotICAgICAgICAgICAgSm1wU3JjIG5vUHJv
ZmlsZXIgPSBfXyBqZSgpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVn
aXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgMCwgWDg2OjplYXgpOwotICAgICAg
ICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wcm9maWxlX2RpZF9jYWxs
KTsKLSAgICAgICAgICAgIF9fIGxpbmsobm9Qcm9maWxlciwgX18gbGFiZWwoKSk7Ci0KLSAgICAg
ICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDoKLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfY2hhaW46
Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dlbmVyaWM6Ci0gICAgICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX3Byb3RvOgotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9wcm90b19saXN0OgotICAg
ICAgICBjYXNlIG9wX2dldF9ieV9pZF9zZWxmOgotICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9z
ZWxmX2xpc3Q6Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X3N0cmluZ19sZW5ndGg6Ci0gICAgICAgIGNh
c2Ugb3BfcHV0X2J5X2lkX2dlbmVyaWM6Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JlcGxh
Y2U6Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb246Ci0gICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEFTU0VSVChwcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXggPT0gbV9jb2RlQmxvY2stPnByb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25zLnNpemUoKSk7Ci0gICAgQVNTRVJUKGNhbGxMaW5rSW5mb0luZGV4ID09IG1f
Y29kZUJsb2NrLT5jYWxsTGlua0luZm9zLnNpemUoKSk7Ci19Ci0KLQotdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlTGlua1Bhc3MoKQotewotICAgIHVuc2lnbmVkIGptcFRhYmxlQ291bnQgPSBtX2pt
cFRhYmxlLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgam1wVGFibGVDb3Vu
dDsgKytpKQotICAgICAgICBfXyBsaW5rKG1fam1wVGFibGVbaV0uZnJvbSwgbV9sYWJlbHNbbV9q
bXBUYWJsZVtpXS50b10pOwotICAgIG1fam1wVGFibGUuY2xlYXIoKTsKLX0KLQotI2RlZmluZSBD
VElfQ09NUElMRV9CSU5BUllfT1BfU0xPV19DQVNFKG5hbWUpIFwKLSAgICBjYXNlIG5hbWU6IHsg
XAotICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOyBcCi0gICAgICAgIGVt
aXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJh
bmQsIDAsIFg4Njo6ZWN4KTsgXAotICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdp
c3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA0LCBYODY6OmVjeCk7IFwKLSAgICAg
ICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV8jI25hbWUpOyBcCi0gICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7IFwKLSAg
ICAgICAgaSArPSA0OyBcCi0gICAgICAgIGJyZWFrOyBcCi0gICAgfQotCi0jZGVmaW5lIENUSV9D
T01QSUxFX0JJTkFSWV9PUF9TTE9XX0NBU0VfRE9VQkxFX0VOVFJZKG5hbWUpIFwKLSAgICBjYXNl
IG5hbWU6IHsgXAotICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOyBcCi0g
ICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOyAgICAgICAgICAgICAg
ICBcCi0gICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsgXAotICAgICAgICBlbWl0UHV0Q1RJQXJn
RnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA0LCBYODY6
OmVjeCk7IFwKLSAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV8jI25hbWUp
OyBcCi0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCk7IFwKLSAgICAgICAgaSArPSA0OyBcCi0gICAgICAgIGJyZWFrOyBcCi0gICAgfQot
ICAgIAotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKLXsKLSAgICB1bnNpZ25l
ZCBwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXggPSAwOwotICAgIHVuc2lnbmVkIGNhbGxM
aW5rSW5mb0luZGV4ID0gMDsKLQotICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKTsKLSAgICBmb3IgKFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3IgaXRlciA9IG1fc2xvd0Nhc2VzLmJlZ2luKCk7IGl0ZXIgIT0gbV9zbG93
Q2FzZXMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAvLyBGSVhNRTogZW5hYmxlIHBlZXBob2xl
IG9wdGltaXphdGlvbnMgZm9yIHNsb3cgY2FzZXMgd2hlbiBhcHBsaWNhYmxlCi0gICAgICAgIGtp
bGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKLQotICAgICAgICB1bnNpZ25lZCBpID0gaXRlci0+dG87
Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICB1bnNpZ25lZCBmaXJzdFRvID0gaTsKLSNlbmRpZgot
Ci0gICAgICAgIHN3aXRjaCAoT3Bjb2RlSUQgb3Bjb2RlSUQgPSBtX2ludGVycHJldGVyLT5nZXRP
cGNvZGVJRChpbnN0cnVjdGlvbltpXS51Lm9wY29kZSkpIHsKLSAgICAgICAgY2FzZSBvcF9jb252
ZXJ0X3RoaXM6IHsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7
Ci0gICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdENUSUNh
bGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9jb252ZXJ0X3RoaXMpOwotICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAg
ICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfYWRkOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkc3QgPSBpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kOwotICAgICAgICAgICAgdW5zaWduZWQgc3JjMSA9IGluc3RydWN0aW9uW2kg
KyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMyID0gaW5zdHJ1Y3Rpb25b
aSArIDNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGlmIChKU1ZhbHVlKiB2YWx1ZSA9IGdldENv
bnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMxKSkgewotICAgICAgICAgICAgICAgIEptcFNy
YyBub3RJbW0gPSBpdGVyLT5mcm9tOwotICAgICAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlcikt
PmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgICAgIF9fIHN1YmxfaTMycihnZXREZVRh
Z2dlZENvbnN0YW50SW1tZWRpYXRlKHZhbHVlKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgICAg
IF9fIGxpbmsobm90SW1tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJ
QXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzcmMxLCAwLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgNCk7Ci0gICAgICAgICAgICAgICAgZW1pdENUSUNh
bGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9hZGQpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoSlNWYWx1ZSogdmFs
dWUgPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMikpIHsKLSAgICAgICAgICAg
ICAgICBKbXBTcmMgbm90SW1tID0gaXRlci0+ZnJvbTsKLSAgICAgICAgICAgICAgICBfXyBsaW5r
KCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBfXyBzdWJsX2kz
MnIoZ2V0RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZSh2YWx1ZSksIFg4Njo6ZWF4KTsKLSAgICAg
ICAgICAgICAgICBfXyBsaW5rKG5vdEltbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICAgICAg
ZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFy
Z0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgNCwgWDg2OjplY3gpOwotICAgICAgICAgICAgICAg
IGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfYWRkKTsKLSAgICAgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIE9wZXJhbmRUeXBlcyB0eXBlcyA9IE9wZXJhbmRUeXBlczo6ZnJvbUludChp
bnN0cnVjdGlvbltpICsgNF0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZXMu
Zmlyc3QoKS5taWdodEJlTnVtYmVyKCkgJiYgdHlwZXMuc2Vjb25kKCkubWlnaHRCZU51bWJlcigp
KQotICAgICAgICAgICAgICAgICAgICBjb21waWxlQmluYXJ5QXJpdGhPcFNsb3dDYXNlKG9wX2Fk
ZCwgaXRlciwgZHN0LCBzcmMxLCBzcmMyLCB0eXBlcywgaSk7Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaSArPSA1OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF9nZXRfYnlfdmFsOiB7Ci0gICAgICAgICAgICAvLyBUaGUgc2xvdyBj
YXNlIHRoYXQgaGFuZGxlcyBhY2Nlc3NlcyB0byBhcnJheXMgKGJlbG93KSBtYXkganVtcCBiYWNr
IHVwIHRvIGhlcmUuIAotICAgICAgICAgICAgSm1wRHN0IGJlZ2luR2V0QnlWYWxTbG93ID0gX18g
bGFiZWwoKTsKLQotICAgICAgICAgICAgSm1wU3JjIG5vdEltbSA9IGl0ZXItPmZyb207Ci0gICAg
ICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAg
IF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdEZh
c3RBcml0aEludFRvSW1tTm9DaGVjayhYODY6OmVkeCk7Ci0gICAgICAgICAgICBfXyBsaW5rKG5v
dEltbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAw
KTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDQpOwotICAgICAgICAgICAg
ZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfdmFsKTsKLSAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7
Ci0gICAgICAgICAgICBfXyBsaW5rKF9fIGptcCgpLCBtX2xhYmVsc1tpICsgNF0pOwotCi0gICAg
ICAgICAgICAvLyBUaGlzIGlzIHNsb3cgY2FzZSB0aGF0IGhhbmRsZXMgYWNjZXNzZXMgdG8gYXJy
YXlzIGFib3ZlIHRoZSBmYXN0IGN1dC1vZmYuCi0gICAgICAgICAgICAvLyBGaXJzdCwgY2hlY2sg
aWYgdGhpcyBpcyBhbiBhY2Nlc3MgdG8gdGhlIHZlY3RvcgotICAgICAgICAgICAgX18gbGluaygo
KytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBfXyBjbXBsX3JtKFg4Njo6
ZWR4LCBGSUVMRF9PRkZTRVQoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rvckxlbmd0aCksIFg4Njo6ZWN4
KTsKLSAgICAgICAgICAgIF9fIGxpbmsoX18gamJlKCksIGJlZ2luR2V0QnlWYWxTbG93KTsKLQot
ICAgICAgICAgICAgLy8gb2theSwgbWlzc2VkIHRoZSBmYXN0IHJlZ2lvbiwgYnV0IGl0IGlzIHN0
aWxsIGluIHRoZSB2ZWN0b3IuICBHZXQgdGhlIHZhbHVlLgotICAgICAgICAgICAgX18gbW92bF9t
cihGSUVMRF9PRkZTRVQoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSksIFg4Njo6ZWN4LCBYODY6
OmVkeCwgc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplY3gpOwotICAgICAgICAgICAgLy8gQ2hlY2sg
d2hldGhlciB0aGUgdmFsdWUgbG9hZGVkIGlzIHplcm87IGlmIHNvIHdlIG5lZWQgdG8gcmV0dXJu
IHVuZGVmaW5lZC4KLSAgICAgICAgICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWN4LCBYODY6OmVjeCk7
Ci0gICAgICAgICAgICBfXyBsaW5rKF9fIGplKCksIGJlZ2luR2V0QnlWYWxTbG93KTsKLSAgICAg
ICAgICAgIF9fIG1vdmxfcnIoWDg2OjplY3gsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplYXgp
OwotCi0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX3N1YjogewotICAgICAgICAgICAgY29tcGlsZUJpbmFyeUFyaXRoT3BT
bG93Q2FzZShvcF9zdWIsIGl0ZXIsIGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIGluc3Ry
dWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIE9w
ZXJhbmRUeXBlczo6ZnJvbUludChpbnN0cnVjdGlvbltpICsgNF0udS5vcGVyYW5kKSwgaSk7Ci0g
ICAgICAgICAgICBpICs9IDU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX3JzaGlmdDogewotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBs
YWJlbCgpKTsKLSAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkp
OwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBl
bWl0UHV0Q1RJQXJnKFg4Njo6ZWN4LCA0KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIElu
dGVycHJldGVyOjpjdGlfb3BfcnNoaWZ0KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2xzaGlmdDog
ewotICAgICAgICAgICAgSm1wU3JjIG5vdEltbTEgPSBpdGVyLT5mcm9tOwotICAgICAgICAgICAg
Sm1wU3JjIG5vdEltbTIgPSAoKytpdGVyKS0+ZnJvbTsKLSAgICAgICAgICAgIF9fIGxpbmsoKCsr
aXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplYXgsIGluc3RydWN0aW9u
W2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWN4LCBpKTsKLSAgICAgICAgICAgIF9fIGxpbmsobm90
SW1tMSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBfXyBsaW5rKG5vdEltbTIsIF9fIGxhYmVs
KCkpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAg
ICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWN4LCA0KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGks
IEludGVycHJldGVyOjpjdGlfb3BfbHNoaWZ0KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9
IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2xvb3Bf
aWZfbGVzczogewotICAgICAgICAgICAgZW1pdFNsb3dTY3JpcHRDaGVjayhpKTsKLQotICAgICAg
ICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKLSAg
ICAgICAgICAgIEpTVmFsdWUqIHNyYzJpbW0gPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNB
cmcoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpZiAoc3JjMmlt
bSkgewotICAgICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0g
ICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgMCk7Ci0gICAgICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUu
b3BlcmFuZCwgNCwgWDg2OjplY3gpOwotICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIElu
dGVycHJldGVyOjpjdGlfb3BfbG9vcF9pZl9sZXNzKTsKLSAgICAgICAgICAgICAgICBfXyB0ZXN0
bF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgICAgIF9fIGxpbmsoX18gam5l
KCksIG1fbGFiZWxzW2kgKyAzICsgdGFyZ2V0XSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAg
ICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENU
SUFyZyhYODY6OmVkeCwgNCk7Ci0gICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJw
cmV0ZXI6OmN0aV9vcF9sb29wX2lmX2xlc3MpOwotICAgICAgICAgICAgICAgIF9fIHRlc3RsX3Jy
KFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgX18gbGluayhfXyBqbmUoKSwg
bV9sYWJlbHNbaSArIDMgKyB0YXJnZXRdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGkg
Kz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0
X2J5X2lkOiB7Ci0gICAgICAgICAgICBpZiAobGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwg
aW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICAgICAgKytpdGVyOwot
ICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLQotICAgICAgICAg
ICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kXSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3Rh
bnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaWRlbnQpLCA0KTsKLSAgICAgICAgICAgIGVt
aXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6
OmVkeCwgOCk7Ci0gICAgICAgICAgICBKbXBTcmMgY2FsbCA9IGVtaXRDVElDYWxsKGksIEludGVy
cHJldGVyOjpjdGlfb3BfcHV0X2J5X2lkKTsKLQotICAgICAgICAgICAgLy8gVHJhY2sgdGhlIGxv
Y2F0aW9uIG9mIHRoZSBjYWxsOyB0aGlzIHdpbGwgYmUgdXNlZCB0byByZWNvdmVyIHJlcGF0Y2gg
aW5mb3JtYXRpb24uCi0gICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPnByb3BlcnR5QWNj
ZXNzSW5zdHJ1Y3Rpb25zW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uYnl0ZWNvZGVJ
bmRleCA9PSBpKTsKLSAgICAgICAgICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9b
cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxs
OwotICAgICAgICAgICAgKytwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXg7Ci0KLSAgICAg
ICAgICAgIGkgKz0gODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfZ2V0X2J5X2lkOiB7Ci0gICAgICAgICAgICAvLyBBcyBmb3IgdGhlIGhvdCBwYXRoIG9m
IGdldF9ieV9pZCwgYWJvdmUsIHdlIGVuc3VyZSB0aGF0IHdlIGNhbiB1c2UgYW4gYXJjaGl0ZWN0
dXJlIHNwZWNpZmljIG9mZnNldAotICAgICAgICAgICAgLy8gc28gdGhhdCB3ZSBvbmx5IG5lZWQg
dHJhY2sgb25lIHBvaW50ZXIgaW50byB0aGUgc2xvdyBjYXNlIGNvZGUgLSB3ZSB0cmFjayBhIHBv
aW50ZXIgdG8gdGhlIGxvY2F0aW9uCi0gICAgICAgICAgICAvLyBvZiB0aGUgY2FsbCAod2hpY2gg
d2UgY2FuIHVzZSB0byBsb29rIHVwIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uKSwgYnV0IHNob3Vs
ZCBhIGFycmF5LWxlbmd0aCBvcgotICAgICAgICAgICAgLy8gcHJvdG90eXBlIGFjY2VzcyB0cmFt
cG9saW5lIGZhaWwgd2Ugd2FudCB0byBiYWlsIG91dCBiYWNrIHRvIGhlcmUuICBUbyBkbyBzbyB3
ZSBjYW4gc3VidHJhY3QgYmFjawotICAgICAgICAgICAgLy8gdGhlIGRpc3RhbmNlIGZyb20gdGhl
IGNhbGwgdG8gdGhlIGhlYWQgb2YgdGhlIHNsb3cgY2FzZS4KLQotICAgICAgICAgICAgaWYgKGxp
bmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQp
KQotICAgICAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJv
bSwgX18gbGFiZWwoKSk7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBKbXBEc3QgY29s
ZFBhdGhCZWdpbiA9IF9fIGxhYmVsKCk7Ci0jZW5kaWYgICAgICAgIAotICAgICAgICAgICAgZW1p
dFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmRd
KTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVu
c2lnbmVkPihpZGVudCksIDQpOwotICAgICAgICAgICAgSm1wU3JjIGNhbGwgPSBlbWl0Q1RJQ2Fs
bChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZCk7Ci0gICAgICAgICAgICBBU1NFUlQo
WDg2QXNzZW1ibGVyOjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhjb2xkUGF0aEJlZ2luLCBj
YWxsKSA9PSByZXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7Ci0gICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotCi0g
ICAgICAgICAgICAvLyBUcmFjayB0aGUgbG9jYXRpb24gb2YgdGhlIGNhbGw7IHRoaXMgd2lsbCBi
ZSB1c2VkIHRvIHJlY292ZXIgcmVwYXRjaCBpbmZvcm1hdGlvbi4KLSAgICAgICAgICAgIEFTU0VS
VChtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbcHJvcGVydHlBY2Nlc3NJ
bnN0cnVjdGlvbkluZGV4XS5ieXRlY29kZUluZGV4ID09IGkpOwotICAgICAgICAgICAgbV9wcm9w
ZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhd
LmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGw7Ci0gICAgICAgICAgICArK3Byb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25JbmRleDsKLQotICAgICAgICAgICAgaSArPSA4OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9sb29wX2lmX2xlc3NlcTogewotICAgICAg
ICAgICAgZW1pdFNsb3dTY3JpcHRDaGVjayhpKTsKLQotICAgICAgICAgICAgdW5zaWduZWQgdGFy
Z2V0ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIEpTVmFsdWUq
IHNyYzJpbW0gPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpZiAoc3JjMmltbSkgewotICAgICAgICAgICAg
ICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICAgICAgZW1p
dFB1dENUSUFyZyhYODY6OmVkeCwgMCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zy
b21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgNCwgWDg2Ojpl
Y3gpOwotICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bf
bG9vcF9pZl9sZXNzZXEpOwotICAgICAgICAgICAgICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4LCBY
ODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgX18gbGluayhfXyBqbmUoKSwgbV9sYWJlbHNbaSAr
IDMgKyB0YXJnZXRdKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgX18g
bGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKCgr
K2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJn
KFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA0
KTsKLSAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2xv
b3BfaWZfbGVzc2VxKTsKLSAgICAgICAgICAgICAgICBfXyB0ZXN0bF9ycihYODY6OmVheCwgWDg2
OjplYXgpOwotICAgICAgICAgICAgICAgIF9fIGxpbmsoX18gam5lKCksIG1fbGFiZWxzW2kgKyAz
ICsgdGFyZ2V0XSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3ByZV9pbmM6IHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICBKbXBTcmMgbm90SW1tID0gaXRlci0+ZnJvbTsKLSAgICAgICAgICAgIF9fIGxp
bmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgX18gc3VibF9pOHIo
Z2V0RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZShKU0ltbWVkaWF0ZTo6b25lSW1tZWRpYXRlKCkp
LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBfXyBsaW5rKG5vdEltbSwgX18gbGFiZWwoKSk7Ci0g
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRD
VElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHJlX2luYyk7Ci0gICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7Ci0gICAgICAgICAgICBpICs9IDI7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKLSAg
ICAgICAgICAgIC8vIE5vcm1hbCBzbG93IGNhc2VzIC0gZWl0aGVyIGlzIG5vdCBhbiBpbW1lZGlh
dGUgaW1tLCBvciBpcyBhbiBhcnJheS4KLSAgICAgICAgICAgIEptcFNyYyBub3RJbW0gPSBpdGVy
LT5mcm9tOwotICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7
Ci0gICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAg
ICAgICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2soWDg2OjplZHgpOwotICAgICAgICAg
ICAgX18gbGluayhub3RJbW0sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVjeCwgaSk7Ci0g
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmcoWDg2OjplZHgsIDQpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVj
eCwgOCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3B1
dF9ieV92YWwpOwotICAgICAgICAgICAgX18gbGluayhfXyBqbXAoKSwgbV9sYWJlbHNbaSArIDRd
KTsKLQotICAgICAgICAgICAgLy8gc2xvdyBjYXNlcyBmb3IgaW1tZWRpYXRlIGludCBhY2Nlc3Nl
cyB0byBhcnJheXMKLSAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVs
KCkpOwotICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0g
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9w
ZXJhbmQsIFg4Njo6ZWN4LCBpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgs
IDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgNCk7Ci0gICAgICAgICAg
ICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWN4LCA4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGks
IEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X3ZhbF9hcnJheSk7Ci0KLSAgICAgICAgICAgIGkg
Kz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbG9v
cF9pZl90cnVlOiB7Ci0gICAgICAgICAgICBlbWl0U2xvd1NjcmlwdENoZWNrKGkpOwotCi0gICAg
ICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1p
dFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRl
cnByZXRlcjo6Y3RpX29wX2p0cnVlKTsKLSAgICAgICAgICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4
LCBYODY6OmVheCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltp
ICsgMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgX18gbGluayhfXyBqbmUoKSwgbV9sYWJlbHNb
aSArIDIgKyB0YXJnZXRdKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHJlX2RlYzogewotICAgICAgICAgICAgdW5z
aWduZWQgc3JjRHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAg
IEptcFNyYyBub3RJbW0gPSBpdGVyLT5mcm9tOwotICAgICAgICAgICAgX18gbGluaygoKytpdGVy
KS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBfXyBhZGRsX2k4cihnZXREZVRhZ2dl
ZENvbnN0YW50SW1tZWRpYXRlKEpTSW1tZWRpYXRlOjpvbmVJbW1lZGlhdGUoKSksIFg4Njo6ZWF4
KTsKLSAgICAgICAgICAgIF9fIGxpbmsobm90SW1tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAg
IGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwg
SW50ZXJwcmV0ZXI6OmN0aV9vcF9wcmVfZGVjKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjRHN0KTsKLSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfam5sZXNzOiB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOwotICAgICAgICAgICAg
SlNWYWx1ZSogc3JjMmltbSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGlmIChzcmMyaW1tKSB7Ci0gICAg
ICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCAwKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCA0
LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6
OmN0aV9vcF9qbGVzcyk7Ci0gICAgICAgICAgICAgICAgX18gdGVzdGxfcnIoWDg2OjplYXgsIFg4
Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKF9fIGplKCksIG1fbGFiZWxzW2kgKyAz
ICsgdGFyZ2V0XSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIF9fIGxp
bmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICAgICAgX18gbGluaygoKytp
dGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhY
ODY6OmVheCwgMCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgNCk7
Ci0gICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9qbGVz
cyk7Ci0gICAgICAgICAgICAgICAgX18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAg
ICAgICAgICAgICAgICBfXyBsaW5rKF9fIGplKCksIG1fbGFiZWxzW2kgKyAzICsgdGFyZ2V0XSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25vdDogewotICAgICAgICAgICAgX18gbGluayhp
dGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIF9fIHhvcmxfaThyKEpTSW1tZWRp
YXRlOjpGdWxsVGFnVHlwZUJvb2wsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElB
cmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6
OmN0aV9vcF9ub3QpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVj
dGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfamZhbHNlOiB7Ci0gICAgICAgICAg
ICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdFB1dENU
SUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRl
cjo6Y3RpX29wX2p0cnVlKTsKLSAgICAgICAgICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6
OmVheCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kOwotICAgICAgICAgICAgX18gbGluayhfXyBqZSgpLCBtX2xhYmVsc1tpICsgMiAr
IHRhcmdldF0pOyAvLyBpbnZlcnRlZCEKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcG9zdF9pbmM6IHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHNyY0RzdCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgX18g
bGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJ
QXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVy
OjpjdGlfb3BfcG9zdF9pbmMpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihz
cmNEc3QsIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2JpdG5vdDogewotICAgICAg
ICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJw
cmV0ZXI6OmN0aV9vcF9iaXRub3QpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfYml0YW5kOiB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBzcmMxID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsK
LSAgICAgICAgICAgIHVuc2lnbmVkIHNyYzIgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5k
OwotICAgICAgICAgICAgdW5zaWduZWQgZHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGlmIChnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMSkp
IHsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAg
ICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzEsIDAsIFg4
Njo6ZWN4KTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCA0KTsKLSAg
ICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2JpdGFuZCk7
Ci0gICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAg
ICAgfSBlbHNlIGlmIChnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMikpIHsKLSAg
ICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzIsIDQsIFg4Njo6ZWN4KTsKLSAgICAgICAg
ICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2JpdGFuZCk7Ci0gICAg
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwot
ICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzEsIDAs
IFg4Njo6ZWN4KTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA0KTsK
LSAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2JpdGFu
ZCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaSArPSA1OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBvcF9qdHJ1ZTogewotICAgICAgICAgICAgX18gbGluayhpdGVyLT5m
cm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDAp
OwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9qdHJ1ZSk7
Ci0gICAgICAgICAgICBfXyB0ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAg
ICAgICAgIF9fIGxpbmsoX18gam5lKCksIG1fbGFiZWxzW2kgKyAyICsgdGFyZ2V0XSk7Ci0gICAg
ICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX3Bvc3RfZGVjOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmNEc3QgPSBpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBf
XyBsYWJlbCgpKTsKLSAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVs
KCkpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Bvc3RfZGVjKTsKLSAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVkeCk7Ci0gICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwot
ICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9iaXR4b3I6IHsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18g
bGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDQpOwotICAgICAgICAgICAgZW1pdENUSUNh
bGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9iaXR4b3IpOwotICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAg
IGkgKz0gNTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bf
Yml0b3I6IHsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0g
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmcoWDg2OjplZHgsIDQpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJw
cmV0ZXI6OmN0aV9vcF9iaXRvcik7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA1OwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9lcTogewotICAgICAg
ICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVk
eCwgNCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2Vx
KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX25lcTogewotICAgICAgICAgICAgX18gbGluayhpdGVy
LT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgs
IDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgNCk7Ci0gICAgICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX25lcSk7Ci0gICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAg
ICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Q1RJX0NPTVBJTEVfQklOQVJZX09QX1NMT1dfQ0FTRV9ET1VCTEVfRU5UUlkob3Bfc3RyaWN0ZXEp
OwotICAgICAgICBDVElfQ09NUElMRV9CSU5BUllfT1BfU0xPV19DQVNFX0RPVUJMRV9FTlRSWShv
cF9uc3RyaWN0ZXEpOwotICAgICAgICBjYXNlIG9wX2luc3RhbmNlb2Y6IHsKLSAgICAgICAgICAg
IF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBfXyBsaW5rKCgr
K2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlcikt
PmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOwotICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zy
b21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDRdLnUub3BlcmFuZCwgOCwgWDg2Ojpl
Y3gpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9pbnN0
YW5jZW9mKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDU7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX21vZDogewotICAgICAgICAgICAgSm1wU3Jj
IG5vdEltbTEgPSBpdGVyLT5mcm9tOwotICAgICAgICAgICAgSm1wU3JjIG5vdEltbTIgPSAoKytp
dGVyKS0+ZnJvbTsKLSAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVs
KCkpOwotICAgICAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsK
LSAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhSZVRhZ0ltbWVkaWF0ZShYODY6OmVjeCk7Ci0gICAg
ICAgICAgICBfXyBsaW5rKG5vdEltbTEsIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgX18gbGlu
ayhub3RJbW0yLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2Ojpl
YXgsIDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVjeCwgNCk7Ci0gICAgICAg
ICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX21vZCk7Ci0gICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwot
ICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBvcF9tdWw6IHsKLSAgICAgICAgICAgIGludCBkc3QgPSBpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHNyYzEgPSBpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHNyYzIgPSBpbnN0cnVjdGlvbltpICsgM10udS5v
cGVyYW5kOwotICAgICAgICAgICAgSlNWYWx1ZSogc3JjMVZhbHVlID0gZ2V0Q29uc3RhbnRJbW1l
ZGlhdGVOdW1lcmljQXJnKHNyYzEpOwotICAgICAgICAgICAgSlNWYWx1ZSogc3JjMlZhbHVlID0g
Z2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzIpOwotICAgICAgICAgICAgaW50MzJf
dCB2YWx1ZTsKLSAgICAgICAgICAgIGlmIChzcmMxVmFsdWUgJiYgKCh2YWx1ZSA9IEpTSW1tZWRp
YXRlOjppbnRWYWx1ZShzcmMxVmFsdWUpKSA+IDApKSB7Ci0gICAgICAgICAgICAgICAgX18gbGlu
ayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKCgrK2l0
ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhbiBl
eHRyYSBzbG93IGNhc2UgZm9yIChvcDEgKiAtTikgb3IgKC1OICogb3AyKSwgdG8gY2hlY2sgZm9y
IDAgc2luY2UgdGhpcyBzaG91bGQgcHJvZHVjZSBhIHJlc3VsdCBvZiAtMC4KLSAgICAgICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzcmMxLCAwLCBYODY6OmVjeCk7
Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc3JjMiwg
NCwgWDg2OjplY3gpOwotICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVy
OjpjdGlfb3BfbXVsKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNyYzJWYWx1ZSAmJiAoKHZhbHVlID0gSlNJbW1l
ZGlhdGU6OmludFZhbHVlKHNyYzJWYWx1ZSkpID4gMCkpIHsKLSAgICAgICAgICAgICAgICBfXyBs
aW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgICAgIF9fIGxpbmsoKCsr
aXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGFu
IGV4dHJhIHNsb3cgY2FzZSBmb3IgKG9wMSAqIC1OKSBvciAoLU4gKiBvcDIpLCB0byBjaGVjayBm
b3IgMCBzaW5jZSB0aGlzIHNob3VsZCBwcm9kdWNlIGEgcmVzdWx0IG9mIC0wLgotICAgICAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzEsIDAsIFg4Njo6ZWN4
KTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzcmMy
LCA0LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0
ZXI6OmN0aV9vcF9tdWwpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGNvbXBpbGVCaW5hcnlB
cml0aE9wU2xvd0Nhc2Uob3BfbXVsLCBpdGVyLCBkc3QsIHNyYzEsIHNyYzIsIE9wZXJhbmRUeXBl
czo6ZnJvbUludChpbnN0cnVjdGlvbltpICsgNF0udS5vcGVyYW5kKSwgaSk7Ci0gICAgICAgICAg
ICBpICs9IDU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2Ug
b3BfY2FsbDoKLSAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6Ci0gICAgICAgIGNhc2Ugb3BfY29u
c3RydWN0OiB7Ci0gICAgICAgICAgICBpbnQgZHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGludCBjYWxsZWUgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVy
YW5kOwotICAgICAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3Bl
cmFuZDsKLSAgICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGluc3RydWN0aW9uW2kgKyA0
XS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwo
KSk7Ci0KLSAgICAgICAgICAgIC8vIFRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIHNldCB1cCBvbiB0
aGUgaG90IHBhdGggZm9yIG9wX2NhbGxfZXZhbAotICAgICAgICAgICAgaWYgKG9wY29kZUlEID09
IG9wX2NhbGwpCi0gICAgICAgICAgICAgICAgY29tcGlsZU9wQ2FsbFNldHVwQXJncyhpbnN0cnVj
dGlvbiArIGkpOwotICAgICAgICAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0
KQotICAgICAgICAgICAgICAgIGNvbXBpbGVPcENvbnN0cnVjdFNldHVwQXJncyhpbnN0cnVjdGlv
biArIGkpOwotCi0gICAgICAgICAgICAvLyBGYXN0IGNoZWNrIGZvciBKUyBmdW5jdGlvbi4KLSAg
ICAgICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWN4KTsK
LSAgICAgICAgICAgIEptcFNyYyBjYWxsTGlua0ZhaWxOb3RPYmplY3QgPSBfXyBqbmUoKTsKLSAg
ICAgICAgICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2ludGVy
cHJldGVyLT5tX2pzRnVuY3Rpb25WcHRyKSwgWDg2OjplY3gpOwotICAgICAgICAgICAgSm1wU3Jj
IGNhbGxMaW5rRmFpbE5vdEpTRnVuY3Rpb24gPSBfXyBqbmUoKTsKLQotICAgICAgICAgICAgLy8g
Rmlyc3QsIGluIHRoZSBjYXNlIG9mIGEgY29uc3RydWN0LCBhbGxvY2F0ZSB0aGUgbmV3IG9iamVj
dC4KLSAgICAgICAgICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QpIHsKLSAgICAgICAg
ICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2NvbnN0cnVjdF9KU0Nv
bnN0cnVjdCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rl
ck9mZnNldCAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGFyZ0NvdW50KTsK
LSAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgWDg2OjplY3gs
IGkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBfXyBtb3ZsX2kzMnIoYXJnQ291bnQs
IFg4Njo6ZWR4KTsKLQotICAgICAgICAgICAgLy8gU3BlY3VsYXRpdmVseSByb2xsIHRoZSBjYWxs
ZnJhbWUsIGFzc3VtaW5nIGFyZ0NvdW50IHdpbGwgbWF0Y2ggdGhlIGFyaXR5LgotICAgICAgICAg
ICAgX18gbW92bF9ybShYODY6OmVkaSwgKFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUgKyByZWdp
c3Rlck9mZnNldCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6OmVk
aSk7Ci0gICAgICAgICAgICBfXyBhZGRsX2kzMnIocmVnaXN0ZXJPZmZzZXQgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6OmVkaSk7Ci0KLSAgICAgICAgICAgIG1fY2Fs
bFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1
cm5Mb2NhdGlvbiA9Ci0gICAgICAgICAgICAgICAgZW1pdE5ha2VkQ2FsbChpLCBtX2ludGVycHJl
dGVyLT5tX2N0aVZpcnR1YWxDYWxsUHJlTGluayk7Ci0KLSAgICAgICAgICAgIEptcFNyYyBzdG9y
ZVJlc3VsdEZvckZpcnN0UnVuID0gX18gam1wKCk7Ci0KLSAgICAgICAgICAgIC8vIFRoaXMgaXMg
dGhlIGFkZHJlc3MgZm9yIHRoZSBjb2xkIHBhdGggKmFmdGVyKiB0aGUgZmlyc3QgcnVuICh3aGlj
aCB0cmllcyB0byBsaW5rIHRoZSBjYWxsKS4KLSAgICAgICAgICAgIG1fY2FsbFN0cnVjdHVyZVN0
dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNvbGRQYXRoT3RoZXIgPSBfXyBs
YWJlbCgpOwotCi0gICAgICAgICAgICAvLyBUaGUgYXJndW1lbnRzIGhhdmUgYmVlbiBzZXQgdXAg
b24gdGhlIGhvdCBwYXRoIGZvciBvcF9jYWxsX2V2YWwKLSAgICAgICAgICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF9jYWxsKQotICAgICAgICAgICAgICAgIGNvbXBpbGVPcENhbGxTZXR1cEFyZ3MoaW5z
dHJ1Y3Rpb24gKyBpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX2NvbnN0
cnVjdCkKLSAgICAgICAgICAgICAgICBjb21waWxlT3BDb25zdHJ1Y3RTZXR1cEFyZ3MoaW5zdHJ1
Y3Rpb24gKyBpKTsKLQotICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIEpTRnVuY3Rpb25zLgotICAg
ICAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplY3gpOwot
ICAgICAgICAgICAgSm1wU3JjIGlzTm90T2JqZWN0ID0gX18gam5lKCk7Ci0gICAgICAgICAgICBf
XyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9pbnRlcnByZXRlci0+bV9q
c0Z1bmN0aW9uVnB0ciksIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIEptcFNyYyBpc0pTRnVuY3Rp
b24gPSBfXyBqZSgpOwotCi0gICAgICAgICAgICAvLyBUaGlzIGhhbmRsZXMgaG9zdCBmdW5jdGlv
bnMKLSAgICAgICAgICAgIEptcERzdCBub3RKU0Z1bmN0aW9ubGFiZWwgPSBfXyBsYWJlbCgpOwot
ICAgICAgICAgICAgX18gbGluayhpc05vdE9iamVjdCwgbm90SlNGdW5jdGlvbmxhYmVsKTsKLSAg
ICAgICAgICAgIF9fIGxpbmsoY2FsbExpbmtGYWlsTm90T2JqZWN0LCBub3RKU0Z1bmN0aW9ubGFi
ZWwpOwotICAgICAgICAgICAgX18gbGluayhjYWxsTGlua0ZhaWxOb3RKU0Z1bmN0aW9uLCBub3RK
U0Z1bmN0aW9ubGFiZWwpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgKChvcGNvZGVJRCA9
PSBvcF9jb25zdHJ1Y3QpID8gSW50ZXJwcmV0ZXI6OmN0aV9vcF9jb25zdHJ1Y3RfTm90SlNDb25z
dHJ1Y3QgOiBJbnRlcnByZXRlcjo6Y3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbikpOwotICAgICAg
ICAgICAgSm1wU3JjIHdhc05vdEpTRnVuY3Rpb24gPSBfXyBqbXAoKTsKLQotICAgICAgICAgICAg
Ly8gTmV4dCwgaGFuZGxlIEpTRnVuY3Rpb25zLi4uCi0gICAgICAgICAgICBfXyBsaW5rKGlzSlNG
dW5jdGlvbiwgX18gbGFiZWwoKSk7Ci0KLSAgICAgICAgICAgIC8vIEZpcnN0LCBpbiB0aGUgY2Fz
ZSBvZiBhIGNvbnN0cnVjdCwgYWxsb2NhdGUgdGhlIG5ldyBvYmplY3QuCi0gICAgICAgICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0KSB7Ci0gICAgICAgICAgICAgICAgZW1pdENUSUNh
bGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9jb25zdHJ1Y3RfSlNDb25zdHJ1Y3QpOwotICAgICAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgLSBSZWdpc3Rl
ckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBhcmdDb3VudCk7Ci0gICAgICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIFg4Njo6ZWN4LCBpKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgLy8gU3BlY3VsYXRpdmVseSByb2xsIHRoZSBjYWxsZnJhbWUsIGFz
c3VtaW5nIGFyZ0NvdW50IHdpbGwgbWF0Y2ggdGhlIGFyaXR5LgotICAgICAgICAgICAgX18gbW92
bF9ybShYODY6OmVkaSwgKFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUgKyByZWdpc3Rlck9mZnNl
dCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6OmVkaSk7Ci0gICAg
ICAgICAgICBfXyBhZGRsX2kzMnIocmVnaXN0ZXJPZmZzZXQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpLCBYODY6OmVkaSk7Ci0gICAgICAgICAgICBfXyBtb3ZsX2kzMnIoYXJn
Q291bnQsIFg4Njo6ZWR4KTsKLQotICAgICAgICAgICAgZW1pdE5ha2VkQ2FsbChpLCBtX2ludGVy
cHJldGVyLT5tX2N0aVZpcnR1YWxDYWxsKTsKLQotICAgICAgICAgICAgLy8gUHV0IHRoZSByZXR1
cm4gdmFsdWUgaW4gZHN0LiBJbiB0aGUgaW50ZXJwcmV0ZXIsIG9wX3JldCBkb2VzIHRoaXMuCi0g
ICAgICAgICAgICBKbXBEc3Qgc3RvcmVSZXN1bHQgPSBfXyBsYWJlbCgpOwotICAgICAgICAgICAg
X18gbGluayh3YXNOb3RKU0Z1bmN0aW9uLCBzdG9yZVJlc3VsdCk7Ci0gICAgICAgICAgICBfXyBs
aW5rKHN0b3JlUmVzdWx0Rm9yRmlyc3RSdW4sIHN0b3JlUmVzdWx0KTsKLSAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQotI2lmIEVOQUJMRShDT0RFQkxPQ0tfU0FNUExJ
TkcpCi0gICAgICAgICAgICBfXyBtb3ZsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4o
bV9jb2RlQmxvY2spLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmNvZGVCbG9ja1Nsb3QoKSk7
Ci0jZW5kaWYKLSAgICAgICAgICAgICsrY2FsbExpbmtJbmZvSW5kZXg7Ci0KLSAgICAgICAgICAg
IGkgKz0gKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IDcgOiA1KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfdG9fanNudW1iZXI6IHsKLSAgICAgICAg
ICAgIGlmIChsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kKSkKLSAgICAgICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgICAgICBfXyBsaW5r
KGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotCi0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4
Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlf
b3BfdG9fanNudW1iZXIpOwotCi0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGlu
c3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAzOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoKGl0ZXIgKyAxKSA9PSBtX3Nsb3dDYXNlcy5lbmQo
KSB8fCBmaXJzdFRvICE9IChpdGVyICsgMSktPnRvLCJOb3QgZW5vdWdoIGp1bXBzIGxpbmtlZCBp
biBzbG93IGNhc2UgY29kZWdlbi4iKTsKLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShmaXJz
dFRvID09IGl0ZXItPnRvLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2Rl
Z2VuLiIpOwotCi0gICAgICAgIF9fIGxpbmsoX18gam1wKCksIG1fbGFiZWxzW2ldKTsKLSAgICB9
Ci0KLSAgICBBU1NFUlQocHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4ID09IG1fY29kZUJs
b2NrLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCkpOwotICAgIEFTU0VSVChjYWxs
TGlua0luZm9JbmRleCA9PSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvcy5zaXplKCkpOwotfQot
Ci12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGUoKQotewotI2lmIEVOQUJMRShDT0RFQkxPQ0tfU0FN
UExJTkcpCi0gICAgICAgIF9fIG1vdmxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPiht
X2NvZGVCbG9jayksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+Y29kZUJsb2NrU2xvdCgpKTsK
LSNlbmRpZgotI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgICAgIF9fIG1vdmxfaTMy
bShtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zLmJlZ2luKCkpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3Qo
KSk7Ci0jZW5kaWYKLQotICAgIC8vIENvdWxkIHVzZSBhIHBvcGxfbSwgYnV0IHdvdWxkIG5lZWQg
dG8gb2Zmc2V0IHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gaWYgc28uCi0gICAgX18gcG9wbF9y
KFg4Njo6ZWN4KTsKLSAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoWDg2OjplY3gsIFJlZ2lz
dGVyRmlsZTo6UmV0dXJuUEMpOwotCi0gICAgSm1wU3JjIHNsb3dSZWdpc3RlckZpbGVDaGVjazsK
LSAgICBKbXBEc3QgYWZ0ZXJSZWdpc3RlckZpbGVDaGVjazsKLSAgICBpZiAobV9jb2RlQmxvY2st
PmNvZGVUeXBlID09IEZ1bmN0aW9uQ29kZSkgewotICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiBh
IGZhc3QgbGlua2VkIGNhbGwsIHdlIGRvIG5vdCBzZXQgdGhpcyB1cCBpbiB0aGUgY2FsbGVyLgot
ICAgICAgICBfXyBtb3ZsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9jb2RlQmxv
Y2spLCBSZWdpc3RlckZpbGU6OkNvZGVCbG9jayAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSksIFg4Njo6ZWRpKTsKLQotICAgICAgICBlbWl0R2V0Q1RJUGFyYW0oQ1RJX0FSR1Nf
cmVnaXN0ZXJGaWxlLCBYODY6OmVheCk7Ci0gICAgICAgIF9fIGxlYWxfbXIobV9jb2RlQmxvY2st
Pm51bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlciksIFg4Njo6ZWRpLCBYODY6OmVk
eCk7Ci0gICAgICAgIF9fIGNtcGxfbXIoRklFTERfT0ZGU0VUKFJlZ2lzdGVyRmlsZSwgbV9lbmQp
LCBYODY6OmVheCwgWDg2OjplZHgpOwotICAgICAgICBzbG93UmVnaXN0ZXJGaWxlQ2hlY2sgPSBf
XyBqZygpOwotICAgICAgICBhZnRlclJlZ2lzdGVyRmlsZUNoZWNrID0gX18gbGFiZWwoKTsKLSAg
ICB9Ci0KLSAgICBwcml2YXRlQ29tcGlsZU1haW5QYXNzKCk7Ci0gICAgcHJpdmF0ZUNvbXBpbGVM
aW5rUGFzcygpOwotICAgIHByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCk7Ci0KLSAgICBpZiAobV9j
b2RlQmxvY2stPmNvZGVUeXBlID09IEZ1bmN0aW9uQ29kZSkgewotICAgICAgICBfXyBsaW5rKHNs
b3dSZWdpc3RlckZpbGVDaGVjaywgX18gbGFiZWwoKSk7Ci0gICAgICAgIGVtaXRDVElDYWxsKDAs
IEludGVycHJldGVyOjpjdGlfcmVnaXN0ZXJfZmlsZV9jaGVjayk7Ci0gICAgICAgIEptcFNyYyBi
YWNrVG9Cb2R5ID0gX18gam1wKCk7Ci0gICAgICAgIF9fIGxpbmsoYmFja1RvQm9keSwgYWZ0ZXJS
ZWdpc3RlckZpbGVDaGVjayk7Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fam1wVGFibGUuaXNFbXB0
eSgpKTsKLQotICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weSgpOwotCi0gICAgLy8g
VHJhbnNsYXRlIHZQQyBvZmZzZXRzIGludG8gYWRkcmVzc2VzIGluIEpJVCBnZW5lcmF0ZWQgY29k
ZSwgZm9yIHN3aXRjaCB0YWJsZXMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3dp
dGNoZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3dpdGNoUmVjb3JkIHJlY29yZCA9IG1fc3dp
dGNoZXNbaV07Ci0gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSByZWNvcmQuYnl0ZWNv
ZGVJbmRleDsKLQotICAgICAgICBpZiAocmVjb3JkLnR5cGUgIT0gU3dpdGNoUmVjb3JkOjpTdHJp
bmcpIHsKLSAgICAgICAgICAgIEFTU0VSVChyZWNvcmQudHlwZSA9PSBTd2l0Y2hSZWNvcmQ6Oklt
bWVkaWF0ZSB8fCByZWNvcmQudHlwZSA9PSBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rlcik7IAotICAg
ICAgICAgICAgQVNTRVJUKHJlY29yZC5qdW1wVGFibGUuc2ltcGxlSnVtcFRhYmxlLT5icmFuY2hP
ZmZzZXRzLnNpemUoKSA9PSByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+Y3RpT2Zm
c2V0cy5zaXplKCkpOwotCi0gICAgICAgICAgICByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBU
YWJsZS0+Y3RpRGVmYXVsdCA9IF9fIGdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9sYWJlbHNb
Ynl0ZWNvZGVJbmRleCArIDMgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOwotCi0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgcmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVKdW1wVGFi
bGUtPmJyYW5jaE9mZnNldHMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBvZmZzZXQgPSByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+YnJhbmNoT2Zmc2V0
c1tqXTsKLSAgICAgICAgICAgICAgICByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+
Y3RpT2Zmc2V0c1tqXSA9IG9mZnNldCA/IF9fIGdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9s
YWJlbHNbYnl0ZWNvZGVJbmRleCArIDMgKyBvZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFibGUuc2lt
cGxlSnVtcFRhYmxlLT5jdGlEZWZhdWx0OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgQVNTRVJUKHJlY29yZC50eXBlID09IFN3aXRjaFJlY29yZDo6U3RyaW5n
KTsKLQotICAgICAgICAgICAgcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1wVGFibGUtPmN0aURl
ZmF1bHQgPSBfXyBnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIG1fbGFiZWxzW2J5dGVjb2RlSW5k
ZXggKyAzICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsKLQotICAgICAgICAgICAgU3RyaW5nSnVt
cFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgZW5kID0gcmVjb3JkLmp1bXBUYWJs
ZS5zdHJpbmdKdW1wVGFibGUtPm9mZnNldFRhYmxlLmVuZCgpOyAgICAgICAgICAgIAotICAgICAg
ICAgICAgZm9yIChTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBp
dCA9IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlLT5vZmZzZXRUYWJsZS5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBp
dC0+c2Vjb25kLmJyYW5jaE9mZnNldDsKLSAgICAgICAgICAgICAgICBpdC0+c2Vjb25kLmN0aU9m
ZnNldCA9IG9mZnNldCA/IF9fIGdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9sYWJlbHNbYnl0
ZWNvZGVJbmRleCArIDMgKyBvZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRh
YmxlLT5jdGlEZWZhdWx0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Zm9yIChWZWN0b3I8SGFuZGxlckluZm8+OjppdGVyYXRvciBpdGVyID0gbV9jb2RlQmxvY2stPmV4
Y2VwdGlvbkhhbmRsZXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhh
bmRsZXJzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICBpdGVyLT5uYXRpdmVDb2RlID0gX18gZ2V0
UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX2xhYmVsc1tpdGVyLT50YXJnZXRdKTsKLQotICAgIGZv
ciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBp
dGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBpZiAoaXRlci0+dG8pCi0g
ICAgICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgaXRlci0+ZnJvbSwgaXRlci0+dG8p
OwotICAgICAgICBtX2NvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5hZGQoX18gZ2V0
UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBpdGVyLT5mcm9tKSwgaXRlci0+Ynl0ZWNvZGVJbmRleCk7
Ci0gICAgfQotCi0gICAgLy8gTGluayBhYnNvbHV0ZSBhZGRyZXNzZXMgZm9yIGpzcgotICAgIGZv
ciAoVmVjdG9yPEpTUkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9qc3JTaXRlcy5iZWdpbigpOyBp
dGVyICE9IG1fanNyU2l0ZXMuZW5kKCk7ICsraXRlcikKLSAgICAgICAgWDg2QXNzZW1ibGVyOjps
aW5rQWJzb2x1dGVBZGRyZXNzKGNvZGUsIGl0ZXItPmFkZHJQb3NpdGlvbiwgaXRlci0+dGFyZ2V0
KTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+cHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RydWN0dXJlU3R1Yklu
Zm8mIGluZm8gPSBtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbaV07Ci0g
ICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0
ZWRBZGRyZXNzKGNvZGUsIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9baV0uY2FsbFJl
dHVybkxvY2F0aW9uKTsKLSAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBYODZBc3NlbWJsZXI6
OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5m
b1tpXS5ob3RQYXRoQmVnaW4pOwotICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mb3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQ2FsbExp
bmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mb3NbaV07Ci0gICAgICAgIGlu
Zm8uY2FsbFJldHVybkxvY2F0aW9uID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNz
KGNvZGUsIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uY2FsbFJldHVybkxv
Y2F0aW9uKTsKLSAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBYODZBc3NlbWJsZXI6OmdldFJl
bG9jYXRlZEFkZHJlc3MoY29kZSwgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tp
XS5ob3RQYXRoQmVnaW4pOwotICAgICAgICBpbmZvLmhvdFBhdGhPdGhlciA9IFg4NkFzc2VtYmxl
cjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRp
b25JbmZvW2ldLmhvdFBhdGhPdGhlcik7Ci0gICAgICAgIGluZm8uY29sZFBhdGhPdGhlciA9IFg4
NkFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX2NhbGxTdHJ1Y3R1cmVTdHVi
Q29tcGlsYXRpb25JbmZvW2ldLmNvbGRQYXRoT3RoZXIpOwotICAgIH0KLQotICAgIG1fY29kZUJs
b2NrLT5jdGlDb2RlID0gY29kZTsKLX0KLQotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZFNlbGYoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZzZXQsIHZvaWQqIHJl
dHVybkFkZHJlc3MpCi17Ci0gICAgLy8gQ2hlY2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmln
aHQgU3RydWN0dXJlLgotICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4
Njo6ZWF4KTsKLSAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMSA9IF9fIGpuZSgpOwotICAgIEptcFNy
YyBmYWlsdXJlQ2FzZXMyID0gY2hlY2tTdHJ1Y3R1cmUoWDg2OjplYXgsIHN0cnVjdHVyZSk7Ci0K
LSAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0RGlyZWN0T2Zmc2V0Ci0gICAgX18gbW92bF9t
cihGSUVMRF9PRkZTRVQoSlNPYmplY3QsIG1fcHJvcGVydHlTdG9yYWdlKSwgWDg2OjplYXgsIFg4
Njo6ZWF4KTsKLSAgICBfXyBtb3ZsX21yKGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiks
IFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgX18gcmV0KCk7Ci0KLSAgICB2b2lkKiBjb2RlID0g
X18gZXhlY3V0YWJsZUNvcHkoKTsKLQotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWls
dXJlQ2FzZXMxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dl
dF9ieV9pZF9zZWxmX2ZhaWwpKTsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVy
ZUNhc2VzMiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRf
YnlfaWRfc2VsZl9mYWlsKSk7Ci0gICAgCi0gICAgbV9jb2RlQmxvY2stPmdldFN0dWJJbmZvKHJl
dHVybkFkZHJlc3MpLnN0dWJSb3V0aW5lID0gY29kZTsKLSAgICAKLSAgICBjdGlSZXBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBjb2RlKTsKLX0KLQotdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUq
IHByb3RvdHlwZVN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRk
cmVzcywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0jaWYgVVNFKENUSV9SRVBBVENIX1BJQykK
LSAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5nZXRTdHViSW5mbyhy
ZXR1cm5BZGRyZXNzKTsKLQotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcmVwYXRjaCBtb3JlIHRo
YW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCi0gICAg
Y3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpOwot
Ci0gICAgLy8gVGhlIHByb3RvdHlwZSBvYmplY3QgZGVmaW5pdGVseSBleGlzdHMgKGlmIHRoaXMg
c3R1YiBleGlzdHMgdGhlIENvZGVCbG9jayBpcyByZWZlcmVuY2luZyBhIFN0cnVjdHVyZSB0aGF0
IGlzCi0gICAgLy8gcmVmZXJlbmNpbmcgdGhlIHByb3RvdHlwZSBvYmplY3QgLSBsZXQncyBzcGVj
dWxhdGl2ZWx5IGxvYWQgaXQncyB0YWJsZSBuaWNlIGFuZCBlYXJseSEpCi0gICAgSlNPYmplY3Qq
IHByb3RvT2JqZWN0ID0gYXNPYmplY3Qoc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoY2Fs
bEZyYW1lKSk7Ci0gICAgUHJvcGVydHlTdG9yYWdlKiBwcm90b1Byb3BlcnR5U3RvcmFnZSA9ICZw
cm90b09iamVjdC0+bV9wcm9wZXJ0eVN0b3JhZ2U7Ci0gICAgX18gbW92bF9tcihzdGF0aWNfY2Fz
dDx2b2lkKj4ocHJvdG9Qcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVkeCk7Ci0KLSAgICAvLyBDaGVj
ayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCi0gICAgSm1wU3JjIGZh
aWx1cmVDYXNlczEgPSBjaGVja1N0cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJlKTsKLQotICAg
IC8vIENoZWNrIHRoZSBwcm90b3R5cGUgb2JqZWN0J3MgU3RydWN0dXJlIGhhZCBub3QgY2hhbmdl
ZC4KLSAgICBTdHJ1Y3R1cmUqKiBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzID0gJihwcm90b09i
amVjdC0+bV9zdHJ1Y3R1cmUpOwotICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVp
bnQzMl90Pihwcm90b3R5cGVTdHJ1Y3R1cmUpLCBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzKTsK
LSAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMiA9IF9fIGpuZSgpOwotCi0gICAgLy8gQ2hlY2tzIG91
dCBva2F5ISAtIGdldERpcmVjdE9mZnNldAotICAgIF9fIG1vdmxfbXIoY2FjaGVkT2Zmc2V0ICog
c2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplZHgsIFg4Njo6ZWF4KTsKLQotICAgIEptcFNyYyBzdWNj
ZXNzID0gX18gam1wKCk7Ci0KLSAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNvcHkoKTsK
LQotICAgIC8vIFVzZSB0aGUgcmVwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJl
IGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIHZvaWQq
IHNsb3dDYXNlQmVnaW4gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihpbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbikgLSByZXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbDsKLSAgICBYODZBc3Nl
bWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2VzMSwgc2xvd0Nhc2VCZWdpbik7Ci0gICAgWDg2
QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczIsIHNsb3dDYXNlQmVnaW4pOwotCi0g
ICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEg
cG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KLSAgICBpbnRw
dHJfdCBzdWNjZXNzRGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0
aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQ7Ci0gICAgWDg2
QXNzZW1ibGVyOjpsaW5rKGNvZGUsIHN1Y2Nlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN1
Y2Nlc3NEZXN0KSk7Ci0KLSAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28g
dGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgaW5mby5zdHViUm91dGluZSA9IGNv
ZGU7Ci0KLSAgICAvLyBGaW5hbGx5IHJlcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sg
aW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIGludHB0cl90IGptcExv
Y2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVnaW4pICsg
cmVwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlOwotICAgIFg4NkFzc2VtYmxlcjo6
cmVwYXRjaEJyYW5jaE9mZnNldChqbXBMb2NhdGlvbiwgY29kZSk7Ci0jZWxzZQotICAgIC8vIFRo
ZSBwcm90b3R5cGUgb2JqZWN0IGRlZmluaXRlbHkgZXhpc3RzIChpZiB0aGlzIHN0dWIgZXhpc3Rz
IHRoZSBDb2RlQmxvY2sgaXMgcmVmZXJlbmNpbmcgYSBTdHJ1Y3R1cmUgdGhhdCBpcwotICAgIC8v
IHJlZmVyZW5jaW5nIHRoZSBwcm90b3R5cGUgb2JqZWN0IC0gbGV0J3Mgc3BlY3VsYXRpdmVseSBs
b2FkIGl0J3MgdGFibGUgbmljZSBhbmQgZWFybHkhKQotICAgIEpTT2JqZWN0KiBwcm90b09iamVj
dCA9IGFzT2JqZWN0KHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpOwot
ICAgIFByb3BlcnR5U3RvcmFnZSogcHJvdG9Qcm9wZXJ0eVN0b3JhZ2UgPSAmcHJvdG9PYmplY3Qt
Pm1fcHJvcGVydHlTdG9yYWdlOwotICAgIF9fIG1vdmxfbXIoc3RhdGljX2Nhc3Q8dm9pZCo+KHBy
b3RvUHJvcGVydHlTdG9yYWdlKSwgWDg2OjplZHgpOwotCi0gICAgLy8gQ2hlY2sgZWF4IGlzIGFu
IG9iamVjdCBvZiB0aGUgcmlnaHQgU3RydWN0dXJlLgotICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1l
ZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMSA9IF9f
IGpuZSgpOwotICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMyID0gY2hlY2tTdHJ1Y3R1cmUoWDg2Ojpl
YXgsIHN0cnVjdHVyZSk7Ci0KLSAgICAvLyBDaGVjayB0aGUgcHJvdG90eXBlIG9iamVjdCdzIFN0
cnVjdHVyZSBoYWQgbm90IGNoYW5nZWQuCi0gICAgU3RydWN0dXJlKiogcHJvdG90eXBlU3RydWN0
dXJlQWRkcmVzcyA9ICYocHJvdG9PYmplY3QtPm1fc3RydWN0dXJlKTsKLSAgICBfXyBjbXBsX2kz
Mm0ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4ocHJvdG90eXBlU3RydWN0dXJlKSwgcHJvdG90
eXBlU3RydWN0dXJlQWRkcmVzcyk7Ci0gICAgSm1wU3JjIGZhaWx1cmVDYXNlczMgPSBfXyBqbmUo
KTsKLQotICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXREaXJlY3RPZmZzZXQKLSAgICBfXyBt
b3ZsX21yKGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWR4LCBYODY6OmVh
eCk7Ci0KLSAgICBfXyByZXQoKTsKLQotICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29w
eSgpOwotCi0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczEsIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2Zh
aWwpKTsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2VzMiwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fZmFp
bCkpOwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMzLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9wcm90b19mYWls
KSk7Ci0KLSAgICBtX2NvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcykuc3R1YlJv
dXRpbmUgPSBjb2RlOwotCi0gICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJu
QWRkcmVzcywgY29kZSk7Ci0jZW5kaWYKLX0KLQotI2lmIFVTRShDVElfUkVQQVRDSF9QSUMpCi12
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3Ry
dWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBj
YWNoZWRPZmZzZXQpCi17Ci0gICAgSm1wU3JjIGZhaWx1cmVDYXNlID0gY2hlY2tTdHJ1Y3R1cmUo
WDg2OjplYXgsIHN0cnVjdHVyZSk7Ci0gICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNPYmpl
Y3QsIG1fcHJvcGVydHlTdG9yYWdlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBfXyBtb3Zs
X21yKGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWF4LCBYODY6OmVheCk7
Ci0gICAgSm1wU3JjIHN1Y2Nlc3MgPSBfXyBqbXAoKTsKLQotICAgIHZvaWQqIGNvZGUgPSBfXyBl
eGVjdXRhYmxlQ29weSgpOwotICAgIEFTU0VSVChjb2RlKTsKLQotICAgIC8vIFVzZSB0aGUgcmVw
YXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9y
aWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIHZvaWQqIGxhc3RQcm90b0JlZ2luID0gcG9s
eW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOwot
ICAgIGlmICghbGFzdFByb3RvQmVnaW4pCi0gICAgICAgIGxhc3RQcm90b0JlZ2luID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbikgLSByZXBhdGNo
T2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbDsKLQotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2Rl
LCBmYWlsdXJlQ2FzZSwgbGFzdFByb3RvQmVnaW4pOwotCi0gICAgLy8gT24gc3VjY2VzcyByZXR1
cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3Jt
IHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KLSAgICBpbnRwdHJfdCBzdWNjZXNzRGVzdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4pICsgcmVwYXRj
aE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDsKLSAgICBYODZBc3NlbWJsZXI6Omxpbmso
Y29kZSwgc3VjY2VzcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3VjY2Vzc0Rlc3QpKTsKLQot
ICAgIHN0cnVjdHVyZS0+cmVmKCk7Ci0gICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1
cnJlbnRJbmRleF0uc2V0KGNhY2hlZE9mZnNldCwgY29kZSwgc3RydWN0dXJlKTsKLQotICAgIC8v
IEZpbmFsbHkgcmVwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBh
dGggdG8ganVtcCBoZXJlIGluc3RlYWQuCi0gICAgaW50cHRyX3Qgam1wTG9jYXRpb24gPSByZWlu
dGVycHJldF9jYXN0PGludHB0cl90PihzdHViSW5mby0+aG90UGF0aEJlZ2luKSArIHJlcGF0Y2hP
ZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZTsKLSAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hC
cmFuY2hPZmZzZXQoam1wTG9jYXRpb24sIGNvZGUpOwotfQordXNpbmcgbmFtZXNwYWNlIHN0ZDsK
IAotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdChTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBl
U3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVj
dHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKLXsKLSAgICAvLyBUaGUgcHJvdG90eXBlIG9iamVjdCBkZWZpbml0ZWx5IGV4
aXN0cyAoaWYgdGhpcyBzdHViIGV4aXN0cyB0aGUgQ29kZUJsb2NrIGlzIHJlZmVyZW5jaW5nIGEg
U3RydWN0dXJlIHRoYXQgaXMKLSAgICAvLyByZWZlcmVuY2luZyB0aGUgcHJvdG90eXBlIG9iamVj
dCAtIGxldCdzIHNwZWN1bGF0aXZlbHkgbG9hZCBpdCdzIHRhYmxlIG5pY2UgYW5kIGVhcmx5ISkK
LSAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSBhc09iamVjdChzdHJ1Y3R1cmUtPnByb3RvdHlw
ZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKLSAgICBQcm9wZXJ0eVN0b3JhZ2UqIHByb3RvUHJvcGVy
dHlTdG9yYWdlID0gJnByb3RvT2JqZWN0LT5tX3Byb3BlcnR5U3RvcmFnZTsKLSAgICBfXyBtb3Zs
X21yKHN0YXRpY19jYXN0PHZvaWQqPihwcm90b1Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWR4KTsK
LQotICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0IFN0cnVjdHVyZS4K
LSAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMSA9IGNoZWNrU3RydWN0dXJlKFg4Njo6ZWF4LCBzdHJ1
Y3R1cmUpOwotCi0gICAgLy8gQ2hlY2sgdGhlIHByb3RvdHlwZSBvYmplY3QncyBTdHJ1Y3R1cmUg
aGFkIG5vdCBjaGFuZ2VkLgotICAgIFN0cnVjdHVyZSoqIHByb3RvdHlwZVN0cnVjdHVyZUFkZHJl
c3MgPSAmKHByb3RvT2JqZWN0LT5tX3N0cnVjdHVyZSk7Ci0gICAgX18gY21wbF9pMzJtKHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHByb3RvdHlwZVN0cnVjdHVyZSksIHByb3RvdHlwZVN0cnVj
dHVyZUFkZHJlc3MpOwotICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMyID0gX18gam5lKCk7Ci0KLSAg
ICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0RGlyZWN0T2Zmc2V0Ci0gICAgX18gbW92bF9tcihj
YWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVkeCwgWDg2OjplYXgpOwotCi0g
ICAgSm1wU3JjIHN1Y2Nlc3MgPSBfXyBqbXAoKTsKLQotICAgIHZvaWQqIGNvZGUgPSBfXyBleGVj
dXRhYmxlQ29weSgpOwotCi0gICAgLy8gVXNlIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uIHRvIGxp
bmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRp
bmUuCi0gICAgdm9pZCogbGFzdFByb3RvQmVnaW4gPSBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0
W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhj
b2RlLCBmYWlsdXJlQ2FzZXMxLCBsYXN0UHJvdG9CZWdpbik7Ci0gICAgWDg2QXNzZW1ibGVyOjps
aW5rKGNvZGUsIGZhaWx1cmVDYXNlczIsIGxhc3RQcm90b0JlZ2luKTsKLQotICAgIC8vIE9uIHN1
Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdp
bGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCi0gICAgaW50cHRyX3Qgc3VjY2Vz
c0Rlc3QgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihzdHViSW5mby0+aG90UGF0aEJlZ2lu
KSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQ7Ci0gICAgWDg2QXNzZW1i
bGVyOjpsaW5rKGNvZGUsIHN1Y2Nlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN1Y2Nlc3NE
ZXN0KSk7Ci0KLSAgICBzdHJ1Y3R1cmUtPnJlZigpOwotICAgIHByb3RvdHlwZVN0cnVjdHVyZS0+
cmVmKCk7Ci0gICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChj
YWNoZWRPZmZzZXQsIGNvZGUsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlKTsKLQotICAg
IC8vIEZpbmFsbHkgcmVwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90
IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCi0gICAgaW50cHRyX3Qgam1wTG9jYXRpb24gPSBy
ZWludGVycHJldF9jYXN0PGludHB0cl90PihzdHViSW5mby0+aG90UGF0aEJlZ2luKSArIHJlcGF0
Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZTsKLSAgICBYODZBc3NlbWJsZXI6OnJlcGF0
Y2hCcmFuY2hPZmZzZXQoam1wTG9jYXRpb24sIGNvZGUpOwotfQorbmFtZXNwYWNlIEpTQyB7CiAK
LXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QoU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0
cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1
cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbEluaXRpYWxpemVDYWxsRnJh
bWUoKQogewotICAgIEFTU0VSVChjb3VudCk7Ci0gICAgCi0gICAgVmVjdG9yPEptcFNyYz4gYnVj
a2V0c09mRmFpbDsKLQotICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0
IFN0cnVjdHVyZS4KLSAgICBidWNrZXRzT2ZGYWlsLmFwcGVuZChjaGVja1N0cnVjdHVyZShYODY6
OmVheCwgc3RydWN0dXJlKSk7Ci0KLSAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmU7Ci0gICAgUmVmUHRyPFN0cnVjdHVyZT4qIGNoYWluRW50cmllcyA9IGNoYWluLT5oZWFk
KCk7Ci0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0KGN1
cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKLSAgICAgICAgY3Vy
clN0cnVjdHVyZSA9IGNoYWluRW50cmllc1tpXS5nZXQoKTsKLQotICAgICAgICAvLyBDaGVjayB0
aGUgcHJvdG90eXBlIG9iamVjdCdzIFN0cnVjdHVyZSBoYWQgbm90IGNoYW5nZWQuCi0gICAgICAg
IFN0cnVjdHVyZSoqIHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MgPSAmKHByb3RvT2JqZWN0LT5t
X3N0cnVjdHVyZSk7Ci0gICAgICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQz
Ml90PihjdXJyU3RydWN0dXJlKSwgcHJvdG90eXBlU3RydWN0dXJlQWRkcmVzcyk7Ci0gICAgICAg
IGJ1Y2tldHNPZkZhaWwuYXBwZW5kKF9fIGpuZSgpKTsKLSAgICB9Ci0gICAgQVNTRVJUKHByb3Rv
T2JqZWN0KTsKLQotICAgIFByb3BlcnR5U3RvcmFnZSogcHJvdG9Qcm9wZXJ0eVN0b3JhZ2UgPSAm
cHJvdG9PYmplY3QtPm1fcHJvcGVydHlTdG9yYWdlOwotICAgIF9fIG1vdmxfbXIoc3RhdGljX2Nh
c3Q8dm9pZCo+KHByb3RvUHJvcGVydHlTdG9yYWdlKSwgWDg2OjplZHgpOwotICAgIF9fIG1vdmxf
bXIoY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplZHgsIFg4Njo6ZWF4KTsK
LSAgICBKbXBTcmMgc3VjY2VzcyA9IF9fIGptcCgpOwotCi0gICAgdm9pZCogY29kZSA9IF9fIGV4
ZWN1dGFibGVDb3B5KCk7Ci0KLSAgICAvLyBVc2UgdGhlIHJlcGF0Y2ggaW5mb3JtYXRpb24gdG8g
bGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91
dGluZS4KLSAgICB2b2lkKiBsYXN0UHJvdG9CZWdpbiA9IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxp
c3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYnVja2V0c09mRmFpbC5zaXplKCk7ICsraSkKLSAgICAgICAgWDg2QXNzZW1ibGVy
OjpsaW5rKGNvZGUsIGJ1Y2tldHNPZkZhaWxbaV0sIGxhc3RQcm90b0JlZ2luKTsKLQotICAgIC8v
IE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50
IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCi0gICAgaW50cHRyX3Qg
c3VjY2Vzc0Rlc3QgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihzdHViSW5mby0+aG90UGF0
aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQ7Ci0gICAgWDg2
QXNzZW1ibGVyOjpsaW5rKGNvZGUsIHN1Y2Nlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN1
Y2Nlc3NEZXN0KSk7CisgICAgX18gbW92bF9ybShYODY6OmVkeCwgUmVnaXN0ZXJGaWxlOjpBcmd1
bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkp
OwogCi0gICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2ls
bCBiZSBkZWxldGVkIGxhdGVyLgotICAgIHN0cnVjdHVyZS0+cmVmKCk7Ci0gICAgY2hhaW4tPnJl
ZigpOwotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2Fj
aGVkT2Zmc2V0LCBjb2RlLCBzdHJ1Y3R1cmUsIGNoYWluKTsKKyAgICBfXyBtb3ZsX21yKEZJRUxE
X09GRlNFVChKU0Z1bmN0aW9uLCBtX3Njb3BlQ2hhaW4pICsgRklFTERfT0ZGU0VUKFNjb3BlQ2hh
aW4sIG1fbm9kZSksIFg4Njo6ZWN4LCBYODY6OmVkeCk7IC8vIG5ld1Njb3BlQ2hhaW4KIAotICAg
IC8vIEZpbmFsbHkgcmVwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90
IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCi0gICAgaW50cHRyX3Qgam1wTG9jYXRpb24gPSBy
ZWludGVycHJldF9jYXN0PGludHB0cl90PihzdHViSW5mby0+aG90UGF0aEJlZ2luKSArIHJlcGF0
Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZTsKLSAgICBYODZBc3NlbWJsZXI6OnJlcGF0
Y2hCcmFuY2hPZmZzZXQoam1wTG9jYXRpb24sIGNvZGUpOworICAgIF9fIG1vdmxfaTMybShhc0lu
dGVnZXIobm9WYWx1ZSgpKSwgUmVnaXN0ZXJGaWxlOjpPcHRpb25hbENhbGxlZUFyZ3VtZW50cyAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSksIFg4Njo6ZWRpKTsKKyAgICBfXyBt
b3ZsX3JtKFg4Njo6ZWN4LCBSZWdpc3RlckZpbGU6OkNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSksIFg4Njo6ZWRpKTsKKyAgICBfXyBtb3ZsX3JtKFg4Njo6ZWR4LCBS
ZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4gKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rl
cikpLCBYODY6OmVkaSk7CiB9Ci0jZW5kaWYKIAotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0
QnlJZENoYWluKFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNp
emVfdCBjb3VudCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVzcywgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNldHVwQXJncyhJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0jaWYgVVNFKENUSV9SRVBBVENIX1BJQykKLSAgICBT
dHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5B
ZGRyZXNzKTsKLQotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcmVwYXRjaCBtb3JlIHRoYW4gb25j
ZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCi0gICAgY3RpUmVw
YXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpOwotCi0gICAg
QVNTRVJUKGNvdW50KTsKLSAgICAKLSAgICBWZWN0b3I8Sm1wU3JjPiBidWNrZXRzT2ZGYWlsOwot
Ci0gICAgLy8gQ2hlY2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmlnaHQgU3RydWN0dXJlLgot
ICAgIGJ1Y2tldHNPZkZhaWwuYXBwZW5kKGNoZWNrU3RydWN0dXJlKFg4Njo6ZWF4LCBzdHJ1Y3R1
cmUpKTsKLQotICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBS
ZWZQdHI8U3RydWN0dXJlPiogY2hhaW5FbnRyaWVzID0gY2hhaW4tPmhlYWQoKTsKLSAgICBKU09i
amVjdCogcHJvdG9PYmplY3QgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7Ci0gICAgICAgIHByb3RvT2JqZWN0ID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+
cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFtZSkpOwotICAgICAgICBjdXJyU3RydWN0dXJlID0g
Y2hhaW5FbnRyaWVzW2ldLmdldCgpOwotCi0gICAgICAgIC8vIENoZWNrIHRoZSBwcm90b3R5cGUg
b2JqZWN0J3MgU3RydWN0dXJlIGhhZCBub3QgY2hhbmdlZC4KLSAgICAgICAgU3RydWN0dXJlKiog
cHJvdG90eXBlU3RydWN0dXJlQWRkcmVzcyA9ICYocHJvdG9PYmplY3QtPm1fc3RydWN0dXJlKTsK
LSAgICAgICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGN1cnJTdHJ1
Y3R1cmUpLCBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzKTsKLSAgICAgICAgYnVja2V0c09mRmFp
bC5hcHBlbmQoX18gam5lKCkpOwotICAgIH0KLSAgICBBU1NFUlQocHJvdG9PYmplY3QpOwotCi0g
ICAgUHJvcGVydHlTdG9yYWdlKiBwcm90b1Byb3BlcnR5U3RvcmFnZSA9ICZwcm90b09iamVjdC0+
bV9wcm9wZXJ0eVN0b3JhZ2U7Ci0gICAgX18gbW92bF9tcihzdGF0aWNfY2FzdDx2b2lkKj4ocHJv
dG9Qcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVkeCk7Ci0gICAgX18gbW92bF9tcihjYWNoZWRPZmZz
ZXQgKiBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVkeCwgWDg2OjplYXgpOwotICAgIEptcFNyYyBz
dWNjZXNzID0gX18gam1wKCk7Ci0KLSAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNvcHko
KTsKLQotICAgIC8vIFVzZSB0aGUgcmVwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWls
dXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIHZv
aWQqIHNsb3dDYXNlQmVnaW4gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihpbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbikgLSByZXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbDsKLQotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWNrZXRzT2ZGYWlsLnNpemUoKTsgKytpKQotICAgICAg
ICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgYnVja2V0c09mRmFpbFtpXSwgc2xvd0Nhc2VCZWdp
bik7Ci0KLSAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29k
ZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgot
ICAgIGludHB0cl90IHN1Y2Nlc3NEZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5m
by5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDsK
LSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgc3VjY2VzcywgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oc3VjY2Vzc0Rlc3QpKTsKLQotICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3Jl
YXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBpbmZvLnN0dWJSb3V0
aW5lID0gY29kZTsKLQotICAgIC8vIEZpbmFsbHkgcmVwYXRjaCB0aGUganVtcCB0byBzbG93IGNh
c2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCi0gICAgaW50cHRy
X3Qgam1wTG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmZvLmhvdFBhdGhC
ZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2U7Ci0gICAgWDg2QXNz
ZW1ibGVyOjpyZXBhdGNoQnJhbmNoT2Zmc2V0KGptcExvY2F0aW9uLCBjb2RlKTsKLSNlbHNlCi0g
ICAgQVNTRVJUKGNvdW50KTsKLSAgICAKLSAgICBWZWN0b3I8Sm1wU3JjPiBidWNrZXRzT2ZGYWls
OwotCi0gICAgLy8gQ2hlY2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmlnaHQgU3RydWN0dXJl
LgotICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKLSAg
ICBidWNrZXRzT2ZGYWlsLmFwcGVuZChfXyBqbmUoKSk7Ci0gICAgYnVja2V0c09mRmFpbC5hcHBl
bmQoY2hlY2tTdHJ1Y3R1cmUoWDg2OjplYXgsIHN0cnVjdHVyZSkpOwotCi0gICAgU3RydWN0dXJl
KiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIFJlZlB0cjxTdHJ1Y3R1cmU+KiBjaGFp
bkVudHJpZXMgPSBjaGFpbi0+aGVhZCgpOwotICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IDA7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgcHJv
dG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoY2Fs
bEZyYW1lKSk7Ci0gICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBjaGFpbkVudHJpZXNbaV0uZ2V0KCk7
Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhlIHByb3RvdHlwZSBvYmplY3QncyBTdHJ1Y3R1cmUgaGFk
IG5vdCBjaGFuZ2VkLgotICAgICAgICBTdHJ1Y3R1cmUqKiBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRy
ZXNzID0gJihwcm90b09iamVjdC0+bV9zdHJ1Y3R1cmUpOwotICAgICAgICBfXyBjbXBsX2kzMm0o
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oY3VyclN0cnVjdHVyZSksIHByb3RvdHlwZVN0cnVj
dHVyZUFkZHJlc3MpOwotICAgICAgICBidWNrZXRzT2ZGYWlsLmFwcGVuZChfXyBqbmUoKSk7Ci0g
ICAgfQotICAgIEFTU0VSVChwcm90b09iamVjdCk7Ci0KLSAgICBQcm9wZXJ0eVN0b3JhZ2UqIHBy
b3RvUHJvcGVydHlTdG9yYWdlID0gJnByb3RvT2JqZWN0LT5tX3Byb3BlcnR5U3RvcmFnZTsKLSAg
ICBfXyBtb3ZsX21yKHN0YXRpY19jYXN0PHZvaWQqPihwcm90b1Byb3BlcnR5U3RvcmFnZSksIFg4
Njo6ZWR4KTsKLSAgICBfXyBtb3ZsX21yKGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiks
IFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0gICAgX18gcmV0KCk7Ci0KLSAgICB2b2lkKiBjb2RlID0g
X18gZXhlY3V0YWJsZUNvcHkoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWNr
ZXRzT2ZGYWlsLnNpemUoKTsgKytpKQotICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwg
YnVja2V0c09mRmFpbFtpXSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0
aV9vcF9nZXRfYnlfaWRfcHJvdG9fZmFpbCkpOwotCi0gICAgbV9jb2RlQmxvY2stPmdldFN0dWJJ
bmZvKHJldHVybkFkZHJlc3MpLnN0dWJSb3V0aW5lID0gY29kZTsKKyAgICBpbnQgYXJnQ291bnQg
PSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gaW5z
dHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwogCi0gICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJl
c3MocmV0dXJuQWRkcmVzcywgY29kZSk7Ci0jZW5kaWYKKyAgICAvLyBlY3ggaG9sZHMgZnVuYwor
ICAgIGVtaXRQdXRDVElBcmcoWDg2OjplY3gsIDApOworICAgIGVtaXRQdXRDVElBcmdDb25zdGFu
dChyZWdpc3Rlck9mZnNldCwgNCk7CisgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGFyZ0NvdW50
LCA4KTsKKyAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZD4oaW5zdHJ1Y3Rpb24pLCAxMik7CiB9CiAKLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5
SWRSZXBsYWNlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCB2b2lk
KiByZXR1cm5BZGRyZXNzKQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxFdmFsU2V0dXBBcmdzKElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0
IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCi0gICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6
VGFnTWFzaywgWDg2OjplYXgpOwotICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMxID0gX18gam5lKCk7
Ci0gICAgSm1wU3JjIGZhaWx1cmVDYXNlczIgPSBjaGVja1N0cnVjdHVyZShYODY6OmVheCwgc3Ry
dWN0dXJlKTsKLQotICAgIC8vIGNoZWNrcyBvdXQgb2theSEgLSBwdXREaXJlY3RPZmZzZXQKLSAg
ICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBY
ODY6OmVheCwgWDg2OjplYXgpOwotICAgIF9fIG1vdmxfcm0oWDg2OjplZHgsIGNhY2hlZE9mZnNl
dCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWF4KTsKLSAgICBfXyByZXQoKTsKLQotICAgIHZv
aWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weSgpOwotICAgIAotICAgIFg4NkFzc2VtYmxlcjo6
bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnBy
ZXRlcjo6Y3RpX29wX3B1dF9ieV9pZF9mYWlsKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNv
ZGUsIGZhaWx1cmVDYXNlczIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpj
dGlfb3BfcHV0X2J5X2lkX2ZhaWwpKTsKLQotICAgIG1fY29kZUJsb2NrLT5nZXRTdHViSW5mbyhy
ZXR1cm5BZGRyZXNzKS5zdHViUm91dGluZSA9IGNvZGU7Ci0gICAgCi0gICAgY3RpUmVwYXRjaENh
bGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgY29kZSk7Ci19Ci0KLWV4dGVybiAiQyIg
ewotCi0gICAgc3RhdGljIEpTT2JqZWN0KiByZXNpemVQcm9wZXJ0eVN0b3JhZ2UoSlNPYmplY3Qq
IGJhc2VPYmplY3QsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKLSAgICB7Ci0gICAg
ICAgIGJhc2VPYmplY3QtPmFsbG9jYXRlUHJvcGVydHlTdG9yYWdlSW5saW5lKG9sZFNpemUsIG5l
d1NpemUpOwotICAgICAgICByZXR1cm4gYmFzZU9iamVjdDsKLSAgICB9Ci0KLX0KKyAgICBpbnQg
YXJnQ291bnQgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgaW50IHJlZ2lzdGVyT2Zm
c2V0ID0gaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwogCi1zdGF0aWMgaW5saW5lIGJvb2wgdHJh
bnNpdGlvbldpbGxOZWVkU3RvcmFnZVJlYWxsb2MoU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlKQotewotICAgIHJldHVybiBvbGRTdHJ1Y3R1cmUtPnByb3Bl
cnR5U3RvcmFnZUNhcGFjaXR5KCkgIT0gbmV3U3RydWN0dXJlLT5wcm9wZXJ0eVN0b3JhZ2VDYXBh
Y2l0eSgpOworICAgIC8vIGVjeCBob2xkcyBmdW5jCisgICAgZW1pdFB1dENUSUFyZyhYODY6OmVj
eCwgMCk7CisgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlZ2lzdGVyT2Zmc2V0LCA0KTsKKyAg
ICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoYXJnQ291bnQsIDgpOworICAgIGVtaXRQdXRDVElBcmdD
b25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpbnN0cnVjdGlvbiksIDEyKTsKIH0K
IAotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0
LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHZvaWQqIHJldHVybkFkZHJlc3MpCit2b2lkIEpJVDo6
Y29tcGlsZU9wQ29uc3RydWN0U2V0dXBBcmdzKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsK
LSAgICBWZWN0b3I8Sm1wU3JjLCAxNj4gZmFpbHVyZUNhc2VzOwotICAgIC8vIENoZWNrIGVheCBp
cyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0IFN0cnVjdHVyZS4KLSAgICBfXyB0ZXN0bF9pMzJyKEpT
SW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7Ci0gICAgZmFpbHVyZUNhc2VzLmFwcGVuZChf
XyBqbmUoKSk7Ci0gICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KG9s
ZFN0cnVjdHVyZSksIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgp
OwotICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoX18gam5lKCkpOwotICAgIFZlY3RvcjxKbXBTcmM+
IHN1Y2Nlc3NDYXNlczsKLQotICAgIC8vICBlY3ggPSBiYXNlT2JqZWN0Ci0gICAgX18gbW92bF9t
cihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7
Ci0gICAgLy8gcHJvdG8oZWN4KSA9IGJhc2VPYmplY3QtPnN0cnVjdHVyZSgpLT5wcm90b3R5cGUo
KQotICAgIF9fIGNtcGxfaTMybShPYmplY3RUeXBlLCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBt
X3R5cGVJbmZvKSArIEZJRUxEX09GRlNFVChUeXBlSW5mbywgbV90eXBlKSwgWDg2OjplY3gpOwot
ICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoX18gam5lKCkpOwotICAgIF9fIG1vdmxfbXIoRklFTERf
T0ZGU0VUKFN0cnVjdHVyZSwgbV9wcm90b3R5cGUpLCBYODY6OmVjeCwgWDg2OjplY3gpOwotICAg
IAotICAgIC8vIGVjeCA9IGJhc2VPYmplY3QtPm1fc3RydWN0dXJlCi0gICAgZm9yIChSZWZQdHI8
U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOyAqaXQ7ICsraXQpIHsKLSAgICAgICAgLy8g
bnVsbCBjaGVjayB0aGUgcHJvdG90eXBlCi0gICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIo
anNOdWxsKCkpLCBYODY6OmVjeCk7Ci0gICAgICAgIHN1Y2Nlc3NDYXNlcy5hcHBlbmQoX18gamUo
KSk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZSBpZAotICAgICAgICBfXyBjbXBs
X2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oaXQtPmdldCgpKSwgRklFTERfT0ZGU0VU
KEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVjeCk7Ci0gICAgICAgIGZhaWx1cmVDYXNlcy5h
cHBlbmQoX18gam5lKCkpOwotICAgICAgICAKLSAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZT
RVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWN4LCBYODY6OmVjeCk7Ci0gICAgICAgIF9f
IGNtcGxfaTMybShPYmplY3RUeXBlLCBGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZv
KSArIEZJRUxEX09GRlNFVChUeXBlSW5mbywgbV90eXBlKSwgWDg2OjplY3gpOwotICAgICAgICBm
YWlsdXJlQ2FzZXMuYXBwZW5kKF9fIGpuZSgpKTsKLSAgICAgICAgX18gbW92bF9tcihGSUVMRF9P
RkZTRVQoU3RydWN0dXJlLCBtX3Byb3RvdHlwZSksIFg4Njo6ZWN4LCBYODY6OmVjeCk7Ci0gICAg
fQotCi0gICAgZmFpbHVyZUNhc2VzLmFwcGVuZChfXyBqbmUoKSk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHN1Y2Nlc3NDYXNlcy5zaXplKCk7ICsraSkKLSAgICAgICAgX18gbGluayhz
dWNjZXNzQ2FzZXNbaV0sIF9fIGxhYmVsKCkpOwotCi0gICAgSm1wU3JjIGNhbGxUYXJnZXQ7Ci0K
LSAgICAvLyBlbWl0IGEgY2FsbCBvbmx5IGlmIHN0b3JhZ2UgcmVhbGxvYyBpcyBuZWVkZWQKLSAg
ICBpZiAodHJhbnNpdGlvbldpbGxOZWVkU3RvcmFnZVJlYWxsb2Mob2xkU3RydWN0dXJlLCBuZXdT
dHJ1Y3R1cmUpKSB7Ci0gICAgICAgIF9fIHB1c2hsX3IoWDg2OjplZHgpOwotICAgICAgICBfXyBw
dXNobF9pMzIobmV3U3RydWN0dXJlLT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICAg
ICAgX18gcHVzaGxfaTMyKG9sZFN0cnVjdHVyZS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSk7
Ci0gICAgICAgIF9fIHB1c2hsX3IoWDg2OjplYXgpOwotICAgICAgICBjYWxsVGFyZ2V0ID0gX18g
Y2FsbCgpOwotICAgICAgICBfXyBhZGRsX2kzMnIoMyAqIHNpemVvZih2b2lkKiksIFg4Njo6ZXNw
KTsKLSAgICAgICAgX18gcG9wbF9yKFg4Njo6ZWR4KTsKLSAgICB9Ci0KLSAgICAvLyBBc3N1bWVz
IG1fcmVmQ291bnQgY2FuIGJlIGRlY3JlbWVudGVkIGVhc2lseSwgcmVmY291bnQgZGVjcmVtZW50
IGlzIHNhZmUgYXMgCi0gICAgLy8gY29kZWJsb2NrIHNob3VsZCBlbnN1cmUgb2xkU3RydWN0dXJl
LT5tX3JlZkNvdW50ID4gMAotICAgIF9fIHN1YmxfaThtKDEsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KG9sZFN0cnVjdHVyZSkpOwotICAgIF9fIGFkZGxfaThtKDEsIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KG5ld1N0cnVjdHVyZSkpOwotICAgIF9fIG1vdmxfaTMybShyZWludGVycHJldF9jYXN0
PHVpbnQzMl90PihuZXdTdHJ1Y3R1cmUpLCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVy
ZSksIFg4Njo6ZWF4KTsKLQotICAgIC8vIHdyaXRlIHRoZSB2YWx1ZQotICAgIF9fIG1vdmxfbXIo
RklFTERfT0ZGU0VUKEpTT2JqZWN0LCBtX3Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6
OmVheCk7Ci0gICAgX18gbW92bF9ybShYODY6OmVkeCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpT
VmFsdWUqKSwgWDg2OjplYXgpOwotCi0gICAgX18gcmV0KCk7Ci0gICAgCi0gICAgSm1wU3JjIGZh
aWx1cmVKdW1wOwotICAgIGlmIChmYWlsdXJlQ2FzZXMuc2l6ZSgpKSB7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBmYWlsdXJlQ2FzZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAg
ICBfXyBsaW5rKGZhaWx1cmVDYXNlc1tpXSwgX18gbGFiZWwoKSk7Ci0gICAgICAgIF9fIHJlc3Rv
cmVBcmd1bWVudFJlZmVyZW5jZUZvclRyYW1wb2xpbmUoKTsKLSAgICAgICAgZmFpbHVyZUp1bXAg
PSBfXyBqbXAoKTsKLSAgICB9Ci0KLSAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNvcHko
KTsKLQotICAgIGlmIChmYWlsdXJlQ2FzZXMuc2l6ZSgpKQotICAgICAgICBYODZBc3NlbWJsZXI6
OmxpbmsoY29kZSwgZmFpbHVyZUp1bXAsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJl
dGVyOjpjdGlfb3BfcHV0X2J5X2lkX2ZhaWwpKTsKKyAgICBpbnQgYXJnQ291bnQgPSBpbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CisgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25b
NF0udS5vcGVyYW5kOworICAgIGludCBwcm90byA9IGluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsK
KyAgICBpbnQgdGhpc1JlZ2lzdGVyID0gaW5zdHJ1Y3Rpb25bNl0udS5vcGVyYW5kOwogCi0gICAg
aWYgKHRyYW5zaXRpb25XaWxsTmVlZFN0b3JhZ2VSZWFsbG9jKG9sZFN0cnVjdHVyZSwgbmV3U3Ry
dWN0dXJlKSkKLSAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGNhbGxUYXJnZXQsIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlc2l6ZVByb3BlcnR5U3RvcmFnZSkpOwotICAgIAotICAg
IG1fY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKS5zdHViUm91dGluZSA9IGNv
ZGU7Ci0gICAgCi0gICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVz
cywgY29kZSk7CisgICAgLy8gZWN4IGhvbGRzIGZ1bmMKKyAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6
ZWN4LCAwKTsKKyAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVnaXN0ZXJPZmZzZXQsIDQpOwor
ICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChhcmdDb3VudCwgOCk7CisgICAgZW1pdFB1dENUSUFy
Z0Zyb21WaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIDEyLCBYODY6OmVheCk7CisgICAgZW1pdFB1dENU
SUFyZ0NvbnN0YW50KHRoaXNSZWdpc3RlciwgMTYpOworICAgIGVtaXRQdXRDVElBcmdDb25zdGFu
dChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpbnN0cnVjdGlvbiksIDIwKTsKIH0KIAogdm9p
ZCBKSVQ6OnVubGlua0NhbGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCkBAIC0zNDc1LDI4
NyArMTIwLDI0NSBAQCB2b2lkIEpJVDo6bGlua0NhbGwoSlNGdW5jdGlvbiogY2FsbGVlLCBDCiAg
ICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmVwYXRjaENoZWNrLCBjYWxsTGlua0lu
Zm8tPmNvbGRQYXRoT3RoZXIpOwogfQogCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNo
aW5lVHJhbXBvbGluZXMoKQorI2lmICFFTkFCTEUoSklUX09QVElNSVpFX0NBTEwpCisKK3ZvaWQg
SklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIHVuc2lnbmVkIGksIHVuc2lnbmVkKQogewotICAgIC8vICgxKSBUaGUgZmlyc3QgZnVu
Y3Rpb24gcHJvdmlkZXMgZmFzdCBwcm9wZXJ0eSBhY2Nlc3MgZm9yIGFycmF5IGxlbmd0aAotICAg
IAotICAgIC8vIENoZWNrIGVheCBpcyBhbiBhcnJheQotICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1l
ZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgYXJyYXlfZmFpbHVyZUNhc2Vz
MSA9IF9fIGpuZSgpOwotICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVk
PihtX2ludGVycHJldGVyLT5tX2pzQXJyYXlWcHRyKSwgWDg2OjplYXgpOwotICAgIEptcFNyYyBh
cnJheV9mYWlsdXJlQ2FzZXMyID0gX18gam5lKCk7Ci0KLSAgICAvLyBDaGVja3Mgb3V0IG9rYXkh
IC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgc3RvcmFnZQotICAgIF9fIG1vdmxfbXIoRklFTERf
T0ZGU0VUKEpTQXJyYXksIG1fc3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgX18g
bW92bF9tcihGSUVMRF9PRkZTRVQoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCksIFg4Njo6ZWF4LCBY
ODY6OmVheCk7CisgICAgaW50IGRzdCA9IGluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBp
bnQgY2FsbGVlID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBhcmdDb3VudCA9
IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBpbnN0
cnVjdGlvbls0XS51Lm9wZXJhbmQ7CiAKLSAgICBfXyBjbXBsX2kzMnIoSlNJbW1lZGlhdGU6Om1h
eEltbWVkaWF0ZUludCwgWDg2OjplYXgpOwotICAgIEptcFNyYyBhcnJheV9mYWlsdXJlQ2FzZXMz
ID0gX18gamEoKTsKKyAgICAvLyBIYW5kbGUgZXZhbAorICAgIEptcFNyYyB3YXNFdmFsOworICAg
IGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihjYWxsZWUsIFg4Njo6ZWN4LCBpKTsKKyAgICAgICAgY29tcGlsZU9wQ2FsbEV2YWxT
ZXR1cEFyZ3MoaW5zdHJ1Y3Rpb24pOwogCi0gICAgX18gYWRkbF9ycihYODY6OmVheCwgWDg2Ojpl
YXgpOwotICAgIF9fIGFkZGxfaThyKDEsIFg4Njo6ZWF4KTsKLSAgICAKLSAgICBfXyByZXQoKTsK
KyAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX2V2YWwpOwor
ICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjppbXBvc3NpYmxlVmFs
dWUoKSksIFg4Njo6ZWF4KTsKKyAgICAgICAgd2FzRXZhbCA9IF9fIGpuZSgpOworICAgIH0KIAot
ICAgIC8vICgyKSBUaGUgc2Vjb25kIGZ1bmN0aW9uIHByb3ZpZGVzIGZhc3QgcHJvcGVydHkgYWNj
ZXNzIGZvciBzdHJpbmcgbGVuZ3RoCi0gICAgCi0gICAgSm1wRHN0IHN0cmluZ0xlbmd0aEJlZ2lu
ID0gX18gYWxpZ24oMTYpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBYODY6
OmVjeCwgaSk7CisgICAgLy8gVGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gc2V0IHVwIG9uIHRoZSBo
b3QgcGF0aCBmb3Igb3BfY2FsbF9ldmFsCisgICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGwpCisg
ICAgICAgIGNvbXBpbGVPcENhbGxTZXR1cEFyZ3MoaW5zdHJ1Y3Rpb24pOworICAgIGVsc2UgaWYg
KG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCkKKyAgICAgICAgY29tcGlsZU9wQ29uc3RydWN0U2V0
dXBBcmdzKGluc3RydWN0aW9uKTsKKworICAgIC8vIENoZWNrIGZvciBKU0Z1bmN0aW9ucy4KKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoWDg2OjplY3gsIGkpOworICAgIF9fIGNtcGxf
aTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2ludGVycHJldGVyLT5tX2pzRnVuY3Rp
b25WcHRyKSwgWDg2OjplY3gpOworICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5
KF9fIGpuZSgpLCBpKSk7CiAKLSAgICAvLyBDaGVjayBlYXggaXMgYSBzdHJpbmcKLSAgICBfXyB0
ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7Ci0gICAgSm1wU3JjIHN0
cmluZ19mYWlsdXJlQ2FzZXMxID0gX18gam5lKCk7Ci0gICAgX18gY21wbF9pMzJtKHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQ+KG1faW50ZXJwcmV0ZXItPm1fanNTdHJpbmdWcHRyKSwgWDg2Ojpl
YXgpOwotICAgIEptcFNyYyBzdHJpbmdfZmFpbHVyZUNhc2VzMiA9IF9fIGpuZSgpOwotCi0gICAg
Ly8gQ2hlY2tzIG91dCBva2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhlIFVzdHJpbmcuCi0g
ICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNTdHJpbmcsIG1fdmFsdWUpICsgRklFTERfT0ZG
U0VUKFVTdHJpbmcsIG1fcmVwKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBfXyBtb3ZsX21y
KEZJRUxEX09GRlNFVChVU3RyaW5nOjpSZXAsIGxlbiksIFg4Njo6ZWF4LCBYODY6OmVheCk7Cisg
ICAgLy8gRmlyc3QsIGluIHRoZSBjYXNlIG9mIGEgY29uc3RydWN0LCBhbGxvY2F0ZSB0aGUgbmV3
IG9iamVjdC4KKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0KSB7CisgICAgICAgIGVt
aXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfY29uc3RydWN0X0pTQ29uc3RydWN0KTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCAtIFJlZ2lzdGVy
RmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGFyZ0NvdW50KTsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihjYWxsZWUsIFg4Njo6ZWN4LCBpKTsKKyAgICB9CiAKLSAgICBfXyBjbXBs
X2kzMnIoSlNJbW1lZGlhdGU6Om1heEltbWVkaWF0ZUludCwgWDg2OjplYXgpOwotICAgIEptcFNy
YyBzdHJpbmdfZmFpbHVyZUNhc2VzMyA9IF9fIGphKCk7CisgICAgLy8gU3BlY3VsYXRpdmVseSBy
b2xsIHRoZSBjYWxsZnJhbWUsIGFzc3VtaW5nIGFyZ0NvdW50IHdpbGwgbWF0Y2ggdGhlIGFyaXR5
LgorICAgIF9fIG1vdmxfcm0oWDg2OjplZGksIChSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lICsg
cmVnaXN0ZXJPZmZzZXQpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2
OjplZGkpOworICAgIF9fIGFkZGxfaTMycihyZWdpc3Rlck9mZnNldCAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSksIFg4Njo6ZWRpKTsKKyAgICBfXyBtb3ZsX2kzMnIoYXJnQ291
bnQsIFg4Njo6ZWR4KTsKIAotICAgIF9fIGFkZGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAg
ICBfXyBhZGRsX2k4cigxLCBYODY6OmVheCk7Ci0gICAgCi0gICAgX18gcmV0KCk7CisgICAgZW1p
dE5ha2VkQ2FsbChpLCBtX2ludGVycHJldGVyLT5tX2N0aVZpcnR1YWxDYWxsKTsKIAotICAgIC8v
ICgzKSBUcmFtcG9saW5lcyBmb3IgdGhlIHNsb3cgY2FzZXMgb2Ygb3BfY2FsbCAvIG9wX2NhbGxf
ZXZhbCAvIG9wX2NvbnN0cnVjdC4KLSAgICAKLSAgICBKbXBEc3QgdmlydHVhbENhbGxQcmVMaW5r
QmVnaW4gPSBfXyBhbGlnbigxNik7CisgICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkK
KyAgICAgICAgX18gbGluayh3YXNFdmFsLCBfXyBsYWJlbCgpKTsKIAotICAgIC8vIExvYWQgdGhl
IGNhbGxlZSBDb2RlQmxvY2sqIGludG8gZWF4Ci0gICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQo
SlNGdW5jdGlvbiwgbV9ib2R5KSwgWDg2OjplY3gsIFg4Njo6ZWF4KTsKLSAgICBfXyBtb3ZsX21y
KEZJRUxEX09GRlNFVChGdW5jdGlvbkJvZHlOb2RlLCBtX2NvZGUpLCBYODY6OmVheCwgWDg2Ojpl
YXgpOwotICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgSm1wU3JjIGhh
c0NvZGVCbG9jazEgPSBfXyBqbmUoKTsKLSAgICBfXyBwb3BsX3IoWDg2OjplYngpOwotICAgIF9f
IHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVk
aSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKLSAgICBKbXBTcmMgY2FsbEpTRnVuY3Rpb24xID0gX18g
Y2FsbCgpOwotICAgIGVtaXRHZXRDVElBcmcoMCwgWDg2OjplY3gpOwotICAgIGVtaXRHZXRDVElB
cmcoOCwgWDg2OjplZHgpOwotICAgIF9fIHB1c2hsX3IoWDg2OjplYngpOwotICAgIF9fIGxpbmso
aGFzQ29kZUJsb2NrMSwgX18gbGFiZWwoKSk7Ci0KLSAgICAvLyBDaGVjayBhcmdDb3VudCBtYXRj
aGVzIGNhbGxlZSBhcml0eS4KLSAgICBfXyBjbXBsX3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQo
Q29kZUJsb2NrLCBudW1QYXJhbWV0ZXJzKSwgWDg2OjplYXgpOwotICAgIEptcFNyYyBhcml0eUNo
ZWNrT2theTEgPSBfXyBqZSgpOwotICAgIF9fIHBvcGxfcihYODY6OmVieCk7Ci0gICAgZW1pdFB1
dENUSUFyZyhYODY6OmVieCwgNCk7Ci0gICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMTIpOwot
ICAgIF9fIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAgIGVtaXRQdXRDVElQYXJhbShY
ODY6OmVkaSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKLSAgICBKbXBTcmMgY2FsbEFyaXR5Q2hlY2sx
ID0gX18gY2FsbCgpOwotICAgIF9fIG1vdmxfcnIoWDg2OjplZHgsIFg4Njo6ZWRpKTsKLSAgICBl
bWl0R2V0Q1RJQXJnKDAsIFg4Njo6ZWN4KTsKLSAgICBlbWl0R2V0Q1RJQXJnKDgsIFg4Njo6ZWR4
KTsKLSAgICBfXyBwdXNobF9yKFg4Njo6ZWJ4KTsKLSAgICBfXyBsaW5rKGFyaXR5Q2hlY2tPa2F5
MSwgX18gbGFiZWwoKSk7Ci0KLSAgICBjb21waWxlT3BDYWxsSW5pdGlhbGl6ZUNhbGxGcmFtZSgp
OwotCi0gICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsKLSAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWJ4
LCA0KTsKLSAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBlbWl0UHV0Q1RJ
UGFyYW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7Ci0gICAgSm1wU3JjIGNhbGxEb250
TGF6eUxpbmtDYWxsID0gX18gY2FsbCgpOwotICAgIF9fIHB1c2hsX3IoWDg2OjplYngpOwotCi0g
ICAgX18gam1wX3IoWDg2OjplYXgpOwotCi0gICAgSm1wRHN0IHZpcnR1YWxDYWxsTGlua0JlZ2lu
ID0gX18gYWxpZ24oMTYpOwotCi0gICAgLy8gTG9hZCB0aGUgY2FsbGVlIENvZGVCbG9jayogaW50
byBlYXgKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0Z1bmN0aW9uLCBtX2JvZHkpLCBY
ODY6OmVjeCwgWDg2OjplYXgpOwotICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEZ1bmN0aW9u
Qm9keU5vZGUsIG1fY29kZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgX18gdGVzdGxfcnIo
WDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgaGFzQ29kZUJsb2NrMiA9IF9fIGpuZSgp
OwotICAgIF9fIHBvcGxfcihYODY6OmVieCk7Ci0gICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJl
bmNlKCk7Ci0gICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUp
OwotICAgIEptcFNyYyBjYWxsSlNGdW5jdGlvbjIgPSBfXyBjYWxsKCk7Ci0gICAgZW1pdEdldENU
SUFyZygwLCBYODY6OmVjeCk7Ci0gICAgZW1pdEdldENUSUFyZyg4LCBYODY6OmVkeCk7Ci0gICAg
X18gcHVzaGxfcihYODY6OmVieCk7Ci0gICAgX18gbGluayhoYXNDb2RlQmxvY2syLCBfXyBsYWJl
bCgpKTsKLQotICAgIC8vIENoZWNrIGFyZ0NvdW50IG1hdGNoZXMgY2FsbGVlIGFyaXR5LgotICAg
IF9fIGNtcGxfcm0oWDg2OjplZHgsIEZJRUxEX09GRlNFVChDb2RlQmxvY2ssIG51bVBhcmFtZXRl
cnMpLCBYODY6OmVheCk7Ci0gICAgSm1wU3JjIGFyaXR5Q2hlY2tPa2F5MiA9IF9fIGplKCk7Ci0g
ICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsKLSAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWJ4LCA0KTsK
LSAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAxMik7Ci0gICAgX18gcmVzdG9yZUFyZ3VtZW50
UmVmZXJlbmNlKCk7Ci0gICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJHU19jYWxs
RnJhbWUpOwotICAgIEptcFNyYyBjYWxsQXJpdHlDaGVjazIgPSBfXyBjYWxsKCk7Ci0gICAgX18g
bW92bF9ycihYODY6OmVkeCwgWDg2OjplZGkpOwotICAgIGVtaXRHZXRDVElBcmcoMCwgWDg2Ojpl
Y3gpOwotICAgIGVtaXRHZXRDVElBcmcoOCwgWDg2OjplZHgpOwotICAgIF9fIHB1c2hsX3IoWDg2
OjplYngpOwotICAgIF9fIGxpbmsoYXJpdHlDaGVja09rYXkyLCBfXyBsYWJlbCgpKTsKLQotICAg
IGNvbXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYW1lKCk7Ci0KLSAgICBfXyBwb3BsX3IoWDg2
OjplYngpOwotICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYngsIDQpOwotICAgIF9fIHJlc3RvcmVB
cmd1bWVudFJlZmVyZW5jZSgpOwotICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJX0FS
R1NfY2FsbEZyYW1lKTsKLSAgICBKbXBTcmMgY2FsbExhenlMaW5rQ2FsbCA9IF9fIGNhbGwoKTsK
LSAgICBfXyBwdXNobF9yKFg4Njo6ZWJ4KTsKLQotICAgIF9fIGptcF9yKFg4Njo6ZWF4KTsKLQot
ICAgIEptcERzdCB2aXJ0dWFsQ2FsbEJlZ2luID0gX18gYWxpZ24oMTYpOwotCi0gICAgLy8gTG9h
ZCB0aGUgY2FsbGVlIENvZGVCbG9jayogaW50byBlYXgKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09G
RlNFVChKU0Z1bmN0aW9uLCBtX2JvZHkpLCBYODY6OmVjeCwgWDg2OjplYXgpOwotICAgIF9fIG1v
dmxfbXIoRklFTERfT0ZGU0VUKEZ1bmN0aW9uQm9keU5vZGUsIG1fY29kZSksIFg4Njo6ZWF4LCBY
ODY6OmVheCk7Ci0gICAgX18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBKbXBT
cmMgaGFzQ29kZUJsb2NrMyA9IF9fIGpuZSgpOwotICAgIF9fIHBvcGxfcihYODY6OmVieCk7Ci0g
ICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgZW1pdFB1dENUSVBhcmFtKFg4
Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOwotICAgIEptcFNyYyBjYWxsSlNGdW5jdGlvbjMg
PSBfXyBjYWxsKCk7Ci0gICAgZW1pdEdldENUSUFyZygwLCBYODY6OmVjeCk7Ci0gICAgZW1pdEdl
dENUSUFyZyg4LCBYODY6OmVkeCk7Ci0gICAgX18gcHVzaGxfcihYODY6OmVieCk7Ci0gICAgX18g
bGluayhoYXNDb2RlQmxvY2szLCBfXyBsYWJlbCgpKTsKLQotICAgIC8vIENoZWNrIGFyZ0NvdW50
IG1hdGNoZXMgY2FsbGVlIGFyaXR5LgotICAgIF9fIGNtcGxfcm0oWDg2OjplZHgsIEZJRUxEX09G
RlNFVChDb2RlQmxvY2ssIG51bVBhcmFtZXRlcnMpLCBYODY6OmVheCk7Ci0gICAgSm1wU3JjIGFy
aXR5Q2hlY2tPa2F5MyA9IF9fIGplKCk7Ci0gICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsKLSAgICBl
bWl0UHV0Q1RJQXJnKFg4Njo6ZWJ4LCA0KTsKLSAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAx
Mik7Ci0gICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgZW1pdFB1dENUSVBh
cmFtKFg4Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOwotICAgIEptcFNyYyBjYWxsQXJpdHlD
aGVjazMgPSBfXyBjYWxsKCk7Ci0gICAgX18gbW92bF9ycihYODY6OmVkeCwgWDg2OjplZGkpOwot
ICAgIGVtaXRHZXRDVElBcmcoMCwgWDg2OjplY3gpOwotICAgIGVtaXRHZXRDVElBcmcoOCwgWDg2
OjplZHgpOwotICAgIF9fIHB1c2hsX3IoWDg2OjplYngpOwotICAgIF9fIGxpbmsoYXJpdHlDaGVj
a09rYXkzLCBfXyBsYWJlbCgpKTsKLQotICAgIGNvbXBpbGVPcENhbGxJbml0aWFsaXplQ2FsbEZy
YW1lKCk7Ci0KLSAgICAvLyBsb2FkIGN0aUNvZGUgZnJvbSB0aGUgbmV3IGNvZGVCbG9jay4KLSAg
ICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChDb2RlQmxvY2ssIGN0aUNvZGUpLCBYODY6OmVheCwg
WDg2OjplYXgpOwotCi0gICAgX18gam1wX3IoWDg2OjplYXgpOwotCi0gICAgLy8gQWxsIHRyYW1w
b2xpbmVzIGNvbnN0cnVjdGVkISBjb3B5IHRoZSBjb2RlLCBsaW5rIHVwIGNhbGxzLCBhbmQgc2V0
IHRoZSBwb2ludGVycyBvbiB0aGUgTWFjaGluZSBvYmplY3QuCi0KLSAgICB2b2lkKiBjb2RlID0g
X18gZXhlY3V0YWJsZUNvcHkoKTsKLQotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBhcnJh
eV9mYWlsdXJlQ2FzZXMxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3Rp
X29wX2dldF9ieV9pZF9hcnJheV9mYWlsKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUs
IGFycmF5X2ZhaWx1cmVDYXNlczIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVy
OjpjdGlfb3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwpKTsKLSAgICBYODZBc3NlbWJsZXI6Omxpbmso
Y29kZSwgYXJyYXlfZmFpbHVyZUNhc2VzMywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJw
cmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbCkpOwotICAgIFg4NkFzc2VtYmxlcjo6
bGluayhjb2RlLCBzdHJpbmdfZmFpbHVyZUNhc2VzMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
SW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKLSAgICBYODZBc3Nl
bWJsZXI6OmxpbmsoY29kZSwgc3RyaW5nX2ZhaWx1cmVDYXNlczIsIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7Ci0gICAg
WDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIHN0cmluZ19mYWlsdXJlQ2FzZXMzLCByZWludGVycHJl
dF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkp
OwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBjYWxsQXJpdHlDaGVjazEsIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfY2FsbF9hcml0eUNoZWNrKSk7Ci0g
ICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGNhbGxBcml0eUNoZWNrMiwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX2FyaXR5Q2hlY2spKTsKLSAgICBY
ODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgY2FsbEFyaXR5Q2hlY2szLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2NhbGxfYXJpdHlDaGVjaykpOwotICAgIFg4NkFz
c2VtYmxlcjo6bGluayhjb2RlLCBjYWxsSlNGdW5jdGlvbjEsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KEludGVycHJldGVyOjpjdGlfb3BfY2FsbF9KU0Z1bmN0aW9uKSk7Ci0gICAgWDg2QXNzZW1i
bGVyOjpsaW5rKGNvZGUsIGNhbGxKU0Z1bmN0aW9uMiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
SW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX0pTRnVuY3Rpb24pKTsKLSAgICBYODZBc3NlbWJsZXI6
OmxpbmsoY29kZSwgY2FsbEpTRnVuY3Rpb24zLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRl
cnByZXRlcjo6Y3RpX29wX2NhbGxfSlNGdW5jdGlvbikpOwotICAgIFg4NkFzc2VtYmxlcjo6bGlu
ayhjb2RlLCBjYWxsRG9udExhenlMaW5rQ2FsbCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50
ZXJwcmV0ZXI6OmN0aV92bV9kb250TGF6eUxpbmtDYWxsKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjps
aW5rKGNvZGUsIGNhbGxMYXp5TGlua0NhbGwsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVy
cHJldGVyOjpjdGlfdm1fbGF6eUxpbmtDYWxsKSk7Ci0KLSAgICBtX2ludGVycHJldGVyLT5tX2N0
aUFycmF5TGVuZ3RoVHJhbXBvbGluZSA9IGNvZGU7Ci0gICAgbV9pbnRlcnByZXRlci0+bV9jdGlT
dHJpbmdMZW5ndGhUcmFtcG9saW5lID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNz
KGNvZGUsIHN0cmluZ0xlbmd0aEJlZ2luKTsKLSAgICBtX2ludGVycHJldGVyLT5tX2N0aVZpcnR1
YWxDYWxsUHJlTGluayA9IFg4NkFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCB2
aXJ0dWFsQ2FsbFByZUxpbmtCZWdpbik7Ci0gICAgbV9pbnRlcnByZXRlci0+bV9jdGlWaXJ0dWFs
Q2FsbExpbmsgPSBYODZBc3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgdmlydHVh
bENhbGxMaW5rQmVnaW4pOwotICAgIG1faW50ZXJwcmV0ZXItPm1fY3RpVmlydHVhbENhbGwgPSBY
ODZBc3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgdmlydHVhbENhbGxCZWdpbik7
Ci19CisgICAgLy8gUHV0IHRoZSByZXR1cm4gdmFsdWUgaW4gZHN0LiBJbiB0aGUgaW50ZXJwcmV0
ZXIsIG9wX3JldCBkb2VzIHRoaXMuCisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwog
Ci12b2lkIEpJVDo6ZnJlZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhJbnRlcnByZXRlciogaW50ZXJw
cmV0ZXIpCi17Ci0gICAgV1RGOjpmYXN0RnJlZUV4ZWN1dGFibGUoaW50ZXJwcmV0ZXItPm1fY3Rp
QXJyYXlMZW5ndGhUcmFtcG9saW5lKTsKKyNpZiBFTkFCTEUoQ09ERUJMT0NLX1NBTVBMSU5HKQor
ICAgIF9fIG1vdmxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jayks
IG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+Y29kZUJsb2NrU2xvdCgpKTsKKyNlbmRpZgogfQog
Ci12b2lkIEpJVDo6cGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZzZXQsIHZvaWQqIHJldHVybkFkZHJlc3Mp
Cit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgdW5zaWduZWQgaSwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5z
aWduZWQsIE9wY29kZUlEIG9wY29kZUlEKQogewotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZv
ID0gY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBpbnQgZHN0ID0g
aW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZXBh
dGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9nZXRfYnlfaWRfZ2Vu
ZXJpYy4KLSAgICAvLyBTaG91bGQgcHJvYmFibHkgZ28gdG8gSW50ZXJwcmV0ZXI6OmN0aV9vcF9n
ZXRfYnlfaWRfZmFpbCwgYnV0IHRoYXQgZG9lc24ndCBkbyBhbnl0aGluZyBpbnRlcmVzdGluZyBy
aWdodCBub3cuCi0gICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVz
cywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRf
c2VsZl9mYWlsKSk7Ci0KLSAgICAvLyBSZXBhdGNoIHRoZSBvZmZzZXQgaW50byB0aGUgcHJvcG9l
cnR5IG1hcCB0byBsb2FkIGZyb20sIHRoZW4gcmVwYXRjaCB0aGUgU3RydWN0dXJlIHRvIGxvb2sg
Zm9yLgotICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaERpc3BsYWNlbWVudChyZWludGVycHJldF9j
YXN0PGludHB0cl90PihpbmZvLmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZFBy
b3BlcnR5TWFwT2Zmc2V0LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopKTsKLSAgICBY
ODZBc3NlbWJsZXI6OnJlcGF0Y2hJbW1lZGlhdGUocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
aW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRTdHJ1Y3R1cmUsIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHN0cnVjdHVyZSkpOworICAgIF9fIGxpbmsoaXRlci0+ZnJv
bSwgX18gbGFiZWwoKSk7CisgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7
CisKKyAgICAvLyBUaGlzIGhhbmRsZXMgaG9zdCBmdW5jdGlvbnMKKyAgICBlbWl0Q1RJQ2FsbChp
LCAoKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCkgPyBJbnRlcnByZXRlcjo6Y3RpX29wX2NvbnN0
cnVjdF9Ob3RKU0NvbnN0cnVjdCA6IEludGVycHJldGVyOjpjdGlfb3BfY2FsbF9Ob3RKU0Z1bmN0
aW9uKSk7CisgICAgLy8gUHV0IHRoZSByZXR1cm4gdmFsdWUgaW4gZHN0LiBJbiB0aGUgaW50ZXJw
cmV0ZXIsIG9wX3JldCBkb2VzIHRoaXMuCisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OworCisjaWYgRU5BQkxFKENPREVCTE9DS19TQU1QTElORykKKyAgICBfXyBtb3ZsX2kzMm0ocmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9jb2RlQmxvY2spLCBtX2ludGVycHJldGVyLT5zYW1w
bGVyKCktPmNvZGVCbG9ja1Nsb3QoKSk7CisjZW5kaWYKIH0KIAotdm9pZCBKSVQ6OnBhdGNoUHV0
QnlJZFJlcGxhY2UoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogc3RydWN0dXJlLCBz
aXplX3QgY2FjaGVkT2Zmc2V0LCB2b2lkKiByZXR1cm5BZGRyZXNzKQorI2Vsc2UKKworc3RhdGlj
IHZvaWQgdW5yZWFjaGFibGUoKQogewotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZvID0gY29k
ZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLSAgICAKLSAgICAvLyBXZSBkb24n
dCB3YW50IHRvIHJlcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29w
X3B1dF9ieV9pZF9nZW5lcmljLgotICAgIC8vIFNob3VsZCBwcm9iYWJseSBnbyB0byBJbnRlcnBy
ZXRlcjo6Y3RpX29wX3B1dF9ieV9pZF9mYWlsLCBidXQgdGhhdCBkb2Vzbid0IGRvIGFueXRoaW5n
IGludGVyZXN0aW5nIHJpZ2h0IG5vdy4KLSAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVz
cyhyZXR1cm5BZGRyZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3Rp
X29wX3B1dF9ieV9pZF9nZW5lcmljKSk7Ci0KLSAgICAvLyBSZXBhdGNoIHRoZSBvZmZzZXQgaW50
byB0aGUgcHJvcG9lcnR5IG1hcCB0byBsb2FkIGZyb20sIHRoZW4gcmVwYXRjaCB0aGUgU3RydWN0
dXJlIHRvIGxvb2sgZm9yLgotICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaERpc3BsYWNlbWVudChy
ZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmZvLmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zm
c2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1
ZSopKTsKLSAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hJbW1lZGlhdGUocmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1
Y3R1cmUsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHN0cnVjdHVyZSkpOworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIGV4aXQoMSk7CiB9CiAKLXZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgodm9pZCogcmV0dXJuQWRkcmVzcykKK3ZvaWQgSklUOjpj
b21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IHVuc2lnbmVkIGksIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewotICAgIFN0cnVjdHVy
ZVN0dWJJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3Mp
OworICAgIGludCBkc3QgPSBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGNhbGxl
ZSA9IGluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgYXJnQ291bnQgPSBpbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CisgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25b
NF0udS5vcGVyYW5kOwogCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZXBhdGNoIG1vcmUgdGhh
biBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KLSAgICBj
dGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCByZWludGVycHJldF9j
YXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9hcnJheV9mYWlsKSk7Cisg
ICAgLy8gSGFuZGxlIGV2YWwKKyAgICBKbXBTcmMgd2FzRXZhbDsKKyAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfY2FsbF9ldmFsKSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVl
LCBYODY6OmVjeCwgaSk7CisgICAgICAgIGNvbXBpbGVPcENhbGxFdmFsU2V0dXBBcmdzKGluc3Ry
dWN0aW9uKTsKIAotICAgIC8vIENoZWNrIGVheCBpcyBhbiBhcnJheQotICAgIF9fIGNtcGxfaTMy
bShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2ludGVycHJldGVyLT5tX2pzQXJyYXlWcHRy
KSwgWDg2OjplYXgpOwotICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMxID0gX18gam5lKCk7CisgICAg
ICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfY2FsbF9ldmFsKTsKKyAgICAg
ICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6aW1wb3NzaWJsZVZhbHVlKCkp
LCBYODY6OmVheCk7CisgICAgICAgIHdhc0V2YWwgPSBfXyBqbmUoKTsKKyAgICB9CiAKLSAgICAv
LyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgc3RvcmFnZQotICAg
IF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQXJyYXksIG1fc3RvcmFnZSksIFg4Njo6ZWF4LCBY
ODY6OmVjeCk7Ci0gICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoQXJyYXlTdG9yYWdlLCBtX2xl
bmd0aCksIFg4Njo6ZWN4LCBYODY6OmVjeCk7CisgICAgLy8gVGhpcyBwbGFudHMgYSBjaGVjayBm
b3IgYSBjYWNoZWQgSlNGdW5jdGlvbiB2YWx1ZSwgc28gd2UgY2FuIHBsYW50IGEgZmFzdCBsaW5r
IHRvIHRoZSBjYWxsZWUuCisgICAgLy8gVGhpcyBkZWxpYmVyYXRlbHkgbGVhdmVzIHRoZSBjYWxs
ZWUgaW4gZWN4LCB1c2VkIHdoZW4gc2V0dGluZyB1cCB0aGUgc3RhY2sgZnJhbWUgYmVsb3cKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgWDg2OjplY3gsIGkpOworICAgIF9fIGNt
cGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6OmltcG9zc2libGVWYWx1ZSgpKSwgWDg2Ojpl
Y3gpOworICAgIEptcERzdCBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrID0gX18gbGFiZWwo
KTsKKyAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwor
ICAgIEFTU0VSVChYODZBc3NlbWJsZXI6OmdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKGFkZHJl
c3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIF9fIGxhYmVsKCkpID09IHJlcGF0Y2hPZmZzZXRPcENh
bGxDYWxsKTsKKyAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5r
SW5mb0luZGV4XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwog
Ci0gICAgX18gY21wbF9pMzJyKEpTSW1tZWRpYXRlOjptYXhJbW1lZGlhdGVJbnQsIFg4Njo6ZWN4
KTsKLSAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMiA9IF9fIGphKCk7CisgICAgLy8gVGhlIGZvbGxv
d2luZyBpcyB0aGUgZmFzdCBjYXNlLCBvbmx5IHVzZWQgd2hhbiBhIGNhbGxlZSBjYW4gYmUgbGlu
a2VkLgogCi0gICAgX18gYWRkbF9ycihYODY6OmVjeCwgWDg2OjplY3gpOwotICAgIF9fIGFkZGxf
aThyKDEsIFg4Njo6ZWN4KTsKLSAgICBfXyBtb3ZsX3JyKFg4Njo6ZWN4LCBYODY6OmVheCk7Ci0g
ICAgSm1wU3JjIHN1Y2Nlc3MgPSBfXyBqbXAoKTsKKyAgICAvLyBJbiB0aGUgY2FzZSBvZiBPcENv
bnN0cnVjdCwgY2FsbCBvdXQgdG8gYSBjdGlfIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgbmV3IG9i
amVjdC4KKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0KSB7CisgICAgICAgIGludCBw
cm90byA9IGluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKKyAgICAgICAgaW50IHRoaXNSZWdpc3Rl
ciA9IGluc3RydWN0aW9uWzZdLnUub3BlcmFuZDsKIAotICAgIHZvaWQqIGNvZGUgPSBfXyBleGVj
dXRhYmxlQ29weSgpOworICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWN4LCAwKTsKKyAgICAg
ICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIDEyLCBYODY6OmVheCk7
CisgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfY29uc3RydWN0X0pT
Q29uc3RydWN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcih0aGlzUmVnaXN0ZXIp
OworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgWDg2OjplY3gsIGkpOwor
ICAgIH0KIAotICAgIC8vIFVzZSB0aGUgcmVwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBm
YWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAg
IHZvaWQqIHNsb3dDYXNlQmVnaW4gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihpbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbikgLSByZXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbDsKLSAgICBY
ODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2VzMSwgc2xvd0Nhc2VCZWdpbik7Ci0g
ICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczIsIHNsb3dDYXNlQmVnaW4p
OworICAgIC8vIEZhc3QgdmVyc2lvbiBvZiBzdGFjayBmcmFtZSBpbml0aWFsaXphdGlvbiwgZGly
ZWN0bHkgcmVsYXRpdmUgdG8gZWRpLgorICAgIC8vIE5vdGUgdGhhdCB0aGlzIG9taXRzIHRvIHNl
dCB1cCBSZWdpc3RlckZpbGU6OkNvZGVCbG9jaywgd2hpY2ggaXMgc2V0IGluIHRoZSBjYWxsZWUK
KyAgICBfXyBtb3ZsX2kzMm0oYXNJbnRlZ2VyKG5vVmFsdWUoKSksIChyZWdpc3Rlck9mZnNldCAr
IFJlZ2lzdGVyRmlsZTo6T3B0aW9uYWxDYWxsZWVBcmd1bWVudHMpICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkpOworICAgIF9fIG1vdmxfcm0oWDg2OjplY3gs
IChyZWdpc3Rlck9mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2FsbGVlKSAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSksIFg4Njo6ZWRpKTsKKyAgICBfXyBtb3ZsX21yKEZJRUxEX09G
RlNFVChKU0Z1bmN0aW9uLCBtX3Njb3BlQ2hhaW4pICsgRklFTERfT0ZGU0VUKFNjb3BlQ2hhaW4s
IG1fbm9kZSksIFg4Njo6ZWN4LCBYODY6OmVkeCk7IC8vIG5ld1Njb3BlQ2hhaW4KKyAgICBfXyBt
b3ZsX2kzMm0oYXJnQ291bnQsIChyZWdpc3Rlck9mZnNldCArIFJlZ2lzdGVyRmlsZTo6QXJndW1l
bnRDb3VudCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6OmVkaSk7
CisgICAgX18gbW92bF9ybShYODY6OmVkaSwgKHJlZ2lzdGVyT2Zmc2V0ICsgUmVnaXN0ZXJGaWxl
OjpDYWxsZXJGcmFtZSkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6
OmVkaSk7CisgICAgX18gbW92bF9ybShYODY6OmVkeCwgKHJlZ2lzdGVyT2Zmc2V0ICsgUmVnaXN0
ZXJGaWxlOjpTY29wZUNoYWluKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSks
IFg4Njo6ZWRpKTsKKyAgICBfXyBhZGRsX2kzMnIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVn
aXN0ZXIpLCBYODY6OmVkaSk7CiAKLSAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRo
ZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRv
IGRlc3QgZm9yIHVzLgotICAgIGludHB0cl90IHN1Y2Nlc3NEZXN0ID0gcmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRQcm9w
ZXJ0eU1hcE9mZnNldDsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgc3VjY2VzcywgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oc3VjY2Vzc0Rlc3QpKTsKKyAgICAvLyBDYWxsIHRvIHRoZSBj
YWxsZWUKKyAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5m
b0luZGV4XS5ob3RQYXRoT3RoZXIgPSBlbWl0TmFrZWRDYWxsKGksIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHVucmVhY2hhYmxlKSk7CisgICAgCisgICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxf
ZXZhbCkKKyAgICAgICAgX18gbGluayh3YXNFdmFsLCBfXyBsYWJlbCgpKTsKIAotICAgIC8vIFRy
YWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBs
YXRlci4KLSAgICBtX2NvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcykuc3R1YlJv
dXRpbmUgPSBjb2RlOworICAgIC8vIFB1dCB0aGUgcmV0dXJuIHZhbHVlIGluIGRzdC4gSW4gdGhl
IGludGVycHJldGVyLCBvcF9yZXQgZG9lcyB0aGlzLgorICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIAotICAgIC8vIEZpbmFsbHkgcmVwYXRjaCB0aGUganVtcCB0byBzb3cgY2FzZSBi
YWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KLSAgICBpbnRwdHJfdCBq
bXBMb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2lu
KSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZTsKLSAgICBYODZBc3NlbWJs
ZXI6OnJlcGF0Y2hCcmFuY2hPZmZzZXQoam1wTG9jYXRpb24sIGNvZGUpOworI2lmIEVOQUJMRShD
T0RFQkxPQ0tfU0FNUExJTkcpCisgICAgICAgIF9fIG1vdmxfaTMybShyZWludGVycHJldF9jYXN0
PHVuc2lnbmVkPihtX2NvZGVCbG9jayksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+Y29kZUJs
b2NrU2xvdCgpKTsKKyNlbmRpZgogfQogCi12b2lkIEpJVDo6ZW1pdEdldFZhcmlhYmxlT2JqZWN0
UmVnaXN0ZXIoUmVnaXN0ZXJJRCB2YXJpYWJsZU9iamVjdCwgaW50IGluZGV4LCBSZWdpc3RlcklE
IGRzdCkKK3ZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCB1bnNpZ25lZCBpLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCwgT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7Ci0gICAg
X18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNWYXJpYWJsZU9iamVjdCwgZCksIHZhcmlhYmxlT2Jq
ZWN0LCBkc3QpOwotICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTVmFyaWFibGVPYmplY3Q6
OkpTVmFyaWFibGVPYmplY3REYXRhLCByZWdpc3RlcnMpLCBkc3QsIGRzdCk7Ci0gICAgX18gbW92
bF9tcihpbmRleCAqIHNpemVvZihSZWdpc3RlciksIGRzdCwgZHN0KTsKLX0KKyAgICBpbnQgZHN0
ID0gaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBjYWxsZWUgPSBpbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7CisgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOworICAgIGludCByZWdpc3Rlck9mZnNldCA9IGluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsK
IAotdm9pZCBKSVQ6OmVtaXRQdXRWYXJpYWJsZU9iamVjdFJlZ2lzdGVyKFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIHZhcmlhYmxlT2JqZWN0LCBpbnQgaW5kZXgpCi17Ci0gICAgX18gbW92bF9t
cihGSUVMRF9PRkZTRVQoSlNWYXJpYWJsZU9iamVjdCwgZCksIHZhcmlhYmxlT2JqZWN0LCB2YXJp
YWJsZU9iamVjdCk7Ci0gICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNWYXJpYWJsZU9iamVj
dDo6SlNWYXJpYWJsZU9iamVjdERhdGEsIHJlZ2lzdGVycyksIHZhcmlhYmxlT2JqZWN0LCB2YXJp
YWJsZU9iamVjdCk7Ci0gICAgX18gbW92bF9ybShzcmMsIGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVy
KSwgdmFyaWFibGVPYmplY3QpOworICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7
CisKKyAgICAvLyBUaGUgYXJndW1lbnRzIGhhdmUgYmVlbiBzZXQgdXAgb24gdGhlIGhvdCBwYXRo
IGZvciBvcF9jYWxsX2V2YWwKKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbCkKKyAgICAgICAg
Y29tcGlsZU9wQ2FsbFNldHVwQXJncyhpbnN0cnVjdGlvbik7CisgICAgZWxzZSBpZiAob3Bjb2Rl
SUQgPT0gb3BfY29uc3RydWN0KQorICAgICAgICBjb21waWxlT3BDb25zdHJ1Y3RTZXR1cEFyZ3Mo
aW5zdHJ1Y3Rpb24pOworCisgICAgLy8gRmFzdCBjaGVjayBmb3IgSlMgZnVuY3Rpb24uCisgICAg
X18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplY3gpOworICAgIEptcFNy
YyBjYWxsTGlua0ZhaWxOb3RPYmplY3QgPSBfXyBqbmUoKTsKKyAgICBfXyBjbXBsX2kzMm0ocmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9pbnRlcnByZXRlci0+bV9qc0Z1bmN0aW9uVnB0ciks
IFg4Njo6ZWN4KTsKKyAgICBKbXBTcmMgY2FsbExpbmtGYWlsTm90SlNGdW5jdGlvbiA9IF9fIGpu
ZSgpOworCisgICAgLy8gRmlyc3QsIGluIHRoZSBjYXNlIG9mIGEgY29uc3RydWN0LCBhbGxvY2F0
ZSB0aGUgbmV3IG9iamVjdC4KKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0KSB7Cisg
ICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfY29uc3RydWN0X0pTQ29u
c3RydWN0KTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCAt
IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGFyZ0NvdW50KTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIFg4Njo6ZWN4LCBpKTsKKyAgICB9CisKKyAg
ICBfXyBtb3ZsX2kzMnIoYXJnQ291bnQsIFg4Njo6ZWR4KTsKKworICAgIC8vIFNwZWN1bGF0aXZl
bHkgcm9sbCB0aGUgY2FsbGZyYW1lLCBhc3N1bWluZyBhcmdDb3VudCB3aWxsIG1hdGNoIHRoZSBh
cml0eS4KKyAgICBfXyBtb3ZsX3JtKFg4Njo6ZWRpLCAoUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFt
ZSArIHJlZ2lzdGVyT2Zmc2V0KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSks
IFg4Njo6ZWRpKTsKKyAgICBfXyBhZGRsX2kzMnIocmVnaXN0ZXJPZmZzZXQgKiBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6OmVkaSk7CisKKyAgICBtX2NhbGxTdHJ1Y3R1
cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRp
b24gPQorICAgICAgICBlbWl0TmFrZWRDYWxsKGksIG1faW50ZXJwcmV0ZXItPm1fY3RpVmlydHVh
bENhbGxQcmVMaW5rKTsKKworICAgIEptcFNyYyBzdG9yZVJlc3VsdEZvckZpcnN0UnVuID0gX18g
am1wKCk7CisKKyAgICAvLyBUaGlzIGlzIHRoZSBhZGRyZXNzIGZvciB0aGUgY29sZCBwYXRoICph
ZnRlciogdGhlIGZpcnN0IHJ1biAod2hpY2ggdHJpZXMgdG8gbGluayB0aGUgY2FsbCkuCisgICAg
bV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY29s
ZFBhdGhPdGhlciA9IF9fIGxhYmVsKCk7CisKKyAgICAvLyBUaGUgYXJndW1lbnRzIGhhdmUgYmVl
biBzZXQgdXAgb24gdGhlIGhvdCBwYXRoIGZvciBvcF9jYWxsX2V2YWwKKyAgICBpZiAob3Bjb2Rl
SUQgPT0gb3BfY2FsbCkKKyAgICAgICAgY29tcGlsZU9wQ2FsbFNldHVwQXJncyhpbnN0cnVjdGlv
bik7CisgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0KQorICAgICAgICBjb21w
aWxlT3BDb25zdHJ1Y3RTZXR1cEFyZ3MoaW5zdHJ1Y3Rpb24pOworCisgICAgLy8gQ2hlY2sgZm9y
IEpTRnVuY3Rpb25zLgorICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4
Njo6ZWN4KTsKKyAgICBKbXBTcmMgaXNOb3RPYmplY3QgPSBfXyBqbmUoKTsKKyAgICBfXyBjbXBs
X2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9pbnRlcnByZXRlci0+bV9qc0Z1bmN0
aW9uVnB0ciksIFg4Njo6ZWN4KTsKKyAgICBKbXBTcmMgaXNKU0Z1bmN0aW9uID0gX18gamUoKTsK
KworICAgIC8vIFRoaXMgaGFuZGxlcyBob3N0IGZ1bmN0aW9ucworICAgIEptcERzdCBub3RKU0Z1
bmN0aW9ubGFiZWwgPSBfXyBsYWJlbCgpOworICAgIF9fIGxpbmsoaXNOb3RPYmplY3QsIG5vdEpT
RnVuY3Rpb25sYWJlbCk7CisgICAgX18gbGluayhjYWxsTGlua0ZhaWxOb3RPYmplY3QsIG5vdEpT
RnVuY3Rpb25sYWJlbCk7CisgICAgX18gbGluayhjYWxsTGlua0ZhaWxOb3RKU0Z1bmN0aW9uLCBu
b3RKU0Z1bmN0aW9ubGFiZWwpOworICAgIGVtaXRDVElDYWxsKGksICgob3Bjb2RlSUQgPT0gb3Bf
Y29uc3RydWN0KSA/IEludGVycHJldGVyOjpjdGlfb3BfY29uc3RydWN0X05vdEpTQ29uc3RydWN0
IDogSW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX05vdEpTRnVuY3Rpb24pKTsKKyAgICBKbXBTcmMg
d2FzTm90SlNGdW5jdGlvbiA9IF9fIGptcCgpOworCisgICAgLy8gTmV4dCwgaGFuZGxlIEpTRnVu
Y3Rpb25zLi4uCisgICAgX18gbGluayhpc0pTRnVuY3Rpb24sIF9fIGxhYmVsKCkpOworCisgICAg
Ly8gRmlyc3QsIGluIHRoZSBjYXNlIG9mIGEgY29uc3RydWN0LCBhbGxvY2F0ZSB0aGUgbmV3IG9i
amVjdC4KKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0KSB7CisgICAgICAgIGVtaXRD
VElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfY29uc3RydWN0X0pTQ29uc3RydWN0KTsKKyAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCAtIFJlZ2lzdGVyRmls
ZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGFyZ0NvdW50KTsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihjYWxsZWUsIFg4Njo6ZWN4LCBpKTsKKyAgICB9CisKKyAgICAvLyBTcGVjdWxh
dGl2ZWx5IHJvbGwgdGhlIGNhbGxmcmFtZSwgYXNzdW1pbmcgYXJnQ291bnQgd2lsbCBtYXRjaCB0
aGUgYXJpdHkuCisgICAgX18gbW92bF9ybShYODY6OmVkaSwgKFJlZ2lzdGVyRmlsZTo6Q2FsbGVy
RnJhbWUgKyByZWdpc3Rlck9mZnNldCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rl
cikpLCBYODY6OmVkaSk7CisgICAgX18gYWRkbF9pMzJyKHJlZ2lzdGVyT2Zmc2V0ICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkpOworICAgIF9fIG1vdmxfaTMy
cihhcmdDb3VudCwgWDg2OjplZHgpOworCisgICAgZW1pdE5ha2VkQ2FsbChpLCBtX2ludGVycHJl
dGVyLT5tX2N0aVZpcnR1YWxDYWxsKTsKKworICAgIC8vIFB1dCB0aGUgcmV0dXJuIHZhbHVlIGlu
IGRzdC4gSW4gdGhlIGludGVycHJldGVyLCBvcF9yZXQgZG9lcyB0aGlzLgorICAgIEptcERzdCBz
dG9yZVJlc3VsdCA9IF9fIGxhYmVsKCk7CisgICAgX18gbGluayh3YXNOb3RKU0Z1bmN0aW9uLCBz
dG9yZVJlc3VsdCk7CisgICAgX18gbGluayhzdG9yZVJlc3VsdEZvckZpcnN0UnVuLCBzdG9yZVJl
c3VsdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisjaWYgRU5BQkxFKENP
REVCTE9DS19TQU1QTElORykKKyAgICBfXyBtb3ZsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZD4obV9jb2RlQmxvY2spLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmNvZGVCbG9ja1Ns
b3QoKSk7CisjZW5kaWYKIH0KIAorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IGppdC9KSVRJbmxpbmVNZXRob2RzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gaml0L0pJVElubGluZU1ldGhvZHMuaAkocmV2aXNpb24gMzg5MjcpCShmcm9tIGppdC9K
SVQuY3BwOjM4OTI3KQorKysgaml0L0pJVElubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDM3NzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpJVC5oIgorCisjaWYgRU5B
QkxFKEpJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkpTQXJyYXkuaCIK
KyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNpbmNs
dWRlICJSZXN1bHRUeXBlLmgiCisjaW5jbHVkZSAiU2FtcGxpbmdUb29sLmgiCisKKyNpZm5kZWYg
TkRFQlVHCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNlbmRpZgorCisjZGVmaW5lIF9fIG1fYXNzZW1i
bGVyLiAKKworI2lmIFBMQVRGT1JNKFdJTikKKyN1bmRlZiBGSUVMRF9PRkZTRVQgLy8gRml4IGNv
bmZsaWN0IHdpdGggd2lubnQuaC4KKyNlbmRpZgorCisvLyBGSUVMRF9PRkZTRVQ6IExpa2UgdGhl
IEMrKyBvZmZzZXRvZiBtYWNybywgYnV0IHlvdSBjYW4gdXNlIGl0IHdpdGggY2xhc3Nlcy4KKy8v
IFRoZSBtYWdpYyBudW1iZXIgMHg0MDAwIGlzIGluc2lnbmlmaWNhbnQuIFdlIHVzZSBpdCB0byBh
dm9pZCB1c2luZyBOVUxMLCBzaW5jZQorLy8gTlVMTCBjYW4gY2F1c2UgY29tcGlsZXIgcHJvYmxl
bXMsIGVzcGVjaWFsbHkgaW4gY2FzZXMgb2YgbXVsdGlwbGUgaW5oZXJpdGFuY2UuCisjZGVmaW5l
IEZJRUxEX09GRlNFVChjbGFzcywgZmllbGQpIChyZWludGVycHJldF9jYXN0PHB0cmRpZmZfdD4o
JihyZWludGVycHJldF9jYXN0PGNsYXNzKj4oMHg0MDAwKS0+ZmllbGQpKSAtIDB4NDAwMCkKKwor
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgWDg2QXNz
ZW1ibGVyOjpKbXBTcmMgSm1wU3JjOworCisjaWYgUExBVEZPUk0oTUFDKQorCitzdGF0aWMgaW5s
aW5lIGJvb2wgaXNTU0UyUHJlc2VudCgpCit7CisgICAgcmV0dXJuIHRydWU7IC8vIEFsbCBYODYg
TWFjcyBhcmUgZ3VhcmFudGVlZCB0byBzdXBwb3J0IGF0IGxlYXN0IFNTRTIKK30KKworI2Vsc2UK
Kworc3RhdGljIGJvb2wgaXNTU0UyUHJlc2VudCgpCit7CisgICAgc3RhdGljIGNvbnN0IGludCBT
U0UyRmVhdHVyZUJpdCA9IDEgPDwgMjY7CisgICAgc3RydWN0IFNTRTJDaGVjayB7CisgICAgICAg
IFNTRTJDaGVjaygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBmbGFnczsKKyNpZiBDT01Q
SUxFUihNU1ZDKQorICAgICAgICAgICAgX2FzbSB7CisgICAgICAgICAgICAgICAgbW92IGVheCwg
MSAvLyBjcHVpZCBmdW5jdGlvbiAxIGdpdmVzIHVzIHRoZSBzdGFuZGFyZCBmZWF0dXJlIHNldAor
ICAgICAgICAgICAgICAgIGNwdWlkOworICAgICAgICAgICAgICAgIG1vdiBmbGFncywgZWR4Owor
ICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgIGZsYWdzID0gMDsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBBZGQgR0NDIGNvZGUgdG8gZG8gYWJvdmUgYXNtCisjZW5kaWYKKyAgICAgICAg
ICAgIHByZXNlbnQgPSAoZmxhZ3MgJiBTU0UyRmVhdHVyZUJpdCkgIT0gMDsKKyAgICAgICAgfQor
ICAgICAgICBib29sIHByZXNlbnQ7CisgICAgfTsKKyAgICBzdGF0aWMgU1NFMkNoZWNrIGNoZWNr
OworICAgIHJldHVybiBjaGVjay5wcmVzZW50OworfQorCisjZW5kaWYKKworQ09NUElMRV9BU1NF
UlQoQ1RJX0FSR1NfY29kZSA9PSAweEMsIENUSV9BUkdTX2NvZGVfaXNfQyk7CitDT01QSUxFX0FT
U0VSVChDVElfQVJHU19jYWxsRnJhbWUgPT0gMHhFLCBDVElfQVJHU19jYWxsRnJhbWVfaXNfRSk7
CisKKyNpZiBDT01QSUxFUihHQ0MpICYmIFBMQVRGT1JNKFg4NikKKworI2lmIFBMQVRGT1JNKERB
UldJTikKKyNkZWZpbmUgU1lNQk9MX1NUUklORyhuYW1lKSAiXyIgI25hbWUKKyNlbHNlCisjZGVm
aW5lIFNZTUJPTF9TVFJJTkcobmFtZSkgI25hbWUKKyNlbmRpZgorCithc20oCisiLmdsb2JsICIg
U1lNQk9MX1NUUklORyhjdGlUcmFtcG9saW5lKSAiXG4iCitTWU1CT0xfU1RSSU5HKGN0aVRyYW1w
b2xpbmUpICI6IiAiXG4iCisgICAgInB1c2hsICVlc2kiICJcbiIKKyAgICAicHVzaGwgJWVkaSIg
IlxuIgorICAgICJwdXNobCAlZWJ4IiAiXG4iCisgICAgInN1YmwgJDB4MjAsICVlc3AiICJcbiIK
KyAgICAibW92bCAkNTEyLCAlZXNpIiAiXG4iCisgICAgIm1vdmwgMHgzOCglZXNwKSwgJWVkaSIg
IlxuIiAvLyBPeDM4ID0gMHgwRSAqIDQsIDB4MEUgPSBDVElfQVJHU19jYWxsRnJhbWUgKHNlZSBh
c3NlcnRpb24gYWJvdmUpCisgICAgImNhbGwgKjB4MzAoJWVzcCkiICJcbiIgLy8gT3gzMCA9IDB4
MEMgKiA0LCAweDBDID0gQ1RJX0FSR1NfY29kZSAoc2VlIGFzc2VydGlvbiBhYm92ZSkKKyAgICAi
YWRkbCAkMHgyMCwgJWVzcCIgIlxuIgorICAgICJwb3BsICVlYngiICJcbiIKKyAgICAicG9wbCAl
ZWRpIiAiXG4iCisgICAgInBvcGwgJWVzaSIgIlxuIgorICAgICJyZXQiICJcbiIKKyk7CisKK2Fz
bSgKKyIuZ2xvYmwgIiBTWU1CT0xfU1RSSU5HKGN0aVZNVGhyb3dUcmFtcG9saW5lKSAiXG4iCitT
WU1CT0xfU1RSSU5HKGN0aVZNVGhyb3dUcmFtcG9saW5lKSAiOiIgIlxuIgorI2lmIFVTRShDVElf
QVJHVU1FTlQpCisjaWYgVVNFKEZBU1RfQ0FMTF9DVElfQVJHVU1FTlQpCisgICAgIm1vdmwgJWVz
cCwgJWVjeCIgIlxuIgorI2Vsc2UKKyAgICAibW92bCAlZXNwLCAwKCVlc3ApIiAiXG4iCisjZW5k
aWYKKyAgICAiY2FsbCAiIFNZTUJPTF9TVFJJTkcoX1pOM0pTQzExSW50ZXJwcmV0ZXIxMmN0aV92
bV90aHJvd0VQUHYpICJcbiIKKyNlbHNlCisgICAgImNhbGwgIiBTWU1CT0xfU1RSSU5HKF9aTjNK
U0MxMUludGVycHJldGVyMTJjdGlfdm1fdGhyb3dFUHZ6KSAiXG4iCisjZW5kaWYKKyAgICAiYWRk
bCAkMHgyMCwgJWVzcCIgIlxuIgorICAgICJwb3BsICVlYngiICJcbiIKKyAgICAicG9wbCAlZWRp
IiAiXG4iCisgICAgInBvcGwgJWVzaSIgIlxuIgorICAgICJyZXQiICJcbiIKKyk7CisgICAgCisj
ZWxpZiBDT01QSUxFUihNU1ZDKQorCitleHRlcm4gIkMiIHsKKyAgICAKKyAgICBfX2RlY2xzcGVj
KG5ha2VkKSBKU1ZhbHVlKiBjdGlUcmFtcG9saW5lKHZvaWQqIGNvZGUsIFJlZ2lzdGVyRmlsZSos
IENhbGxGcmFtZSosIEpTVmFsdWUqKiBleGNlcHRpb24sIFByb2ZpbGVyKiosIEpTR2xvYmFsRGF0
YSopCisgICAgeworICAgICAgICBfX2FzbSB7CisgICAgICAgICAgICBwdXNoIGVzaTsKKyAgICAg
ICAgICAgIHB1c2ggZWRpOworICAgICAgICAgICAgcHVzaCBlYng7CisgICAgICAgICAgICBzdWIg
ZXNwLCAweDIwOworICAgICAgICAgICAgbW92IGVzaSwgNTEyOworICAgICAgICAgICAgbW92IGVj
eCwgZXNwOworICAgICAgICAgICAgbW92IGVkaSwgW2VzcCArIDB4MzhdOworICAgICAgICAgICAg
Y2FsbCBbZXNwICsgMHgzMF07IC8vIE94MzAgPSAweDBDICogNCwgMHgwQyA9IENUSV9BUkdTX2Nv
ZGUgKHNlZSBhc3NlcnRpb24gYWJvdmUpCisgICAgICAgICAgICBhZGQgZXNwLCAweDIwOworICAg
ICAgICAgICAgcG9wIGVieDsKKyAgICAgICAgICAgIHBvcCBlZGk7CisgICAgICAgICAgICBwb3Ag
ZXNpOworICAgICAgICAgICAgcmV0OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIF9fZGVj
bHNwZWMobmFrZWQpIHZvaWQgY3RpVk1UaHJvd1RyYW1wb2xpbmUoKQorICAgIHsKKyAgICAgICAg
X19hc20geworICAgICAgICAgICAgbW92IGVjeCwgZXNwOworICAgICAgICAgICAgY2FsbCBKU0M6
OkludGVycHJldGVyOjpjdGlfdm1fdGhyb3c7CisgICAgICAgICAgICBhZGQgZXNwLCAweDIwOwor
ICAgICAgICAgICAgcG9wIGVieDsKKyAgICAgICAgICAgIHBvcCBlZGk7CisgICAgICAgICAgICBw
b3AgZXNpOworICAgICAgICAgICAgcmV0OworICAgICAgICB9CisgICAgfQorICAgIAorfQorCisj
ZW5kaWYKKworc3RhdGljIEFMV0FZU19JTkxJTkUgdWludHB0cl90IGFzSW50ZWdlcihKU1ZhbHVl
KiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHZhbHVl
KTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6a2lsbExhc3RSZXN1bHRSZWdpc3Rlcigp
Cit7CisgICAgbV9sYXN0UmVzdWx0Qnl0ZWNvZGVSZWdpc3RlciA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWF4KCk7Cit9CisKKy8vIGdldCBhcmcgcHV0cyBhbiBhcmcgZnJvbSB0aGUgU0Yg
cmVnaXN0ZXIgYXJyYXkgaW50byBhIGgvdyByZWdpc3RlcgorQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCwgdW5zaWdu
ZWQgY3VycmVudEluc3RydWN0aW9uSW5kZXgpCit7CisgICAgLy8gVE9ETzogd2Ugd2FudCB0byBy
ZXVzZSB2YWx1ZXMgdGhhdCBhcmUgYWxyZWFkeSBpbiByZWdpc3RlcnMgaWYgd2UgY2FuIC0gYWRk
IGEgcmVnaXN0ZXIgYWxsb2NhdG9yIQorICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJl
Z2lzdGVySW5kZXgoc3JjKSkgeworICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChzcmMpOworICAgICAgICBfXyBtb3ZsX2kzMnIoYXNJbnRlZ2VyKHZhbHVl
KSwgZHN0KTsKKyAgICAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKHNyYyA9PSBtX2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lzdGVy
ICYmIG1fY29kZUJsb2NrLT5pc1RlbXBvcmFyeVJlZ2lzdGVySW5kZXgoc3JjKSkgeworICAgICAg
ICBib29sIGF0SnVtcFRhcmdldCA9IGZhbHNlOworICAgICAgICB3aGlsZSAobV9qdW1wVGFyZ2V0
c1Bvc2l0aW9uIDwgbV9jb2RlQmxvY2stPmp1bXBUYXJnZXRzLnNpemUoKSAmJiBtX2NvZGVCbG9j
ay0+anVtcFRhcmdldHNbbV9qdW1wVGFyZ2V0c1Bvc2l0aW9uXSA8PSBjdXJyZW50SW5zdHJ1Y3Rp
b25JbmRleCkgeworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5qdW1wVGFyZ2V0c1ttX2p1
bXBUYXJnZXRzUG9zaXRpb25dID09IGN1cnJlbnRJbnN0cnVjdGlvbkluZGV4KQorICAgICAgICAg
ICAgICAgIGF0SnVtcFRhcmdldCA9IHRydWU7CisgICAgICAgICAgICArK21fanVtcFRhcmdldHNQ
b3NpdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghYXRKdW1wVGFyZ2V0KSB7CisgICAg
ICAgICAgICAvLyBUaGUgYXJndW1lbnQgd2Ugd2FudCBpcyBhbHJlYWR5IHN0b3JlZCBpbiBlYXgK
KyAgICAgICAgICAgIGlmIChkc3QgIT0gWDg2OjplYXgpCisgICAgICAgICAgICAgICAgX18gbW92
bF9ycihYODY6OmVheCwgZHN0KTsKKyAgICAgICAgICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIF9fIG1vdmxf
bXIoc3JjICogc2l6ZW9mKFJlZ2lzdGVyKSwgWDg2OjplZGksIGRzdCk7CisgICAga2lsbExhc3RS
ZXN1bHRSZWdpc3RlcigpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhpbnQgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBpbnQgc3JjMiwgUmVnaXN0
ZXJJRCBkc3QyLCB1bnNpZ25lZCBpKQoreworICAgIGlmIChzcmMyID09IG1fbGFzdFJlc3VsdEJ5
dGVjb2RlUmVnaXN0ZXIpIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBk
c3QyLCBpKTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBkc3QxLCBpKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIGRzdDEs
IGkpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIGRzdDIsIGkpOworICAg
IH0KK30KKworLy8gZ2V0IGFyZyBwdXRzIGFuIGFyZyBmcm9tIHRoZSBTRiByZWdpc3RlciBhcnJh
eSBvbnRvIHRoZSBzdGFjaywgYXMgYW4gYXJnIHRvIGEgY29udGV4dCB0aHJlYWRlZCBmdW5jdGlv
bi4KK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lz
dGVyKHVuc2lnbmVkIHNyYywgdW5zaWduZWQgb2Zmc2V0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCit7
CisgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKSB7Cisg
ICAgICAgIEpTVmFsdWUqIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNyYyk7Cisg
ICAgICAgIF9fIG1vdmxfaTMybShhc0ludGVnZXIodmFsdWUpLCBvZmZzZXQgKyBzaXplb2Yodm9p
ZCopLCBYODY6OmVzcCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgX18gbW92bF9tcihzcmMgKiBz
aXplb2YoUmVnaXN0ZXIpLCBYODY6OmVkaSwgc2NyYXRjaCk7CisgICAgICAgIF9fIG1vdmxfcm0o
c2NyYXRjaCwgb2Zmc2V0ICsgc2l6ZW9mKHZvaWQqKSwgWDg2Ojplc3ApOworICAgIH0KKworICAg
IGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKK30KKworLy8gcHV0cyBhbiBhcmcgb250byB0aGUg
c3RhY2ssIGFzIGFuIGFyZyB0byBhIGNvbnRleHQgdGhyZWFkZWQgZnVuY3Rpb24uCitBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0UHV0Q1RJQXJnKFJlZ2lzdGVySUQgc3JjLCB1bnNpZ25lZCBv
ZmZzZXQpCit7CisgICAgX18gbW92bF9ybShzcmMsIG9mZnNldCArIHNpemVvZih2b2lkKiksIFg4
Njo6ZXNwKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdldENUSUFyZyh1bnNp
Z25lZCBvZmZzZXQsIFJlZ2lzdGVySUQgZHN0KQoreworICAgIF9fIG1vdmxfbXIob2Zmc2V0ICsg
c2l6ZW9mKHZvaWQqKSwgWDg2Ojplc3AsIGRzdCk7Cit9CisKKworQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdFB1dENUSUFyZ0NvbnN0YW50KHVuc2lnbmVkIHZhbHVlLCB1bnNpZ25lZCBvZmZz
ZXQpCit7CisgICAgX18gbW92bF9pMzJtKHZhbHVlLCBvZmZzZXQgKyBzaXplb2Yodm9pZCopLCBY
ODY6OmVzcCk7Cit9CisKK0FMV0FZU19JTkxJTkUgSlNWYWx1ZSogSklUOjpnZXRDb25zdGFudElt
bWVkaWF0ZU51bWVyaWNBcmcodW5zaWduZWQgc3JjKQoreworICAgIGlmIChtX2NvZGVCbG9jay0+
aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkgeworICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9
IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAgICAgICByZXR1cm4gSlNJbW1lZGlh
dGU6OmlzTnVtYmVyKHZhbHVlKSA/IHZhbHVlIDogbm9WYWx1ZSgpOworICAgIH0KKyAgICByZXR1
cm4gbm9WYWx1ZSgpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0Q1RJUGFy
YW0odm9pZCogdmFsdWUsIHVuc2lnbmVkIG5hbWUpCit7CisgICAgX18gbW92bF9pMzJtKHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHZhbHVlKSwgbmFtZSAqIHNpemVvZih2b2lkKiksIFg4Njo6
ZXNwKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dENUSVBhcmFtKFJlZ2lz
dGVySUQgZnJvbSwgdW5zaWduZWQgbmFtZSkKK3sKKyAgICBfXyBtb3ZsX3JtKGZyb20sIG5hbWUg
KiBzaXplb2Yodm9pZCopLCBYODY6OmVzcCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRHZXRDVElQYXJhbSh1bnNpZ25lZCBuYW1lLCBSZWdpc3RlcklEIHRvKQoreworICAgIF9f
IG1vdmxfbXIobmFtZSAqIHNpemVvZih2b2lkKiksIFg4Njo6ZXNwLCB0byk7CisgICAga2lsbExh
c3RSZXN1bHRSZWdpc3RlcigpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0
VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBSZWdpc3RlckZpbGU6OkNhbGxGcmFt
ZUhlYWRlckVudHJ5IGVudHJ5KQoreworICAgIF9fIG1vdmxfcm0oZnJvbSwgZW50cnkgKiBzaXpl
b2YoUmVnaXN0ZXIpLCBYODY6OmVkaSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyRW50
cnkgZW50cnksIFJlZ2lzdGVySUQgdG8pCit7CisgICAgX18gbW92bF9tcihlbnRyeSAqIHNpemVv
ZihSZWdpc3RlciksIFg4Njo6ZWRpLCB0byk7CisgICAga2lsbExhc3RSZXN1bHRSZWdpc3Rlcigp
OworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHVu
c2lnbmVkIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQoreworICAgIF9fIG1vdmxfcm0oZnJvbSwgZHN0
ICogc2l6ZW9mKFJlZ2lzdGVyKSwgWDg2OjplZGkpOworICAgIG1fbGFzdFJlc3VsdEJ5dGVjb2Rl
UmVnaXN0ZXIgPSAoZnJvbSA9PSBYODY6OmVheCkgPyBkc3QgOiBzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpOworICAgIC8vIEZJWE1FOiAjaWZuZGVmIE5ERUJVRywgV3JpdGUgdGhlIGNv
cnJlY3QgbV90eXBlIHRvIHRoZSByZWdpc3Rlci4KK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdEluaXRSZWdpc3Rlcih1bnNpZ25lZCBkc3QpCit7CisgICAgX18gbW92bF9pMzJtKGFz
SW50ZWdlcihqc1VuZGVmaW5lZCgpKSwgZHN0ICogc2l6ZW9mKFJlZ2lzdGVyKSwgWDg2OjplZGkp
OworICAgIC8vIEZJWE1FOiAjaWZuZGVmIE5ERUJVRywgV3JpdGUgdGhlIGNvcnJlY3QgbV90eXBl
IHRvIHRoZSByZWdpc3Rlci4KK30KKwordm9pZCBjdGlTZXRSZXR1cm5BZGRyZXNzKHZvaWQqKiB3
aGVyZSwgdm9pZCogd2hhdCkKK3sKKyAgICAqd2hlcmUgPSB3aGF0OworfQorCit2b2lkIGN0aVJl
cGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHZvaWQqIHdoZXJlLCB2b2lkKiB3aGF0KQoreworICAg
IChzdGF0aWNfY2FzdDx2b2lkKio+KHdoZXJlKSlbLTFdID0gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHdoYXQpIC0gcmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KHdoZXJlKSk7Cit9CisKKyNpZm5kZWYgTkRFQlVHCisKK3ZvaWQgSklUOjpwcmlu
dEJ5dGVjb2RlT3BlcmFuZFR5cGVzKHVuc2lnbmVkIHNyYzEsIHVuc2lnbmVkIHNyYzIpCit7Cisg
ICAgY2hhciB3aGljaDEgPSAnKic7CisgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVn
aXN0ZXJJbmRleChzcmMxKSkgeworICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChzcmMxKTsKKyAgICAgICAgd2hpY2gxID0gCisgICAgICAgICAgICBKU0lt
bWVkaWF0ZTo6aXNJbW1lZGlhdGUodmFsdWUpID8KKyAgICAgICAgICAgICAgICAoSlNJbW1lZGlh
dGU6OmlzTnVtYmVyKHZhbHVlKSA/ICdpJyA6CisgICAgICAgICAgICAgICAgSlNJbW1lZGlhdGU6
OmlzQm9vbGVhbih2YWx1ZSkgPyAnYicgOgorICAgICAgICAgICAgICAgIHZhbHVlLT5pc1VuZGVm
aW5lZCgpID8gJ3UnIDoKKyAgICAgICAgICAgICAgICB2YWx1ZS0+aXNOdWxsKCkgPyAnbicgOiAn
PycpCisgICAgICAgICAgICAgICAgOgorICAgICAgICAgICAgKHZhbHVlLT5pc1N0cmluZygpID8g
J3MnIDoKKyAgICAgICAgICAgIHZhbHVlLT5pc09iamVjdCgpID8gJ28nIDoKKyAgICAgICAgICAg
ICdrJyk7CisgICAgfQorICAgIGNoYXIgd2hpY2gyID0gJyonOworICAgIGlmIChtX2NvZGVCbG9j
ay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjMikpIHsKKyAgICAgICAgSlNWYWx1ZSogdmFs
dWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoc3JjMik7CisgICAgICAgIHdoaWNoMiA9IAor
ICAgICAgICAgICAgSlNJbW1lZGlhdGU6OmlzSW1tZWRpYXRlKHZhbHVlKSA/CisgICAgICAgICAg
ICAgICAgKEpTSW1tZWRpYXRlOjppc051bWJlcih2YWx1ZSkgPyAnaScgOgorICAgICAgICAgICAg
ICAgIEpTSW1tZWRpYXRlOjppc0Jvb2xlYW4odmFsdWUpID8gJ2InIDoKKyAgICAgICAgICAgICAg
ICB2YWx1ZS0+aXNVbmRlZmluZWQoKSA/ICd1JyA6CisgICAgICAgICAgICAgICAgdmFsdWUtPmlz
TnVsbCgpID8gJ24nIDogJz8nKQorICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICh2YWx1
ZS0+aXNTdHJpbmcoKSA/ICdzJyA6CisgICAgICAgICAgICB2YWx1ZS0+aXNPYmplY3QoKSA/ICdv
JyA6CisgICAgICAgICAgICAnaycpOworICAgIH0KKyAgICBpZiAoKHdoaWNoMSAhPSAnKicpIHwg
KHdoaWNoMiAhPSAnKicpKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlR5cGVzICVjICVjXG4i
LCB3aGljaDEsIHdoaWNoMik7Cit9CisKKyNlbmRpZgorCitBTFdBWVNfSU5MSU5FIEptcFNyYyBK
SVQ6OmVtaXROYWtlZENhbGwodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgWDg2OjpSZWdpc3RlcklE
IHIpCit7CisgICAgSm1wU3JjIGNhbGwgPSBfXyBjYWxsKHIpOworICAgIG1fY2FsbHMuYXBwZW5k
KENhbGxSZWNvcmQoY2FsbCwgYnl0ZWNvZGVJbmRleCkpOworCisgICAgcmV0dXJuIGNhbGw7Cit9
CisKK0FMV0FZU19JTkxJTkUgIEptcFNyYyBKSVQ6OmVtaXROYWtlZENhbGwodW5zaWduZWQgYnl0
ZWNvZGVJbmRleCwgdm9pZCogZnVuY3Rpb24pCit7CisgICAgSm1wU3JjIGNhbGwgPSBfXyBjYWxs
KCk7CisgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCByZWludGVycHJldF9jYXN0
PENUSUhlbHBlcl92PihmdW5jdGlvbiksIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICByZXR1cm4gY2Fs
bDsKK30KKworQUxXQVlTX0lOTElORSBKbXBTcmMgSklUOjplbWl0Q1RJQ2FsbCh1bnNpZ25lZCBi
eXRlY29kZUluZGV4LCBDVElIZWxwZXJfaiBoZWxwZXIpCit7CisjaWYgRU5BQkxFKE9QQ09ERV9T
QU1QTElORykKKyAgICBfXyBtb3ZsX2kzMm0obV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNv
ZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgYnl0ZWNvZGVJbmRl
eCwgdHJ1ZSksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKKyNlbmRp
ZgorICAgIF9fIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOworICAgIGVtaXRQdXRDVElQYXJh
bShYODY6OmVkaSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKKyAgICBKbXBTcmMgY2FsbCA9IF9fIGNh
bGwoKTsKKyAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIGhlbHBlciwgYnl0ZWNv
ZGVJbmRleCkpOworI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCisgICAgX18gbW92bF9pMzJt
KG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXgsIGZhbHNlKSwgbV9pbnRlcnByZXRlci0+
c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpOworI2VuZGlmCisgICAga2lsbExhc3RSZXN1bHRSZWdp
c3RlcigpOworCisgICAgcmV0dXJuIGNhbGw7Cit9CisKK0FMV0FZU19JTkxJTkUgSm1wU3JjIEpJ
VDo6ZW1pdENUSUNhbGwodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ1RJSGVscGVyX28gaGVscGVy
KQoreworI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCisgICAgX18gbW92bF9pMzJtKG1faW50
ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXgsIHRydWUpLCBtX2ludGVycHJldGVyLT5zYW1wbGVy
KCktPnNhbXBsZVNsb3QoKSk7CisjZW5kaWYKKyAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVu
Y2UoKTsKKyAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7
CisgICAgSm1wU3JjIGNhbGwgPSBfXyBjYWxsKCk7CisgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJl
Y29yZChjYWxsLCBoZWxwZXIsIGJ5dGVjb2RlSW5kZXgpKTsKKyNpZiBFTkFCTEUoT1BDT0RFX1NB
TVBMSU5HKQorICAgIF9fIG1vdmxfaTMybShtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29k
ZVNhbXBsZShtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29kZUluZGV4
LCBmYWxzZSksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKKyNlbmRp
ZgorICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKKworICAgIHJldHVybiBjYWxsOworfQor
CitBTFdBWVNfSU5MSU5FIEptcFNyYyBKSVQ6OmVtaXRDVElDYWxsKHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgsIENUSUhlbHBlcl9wIGhlbHBlcikKK3sKKyNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5H
KQorICAgIF9fIG1vdmxfaTMybShtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBs
ZShtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29kZUluZGV4LCB0cnVl
KSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpOworI2VuZGlmCisgICAg
X18gcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CisgICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6
ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOworICAgIEptcFNyYyBjYWxsID0gX18gY2FsbCgpOwor
ICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwgaGVscGVyLCBieXRlY29kZUluZGV4
KSk7CisjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKKyAgICBfXyBtb3ZsX2kzMm0obV9pbnRl
cnByZXRlci0+c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9u
cy5iZWdpbigpICsgYnl0ZWNvZGVJbmRleCwgZmFsc2UpLCBtX2ludGVycHJldGVyLT5zYW1wbGVy
KCktPnNhbXBsZVNsb3QoKSk7CisjZW5kaWYKKyAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7
CisKKyAgICByZXR1cm4gY2FsbDsKK30KKworQUxXQVlTX0lOTElORSBKbXBTcmMgSklUOjplbWl0
Q1RJQ2FsbCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDVElIZWxwZXJfYiBoZWxwZXIpCit7Cisj
aWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKKyAgICBfXyBtb3ZsX2kzMm0obV9pbnRlcnByZXRl
ci0+c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdp
bigpICsgYnl0ZWNvZGVJbmRleCwgdHJ1ZSksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2Ft
cGxlU2xvdCgpKTsKKyNlbmRpZgorICAgIF9fIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwor
ICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKKyAgICBK
bXBTcmMgY2FsbCA9IF9fIGNhbGwoKTsKKyAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNh
bGwsIGhlbHBlciwgYnl0ZWNvZGVJbmRleCkpOworI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcp
CisgICAgX18gbW92bF9pMzJtKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxl
KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXgsIGZhbHNl
KSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpOworI2VuZGlmCisgICAg
a2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOworCisgICAgcmV0dXJuIGNhbGw7Cit9CisKK0FMV0FZ
U19JTkxJTkUgSm1wU3JjIEpJVDo6ZW1pdENUSUNhbGwodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwg
Q1RJSGVscGVyX3YgaGVscGVyKQoreworI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCisgICAg
X18gbW92bF9pMzJtKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXgsIHRydWUpLCBtX2lu
dGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7CisjZW5kaWYKKyAgICBfXyByZXN0
b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKKyAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENU
SV9BUkdTX2NhbGxGcmFtZSk7CisgICAgSm1wU3JjIGNhbGwgPSBfXyBjYWxsKCk7CisgICAgbV9j
YWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBoZWxwZXIsIGJ5dGVjb2RlSW5kZXgpKTsKKyNp
ZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQorICAgIF9fIG1vdmxfaTMybShtX2ludGVycHJldGVy
LT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2lu
KCkgKyBieXRlY29kZUluZGV4LCBmYWxzZSksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2Ft
cGxlU2xvdCgpKTsKKyNlbmRpZgorICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKKworICAg
IHJldHVybiBjYWxsOworfQorCitBTFdBWVNfSU5MSU5FIEptcFNyYyBKSVQ6OmVtaXRDVElDYWxs
KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIENUSUhlbHBlcl9zIGhlbHBlcikKK3sKKyNpZiBFTkFC
TEUoT1BDT0RFX1NBTVBMSU5HKQorICAgIF9fIG1vdmxfaTMybShtX2ludGVycHJldGVyLT5zYW1w
bGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBi
eXRlY29kZUluZGV4LCB0cnVlKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90
KCkpOworI2VuZGlmCisgICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CisgICAgZW1p
dFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOworICAgIEptcFNyYyBj
YWxsID0gX18gY2FsbCgpOworICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwgaGVs
cGVyLCBieXRlY29kZUluZGV4KSk7CisjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKKyAgICBf
XyBtb3ZsX2kzMm0obV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2Rl
QmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgYnl0ZWNvZGVJbmRleCwgZmFsc2UpLCBtX2lu
dGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7CisjZW5kaWYKKyAgICBraWxsTGFz
dFJlc3VsdFJlZ2lzdGVyKCk7CisKKyAgICByZXR1cm4gY2FsbDsKK30KKworQUxXQVlTX0lOTElO
RSBKbXBTcmMgSklUOjplbWl0Q1RJQ2FsbCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDVElIZWxw
ZXJfMiBoZWxwZXIpCit7CisjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKKyAgICBfXyBtb3Zs
X2kzMm0obV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucy5iZWdpbigpICsgYnl0ZWNvZGVJbmRleCwgdHJ1ZSksIG1faW50ZXJwcmV0
ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKKyNlbmRpZgorICAgIF9fIHJlc3RvcmVBcmd1
bWVudFJlZmVyZW5jZSgpOworICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJX0FSR1Nf
Y2FsbEZyYW1lKTsKKyAgICBKbXBTcmMgY2FsbCA9IF9fIGNhbGwoKTsKKyAgICBtX2NhbGxzLmFw
cGVuZChDYWxsUmVjb3JkKGNhbGwsIGhlbHBlciwgYnl0ZWNvZGVJbmRleCkpOworI2lmIEVOQUJM
RShPUENPREVfU0FNUExJTkcpCisgICAgX18gbW92bF9pMzJtKG1faW50ZXJwcmV0ZXItPnNhbXBs
ZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIGJ5
dGVjb2RlSW5kZXgsIGZhbHNlKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90
KCkpOworI2VuZGlmCisgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOworCisgICAgcmV0dXJu
IGNhbGw7Cit9CisKK0ptcFNyYyBKSVQ6OmNoZWNrU3RydWN0dXJlKFJlZ2lzdGVySUQgcmVnLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdD4oc3RydWN0dXJlKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUp
LCByZWcpOworICAgIHJldHVybiBfXyBqbmUoKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4KQoreworICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ss
IHJlZyk7CisgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGJ5
dGVjb2RlSW5kZXgpKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBp
bnQgdlJlZykKK3sKKyAgICBpZiAobV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodlJl
ZykpCisgICAgICAgIHJldHVybjsKKworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChy
ZWcsIGJ5dGVjb2RlSW5kZXgpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjpsaW5rU2xv
d0Nhc2VJZk5vdEpTQ2VsbChjb25zdCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyLCBpbnQgdlJlZykKK3sKKyAgICBpZiAobV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlh
dGUodlJlZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBfXyBsaW5rKGl0ZXIt
PmZyb20sIF9fIGxhYmVsKCkpOworICAgIHJldHVybiB0cnVlOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oUmVnaXN0ZXJJRCByZWcsIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgpCit7CisgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6
VGFnQml0VHlwZUludGVnZXIsIHJlZyk7CisgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoX18gamUoKSwgYnl0ZWNvZGVJbmRleCkpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQg
SklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW1zKFJlZ2lzdGVySUQgcmVnMSwgUmVnaXN0
ZXJJRCByZWcyLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQoreworICAgIF9fIG1vdmxfcnIocmVn
MSwgWDg2OjplY3gpOworICAgIF9fIGFuZGxfcnIocmVnMiwgWDg2OjplY3gpOworICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVjeCwgYnl0ZWNvZGVJbmRleCk7Cit9CisKK0FM
V0FZU19JTkxJTkUgdW5zaWduZWQgSklUOjpnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKEpT
VmFsdWUqIGltbSkKK3sKKyAgICBBU1NFUlQoSlNJbW1lZGlhdGU6OmlzTnVtYmVyKGltbSkpOwor
ICAgIHJldHVybiBhc0ludGVnZXIoaW1tKSAmIH5KU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVn
ZXI7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVk
aWF0ZShSZWdpc3RlcklEIHJlZykKK3sKKyAgICBfXyBzdWJsX2k4cihKU0ltbWVkaWF0ZTo6VGFn
Qml0VHlwZUludGVnZXIsIHJlZyk7Cit9CisKK0FMV0FZU19JTkxJTkUgSm1wU3JjIEpJVDo6ZW1p
dEZhc3RBcml0aERlVGFnSW1tZWRpYXRlSnVtcElmWmVybyhSZWdpc3RlcklEIHJlZykKK3sKKyAg
ICBfXyBzdWJsX2k4cihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIHJlZyk7CisgICAg
cmV0dXJuIF9fIGplKCk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRGYXN0QXJp
dGhSZVRhZ0ltbWVkaWF0ZShSZWdpc3RlcklEIHJlZykKK3sKKyAgICBfXyBhZGRsX2k4cihKU0lt
bWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIHJlZyk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OmVtaXRGYXN0QXJpdGhQb3RlbnRpYWxseVJlVGFnSW1tZWRpYXRlKFJlZ2lzdGVySUQg
cmVnKQoreworICAgIF9fIG9ybF9pOHIoSlNJbW1lZGlhdGU6OlRhZ0JpdFR5cGVJbnRlZ2VyLCBy
ZWcpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0RmFzdEFyaXRoSW1tVG9JbnQo
UmVnaXN0ZXJJRCByZWcpCit7CisgICAgX18gc2FybF9pOHIoMSwgcmVnKTsKK30KKworQUxXQVlT
X0lOTElORSB2b2lkIEpJVDo6ZW1pdEZhc3RBcml0aEludFRvSW1tT3JTbG93Q2FzZShSZWdpc3Rl
cklEIHJlZywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK3sKKyAgICBfXyBhZGRsX3JyKHJlZywg
cmVnKTsKKyAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbygpLCBieXRl
Y29kZUluZGV4KSk7CisgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKHJlZyk7Cit9CisK
K0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2soUmVn
aXN0ZXJJRCByZWcpCit7CisgICAgX18gYWRkbF9ycihyZWcsIHJlZyk7CisgICAgZW1pdEZhc3RB
cml0aFJlVGFnSW1tZWRpYXRlKHJlZyk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRUYWdBc0Jvb2xJbW1lZGlhdGUoUmVnaXN0ZXJJRCByZWcpCit7CisgICAgX18gc2hsX2k4cihK
U0ltbWVkaWF0ZTo6RXh0ZW5kZWRQYXlsb2FkU2hpZnQsIHJlZyk7CisgICAgX18gb3JsX2k4cihK
U0ltbWVkaWF0ZTo6RnVsbFRhZ1R5cGVCb29sLCByZWcpOworfQorCitKSVQ6OkpJVChKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIDogbV9pbnRlcnBy
ZXRlcihnbG9iYWxEYXRhLT5pbnRlcnByZXRlcikKKyAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxE
YXRhKQorICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgICwgbV9sYWJlbHMoY29kZUJs
b2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuc2l6ZSgpIDogMCkKKyAgICAsIG1fcHJvcGVy
dHlBY2Nlc3NDb21waWxhdGlvbkluZm8oY29kZUJsb2NrID8gY29kZUJsb2NrLT5wcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9ucy5zaXplKCkgOiAwKQorICAgICwgbV9jYWxsU3RydWN0dXJlU3R1YkNv
bXBpbGF0aW9uSW5mbyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmNhbGxMaW5rSW5mb3Muc2l6ZSgp
IDogMCkKKyAgICAsIG1fbGFzdFJlc3VsdEJ5dGVjb2RlUmVnaXN0ZXIoc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKSkKKyAgICAsIG1fanVtcFRhcmdldHNQb3NpdGlvbigwKQoreworfQor
CisjZGVmaW5lIENUSV9DT01QSUxFX0JJTkFSWV9PUChuYW1lKSBcCisgICAgY2FzZSBuYW1lOiB7
IFwKKyAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOyBcCisgICAgICAgIGVtaXRQdXRDVElBcmdG
cm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDQsIFg4Njo6
ZWN4KTsgXAorICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpXyMjbmFtZSk7
IFwKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5v
cGVyYW5kKTsgXAorICAgICAgICBpICs9IDQ7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisK
KyNkZWZpbmUgQ1RJX0NPTVBJTEVfVU5BUllfT1AobmFtZSkgXAorICAgIGNhc2UgbmFtZTogeyBc
CisgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsgXAorICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJ
bnRlcnByZXRlcjo6Y3RpXyMjbmFtZSk7IFwKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsgXAorICAgICAgICBpICs9IDM7IFwKKyAg
ICAgICAgYnJlYWs7IFwKKyAgICB9CisKK3N0YXRpYyB2b2lkIHVucmVhY2hhYmxlKCkKK3sKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBleGl0KDEpOworfQorCit2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbEluaXRpYWxpemVDYWxsRnJhbWUoKQoreworICAgIF9fIG1vdmxfcm0oWDg2Ojpl
ZHgsIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSksIFg4Njo6ZWRpKTsKKworICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpT
RnVuY3Rpb24sIG1fc2NvcGVDaGFpbikgKyBGSUVMRF9PRkZTRVQoU2NvcGVDaGFpbiwgbV9ub2Rl
KSwgWDg2OjplY3gsIFg4Njo6ZWR4KTsgLy8gbmV3U2NvcGVDaGFpbgorCisgICAgX18gbW92bF9p
MzJtKGFzSW50ZWdlcihub1ZhbHVlKCkpLCBSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJn
dW1lbnRzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkpOwor
ICAgIF9fIG1vdmxfcm0oWDg2OjplY3gsIFJlZ2lzdGVyRmlsZTo6Q2FsbGVlICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkpOworICAgIF9fIG1vdmxfcm0oWDg2
OjplZHgsIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbiAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSksIFg4Njo6ZWRpKTsKK30KKwordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTZXR1
cEFyZ3MoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGludCBhcmdDb3VudCA9IGlu
c3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBpbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQ7CisKKyAgICAvLyBlY3ggaG9sZHMgZnVuYworICAgIGVtaXRQdXRD
VElBcmcoWDg2OjplY3gsIDApOworICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWdpc3Rlck9m
ZnNldCwgNCk7CisgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGFyZ0NvdW50LCA4KTsKKyAgICBl
bWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaW5zdHJ1Y3Rp
b24pLCAxMik7Cit9CisKK3ZvaWQgSklUOjpjb21waWxlT3BDYWxsRXZhbFNldHVwQXJncyhJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOworICAgIGludCByZWdpc3Rlck9mZnNldCA9IGluc3RydWN0aW9uWzRdLnUu
b3BlcmFuZDsKKworICAgIC8vIGVjeCBob2xkcyBmdW5jCisgICAgZW1pdFB1dENUSUFyZyhYODY6
OmVjeCwgMCk7CisgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlZ2lzdGVyT2Zmc2V0LCA0KTsK
KyAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoYXJnQ291bnQsIDgpOworICAgIGVtaXRQdXRDVElB
cmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpbnN0cnVjdGlvbiksIDEyKTsK
K30KKwordm9pZCBKSVQ6OmNvbXBpbGVPcENvbnN0cnVjdFNldHVwQXJncyhJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOworICAgIGludCByZWdpc3Rlck9mZnNldCA9IGluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsK
KyAgICBpbnQgcHJvdG8gPSBpbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7CisgICAgaW50IHRoaXNS
ZWdpc3RlciA9IGluc3RydWN0aW9uWzZdLnUub3BlcmFuZDsKKworICAgIC8vIGVjeCBob2xkcyBm
dW5jCisgICAgZW1pdFB1dENUSUFyZyhYODY6OmVjeCwgMCk7CisgICAgZW1pdFB1dENUSUFyZ0Nv
bnN0YW50KHJlZ2lzdGVyT2Zmc2V0LCA0KTsKKyAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoYXJn
Q291bnQsIDgpOworICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHByb3RvLCAx
MiwgWDg2OjplYXgpOworICAgIGVtaXRQdXRDVElBcmdDb25zdGFudCh0aGlzUmVnaXN0ZXIsIDE2
KTsKKyAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4o
aW5zdHJ1Y3Rpb24pLCAyMCk7Cit9CisKK3ZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlE
IG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGksIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4KQoreworICAgIGludCBkc3QgPSBpbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7CisgICAgaW50IGNhbGxlZSA9IGluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBp
bnQgYXJnQ291bnQgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgaW50IHJlZ2lzdGVy
T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworCisgICAgLy8gSGFuZGxlIGV2YWwK
KyAgICBKbXBTcmMgd2FzRXZhbDsKKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKSB7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBYODY6OmVjeCwgaSk7Cisg
ICAgICAgIGNvbXBpbGVPcENhbGxFdmFsU2V0dXBBcmdzKGluc3RydWN0aW9uKTsKKworICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2NhbGxfZXZhbCk7CisgICAgICAg
IF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6OmltcG9zc2libGVWYWx1ZSgpKSwg
WDg2OjplYXgpOworICAgICAgICB3YXNFdmFsID0gX18gam5lKCk7CisgICAgfQorCisgICAgLy8g
VGhpcyBwbGFudHMgYSBjaGVjayBmb3IgYSBjYWNoZWQgSlNGdW5jdGlvbiB2YWx1ZSwgc28gd2Ug
Y2FuIHBsYW50IGEgZmFzdCBsaW5rIHRvIHRoZSBjYWxsZWUuCisgICAgLy8gVGhpcyBkZWxpYmVy
YXRlbHkgbGVhdmVzIHRoZSBjYWxsZWUgaW4gZWN4LCB1c2VkIHdoZW4gc2V0dGluZyB1cCB0aGUg
c3RhY2sgZnJhbWUgYmVsb3cKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgWDg2
OjplY3gsIGkpOworICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6OmltcG9z
c2libGVWYWx1ZSgpKSwgWDg2OjplY3gpOworICAgIEptcERzdCBhZGRyZXNzT2ZMaW5rZWRGdW5j
dGlvbkNoZWNrID0gX18gbGFiZWwoKTsKKyAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VF
bnRyeShfXyBqbmUoKSwgaSkpOworICAgIEFTU0VSVChYODZBc3NlbWJsZXI6OmdldERpZmZlcmVu
Y2VCZXR3ZWVuTGFiZWxzKGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIF9fIGxhYmVsKCkp
ID09IHJlcGF0Y2hPZmZzZXRPcENhbGxDYWxsKTsKKyAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZM
aW5rZWRGdW5jdGlvbkNoZWNrOworCisgICAgLy8gVGhlIGZvbGxvd2luZyBpcyB0aGUgZmFzdCBj
YXNlLCBvbmx5IHVzZWQgd2hhbiBhIGNhbGxlZSBjYW4gYmUgbGlua2VkLgorCisgICAgLy8gSW4g
dGhlIGNhc2Ugb2YgT3BDb25zdHJ1Y3QsIGNhbGwgb3V0IHRvIGEgY3RpXyBmdW5jdGlvbiB0byBj
cmVhdGUgdGhlIG5ldyBvYmplY3QuCisgICAgaWYgKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCkg
eworICAgICAgICBpbnQgcHJvdG8gPSBpbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7CisgICAgICAg
IGludCB0aGlzUmVnaXN0ZXIgPSBpbnN0cnVjdGlvbls2XS51Lm9wZXJhbmQ7CisKKyAgICAgICAg
ZW1pdFB1dENUSUFyZyhYODY6OmVjeCwgMCk7CisgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmly
dHVhbFJlZ2lzdGVyKHByb3RvLCAxMiwgWDg2OjplYXgpOworICAgICAgICBlbWl0Q1RJQ2FsbChp
LCBJbnRlcnByZXRlcjo6Y3RpX29wX2NvbnN0cnVjdF9KU0NvbnN0cnVjdCk7CisgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZ2lzdGVyKTsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihjYWxsZWUsIFg4Njo6ZWN4LCBpKTsKKyAgICB9CisKKyAgICAvLyBGYXN0IHZl
cnNpb24gb2Ygc3RhY2sgZnJhbWUgaW5pdGlhbGl6YXRpb24sIGRpcmVjdGx5IHJlbGF0aXZlIHRv
IGVkaS4KKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBvbWl0cyB0byBzZXQgdXAgUmVnaXN0ZXJGaWxl
OjpDb2RlQmxvY2ssIHdoaWNoIGlzIHNldCBpbiB0aGUgY2FsbGVlCisgICAgX18gbW92bF9pMzJt
KGFzSW50ZWdlcihub1ZhbHVlKCkpLCAocmVnaXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZpbGU6Ok9w
dGlvbmFsQ2FsbGVlQXJndW1lbnRzKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSksIFg4Njo6ZWRpKTsKKyAgICBfXyBtb3ZsX3JtKFg4Njo6ZWN4LCAocmVnaXN0ZXJPZmZzZXQg
KyBSZWdpc3RlckZpbGU6OkNhbGxlZSkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rl
cikpLCBYODY6OmVkaSk7CisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNGdW5jdGlvbiwg
bV9zY29wZUNoYWluKSArIEZJRUxEX09GRlNFVChTY29wZUNoYWluLCBtX25vZGUpLCBYODY6OmVj
eCwgWDg2OjplZHgpOyAvLyBuZXdTY29wZUNoYWluCisgICAgX18gbW92bF9pMzJtKGFyZ0NvdW50
LCAocmVnaXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQpICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkpOworICAgIF9fIG1vdmxfcm0o
WDg2OjplZGksIChyZWdpc3Rlck9mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUpICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkpOworICAgIF9fIG1v
dmxfcm0oWDg2OjplZHgsIChyZWdpc3Rlck9mZnNldCArIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFp
bikgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6OmVkaSk7CisgICAg
X18gYWRkbF9pMzJyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSwgWDg2OjplZGkp
OworCisgICAgLy8gQ2FsbCB0byB0aGUgY2FsbGVlCisgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5ha2Vk
Q2FsbChpLCByZWludGVycHJldF9jYXN0PHZvaWQqPih1bnJlYWNoYWJsZSkpOworICAgIAorICAg
IGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpCisgICAgICAgIF9fIGxpbmsod2FzRXZhbCwg
X18gbGFiZWwoKSk7CisKKyAgICAvLyBQdXQgdGhlIHJldHVybiB2YWx1ZSBpbiBkc3QuIEluIHRo
ZSBpbnRlcnByZXRlciwgb3BfcmV0IGRvZXMgdGhpcy4KKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisKKyNpZiBFTkFCTEUoQ09ERUJMT0NLX1NBTVBMSU5HKQorICAgICAgICBfXyBt
b3ZsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9jb2RlQmxvY2spLCBtX2ludGVy
cHJldGVyLT5zYW1wbGVyKCktPmNvZGVCbG9ja1Nsb3QoKSk7CisjZW5kaWYKK30KKwordm9pZCBK
SVQ6OmNvbXBpbGVPcFN0cmljdEVxKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQg
aSwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCit7CisgICAgYm9vbCBuZWdhdGVkID0gKHR5
cGUgPT0gT3BOU3RyaWN0RXEpOworCisgICAgdW5zaWduZWQgZHN0ID0gaW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHNyYzEgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
CisgICAgdW5zaWduZWQgc3JjMiA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIFg4Njo6ZWF4LCBzcmMyLCBYODY6OmVkeCwgaSk7
CisKKyAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7Cisg
ICAgSm1wU3JjIGZpcnN0Tm90SW1tZWRpYXRlID0gX18gamUoKTsKKyAgICBfXyB0ZXN0bF9pMzJy
KEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVkeCk7CisgICAgSm1wU3JjIHNlY29uZE5vdElt
bWVkaWF0ZSA9IF9fIGplKCk7CisKKyAgICBfXyBjbXBsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7
CisgICAgaWYgKG5lZ2F0ZWQpCisgICAgICAgIF9fIHNldG5lX3IoWDg2OjplYXgpOworICAgIGVs
c2UKKyAgICAgICAgX18gc2V0ZV9yKFg4Njo6ZWF4KTsKKyAgICBfXyBtb3Z6YmxfcnIoWDg2Ojpl
YXgsIFg4Njo6ZWF4KTsKKyAgICBlbWl0VGFnQXNCb29sSW1tZWRpYXRlKFg4Njo6ZWF4KTsKKyAg
ICAgICAgICAgIAorICAgIEptcFNyYyBib3RoV2VyZUltbWVkaWF0ZXMgPSBfXyBqbXAoKTsKKwor
ICAgIF9fIGxpbmsoZmlyc3ROb3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOworCisgICAgLy8gY2hl
Y2sgdGhhdCBlZHggaXMgaW1tZWRpYXRlIGJ1dCBub3QgdGhlIHplcm8gaW1tZWRpYXRlCisgICAg
X18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplZHgpOworICAgIF9fIHNl
dHpfcihYODY6OmVjeCk7CisgICAgX18gbW92emJsX3JyKFg4Njo6ZWN4LCBYODY6OmVjeCk7IC8v
IGVjeCBpcyBub3cgMSBpZiBlZHggd2FzIG5vbmltbWVkaWF0ZQorICAgIF9fIGNtcGxfaTMycihh
c0ludGVnZXIoSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSksIFg4Njo6ZWR4KTsKKyAgICBf
XyBzZXRlX3IoWDg2OjplZHgpOworICAgIF9fIG1vdnpibF9ycihYODY6OmVkeCwgWDg2OjplZHgp
OyAvLyBlZHggaXMgbm93IDEgaWYgZWR4IHdhcyB0aGUgMCBpbW1lZGlhdGUKKyAgICBfXyBvcmxf
cnIoWDg2OjplY3gsIFg4Njo6ZWR4KTsKKworICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2Fz
ZUVudHJ5KF9fIGpueigpLCBpKSk7CisKKyAgICBfXyBtb3ZsX2kzMnIoYXNJbnRlZ2VyKGpzQm9v
bGVhbihuZWdhdGVkKSksIFg4Njo6ZWF4KTsKKworICAgIEptcFNyYyBmaXJzdFdhc05vdEltbWVk
aWF0ZSA9IF9fIGptcCgpOworCisgICAgX18gbGluayhzZWNvbmROb3RJbW1lZGlhdGUsIF9fIGxh
YmVsKCkpOworICAgIC8vIGNoZWNrIHRoYXQgZWF4IGlzIG5vdCB0aGUgemVybyBpbW1lZGlhdGUg
KHdlIGtub3cgaXQgbXVzdCBiZSBpbW1lZGlhdGUpCisgICAgX18gY21wbF9pMzJyKGFzSW50ZWdl
cihKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOworICAgIG1fc2xvd0Nh
c2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGplKCksIGkpKTsKKworICAgIF9fIG1vdmxfaTMy
cihhc0ludGVnZXIoanNCb29sZWFuKG5lZ2F0ZWQpKSwgWDg2OjplYXgpOworCisgICAgX18gbGlu
ayhib3RoV2VyZUltbWVkaWF0ZXMsIF9fIGxhYmVsKCkpOworICAgIF9fIGxpbmsoZmlyc3RXYXNO
b3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOworCisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dTY3JpcHRDaGVjayh1bnNpZ25lZCBieXRlY29k
ZUluZGV4KQoreworICAgIF9fIHN1YmxfaThyKDEsIFg4Njo6ZXNpKTsKKyAgICBKbXBTcmMgc2tp
cFRpbWVvdXQgPSBfXyBqbmUoKTsKKyAgICBlbWl0Q1RJQ2FsbChieXRlY29kZUluZGV4LCBJbnRl
cnByZXRlcjo6Y3RpX3RpbWVvdXRfY2hlY2spOworCisgICAgZW1pdEdldENUSVBhcmFtKENUSV9B
UkdTX2dsb2JhbERhdGEsIFg4Njo6ZWN4KTsKKyAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChK
U0dsb2JhbERhdGEsIGludGVycHJldGVyKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKKyAgICBfXyBt
b3ZsX21yKEZJRUxEX09GRlNFVChJbnRlcnByZXRlciwgbV90aWNrc1VudGlsTmV4dFRpbWVvdXRD
aGVjayksIFg4Njo6ZWN4LCBYODY6OmVzaSk7CisgICAgX18gbGluayhza2lwVGltZW91dCwgX18g
bGFiZWwoKSk7CisKKyAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Cit9CisKKy8qCisgIFRo
aXMgaXMgcmVxdWlyZWQgc2luY2UgbnVtYmVyIHJlcHJlc2VudGF0aW9uIGlzIGNhbm9uaWNhbCAt
IHZhbHVlcyByZXByZXNlbnRhYmxlIGFzIGEgSlNJbW1lZGlhdGUgc2hvdWxkIG5vdCBiZSBzdG9y
ZWQgaW4gYSBKU051bWJlckNlbGwuCisgIAorICBJbiB0aGUgY29tbW9uIGNhc2UsIHRoZSBkb3Vi
bGUgdmFsdWUgZnJvbSAneG1tU291cmNlJyBpcyB3cml0dGVuIHRvIHRoZSByZXVzYWJsZSBKU051
bWJlckNlbGwgcG9pbnRlZCB0byBieSAnanNOdW1iZXJDZWxsJywgdGhlbiAnanNOdW1iZXJDZWxs
JworICBpcyB3cml0dGVuIHRvIHRoZSBvdXRwdXQgU0YgUmVnaXN0ZXIgJ2RzdCcsIGFuZCB0aGVu
IGEganVtcCBpcyBwbGFudGVkIChzdG9yZWQgaW50byAqd3JvdGVKU051bWJlckNlbGwpLgorICAK
KyAgSG93ZXZlciBpZiB0aGUgdmFsdWUgZnJvbSB4bW1Tb3VyY2UgaXMgcmVwcmVzZW50YWJsZSBh
cyBhIEpTSW1tZWRpYXRlLCB0aGVuIHRoZSBKU0ltbWVkaWF0ZSB2YWx1ZSB3aWxsIGJlIHdyaXR0
ZW4gdG8gdGhlIG91dHB1dCwgYW5kIGZsb3cKKyAgY29udHJvbCB3aWxsIGZhbGwgdGhyb3VnaCBm
cm9tIHRoZSBjb2RlIHBsYW50ZWQuCisqLwordm9pZCBKSVQ6OnB1dERvdWJsZVJlc3VsdFRvSlNO
dW1iZXJDZWxsT3JKU0ltbWVkaWF0ZShYODY6OlhNTVJlZ2lzdGVySUQgeG1tU291cmNlLCBYODY6
OlJlZ2lzdGVySUQganNOdW1iZXJDZWxsLCB1bnNpZ25lZCBkc3QsIEptcFNyYyogd3JvdGVKU051
bWJlckNlbGwsICBYODY6OlhNTVJlZ2lzdGVySUQgdGVtcFhtbSwgWDg2OjpSZWdpc3RlcklEIHRl
bXBSZWcxLCBYODY6OlJlZ2lzdGVySUQgdGVtcFJlZzIpCit7CisgICAgLy8gY29udmVydCAoZG91
YmxlIC0+IEpTSW1tZWRpYXRlIC0+IGRvdWJsZSksIGFuZCBjaGVjayBpZiB0aGUgdmFsdWUgaXMg
dW5jaGFuZ2VkIC0gaW4gd2hpY2ggY2FzZSB0aGUgdmFsdWUgaXMgcmVwcmVzZW50YWJsZSBhcyBh
IEpTSW1tZWRpYXRlLgorICAgIF9fIGN2dHRzZDJzaV9ycih4bW1Tb3VyY2UsIHRlbXBSZWcxKTsK
KyAgICBfXyBhZGRsX3JyKHRlbXBSZWcxLCB0ZW1wUmVnMSk7CisgICAgX18gc2FybF9pOHIoMSwg
dGVtcFJlZzEpOworICAgIF9fIGN2dHNpMnNkX3JyKHRlbXBSZWcxLCB0ZW1wWG1tKTsKKyAgICAv
LyBDb21wYXJlICYgYnJhbmNoIGlmIGltbWVkaWF0ZS4gCisgICAgX18gdWNvbWlzX3JyKHRlbXBY
bW0sIHhtbVNvdXJjZSk7CisgICAgSm1wU3JjIHJlc3VsdElzSW1tID0gX18gamUoKTsKKyAgICBK
bXBEc3QgcmVzdWx0TG9va2VkTGlrZUltbUJ1dEFjdHVhbGx5SXNudCA9IF9fIGxhYmVsKCk7Cisg
ICAgCisgICAgLy8gU3RvcmUgdGhlIHJlc3VsdCB0byB0aGUgSlNOdW1iZXJDZWxsIGFuZCBqdW1w
LgorICAgIF9fIG1vdnNkX3JtKHhtbVNvdXJjZSwgRklFTERfT0ZGU0VUKEpTTnVtYmVyQ2VsbCwg
bV92YWx1ZSksIGpzTnVtYmVyQ2VsbCk7CisgICAgaWYgKGpzTnVtYmVyQ2VsbCAhPSBYODY6OmVh
eCkKKyAgICAgICAgX18gbW92bF9ycihqc051bWJlckNlbGwsIFg4Njo6ZWF4KTsKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgKndyb3RlSlNOdW1iZXJDZWxsID0gX18gam1w
KCk7CisKKyAgICBfXyBsaW5rKHJlc3VsdElzSW1tLCBfXyBsYWJlbCgpKTsKKyAgICAvLyB2YWx1
ZSA9PSAoZG91YmxlKShKU0ltbWVkaWF0ZSl2YWx1ZS4uLiBvciBhdCBsZWFzdCwgaXQgbG9va3Mg
dGhhdCB3YXkuLi4KKyAgICAvLyB1Y29taSB3aWxsIHJlcG9ydCB0aGF0ICgwID09IC0wKSwgYW5k
IHdpbGwgcmVwb3J0IHRydWUgaWYgZWl0aGVyIGlucHV0IGluIE5hTiAocmVzdWx0IGlzIHVub3Jk
ZXJlZCkuCisgICAgX18gbGluayhfXyBqcCgpLCByZXN1bHRMb29rZWRMaWtlSW1tQnV0QWN0dWFs
bHlJc250KTsgLy8gQWN0dWFsbHkgd2FzIGEgTmFOCisgICAgX18gcGV4dHJ3X2lycigzLCB4bW1T
b3VyY2UsIHRlbXBSZWcyKTsKKyAgICBfXyBjbXBsX2kzMnIoMHg4MDAwLCB0ZW1wUmVnMik7Cisg
ICAgX18gbGluayhfXyBqZSgpLCByZXN1bHRMb29rZWRMaWtlSW1tQnV0QWN0dWFsbHlJc250KTsg
Ly8gQWN0dWFsbHkgd2FzIC0wCisgICAgLy8gWWVzIGl0IHJlYWxseSByZWFsbHkgcmVhbGx5IGlz
IHJlcHJlc2VudGFibGUgYXMgYSBKU0ltbWVkaWF0ZS4KKyAgICBlbWl0RmFzdEFyaXRoSW50VG9J
bW1Ob0NoZWNrKHRlbXBSZWcxKTsKKyAgICBpZiAodGVtcFJlZzEgIT0gWDg2OjplYXgpCisgICAg
ICAgIF9fIG1vdmxfcnIodGVtcFJlZzEsIFg4Njo6ZWF4KTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQgSklUOjpjb21waWxlQmluYXJ5QXJpdGhPcChPcGNvZGVJ
RCBvcGNvZGVJRCwgdW5zaWduZWQgZHN0LCB1bnNpZ25lZCBzcmMxLCB1bnNpZ25lZCBzcmMyLCBP
cGVyYW5kVHlwZXMgdHlwZXMsIHVuc2lnbmVkIGkpCit7CisgICAgU3RydWN0dXJlKiBudW1iZXJT
dHJ1Y3R1cmUgPSBtX2dsb2JhbERhdGEtPm51bWJlclN0cnVjdHVyZS5nZXQoKTsKKyAgICBKbXBT
cmMgd2FzSlNOdW1iZXJDZWxsMTsKKyAgICBKbXBTcmMgd2FzSlNOdW1iZXJDZWxsMWI7CisgICAg
Sm1wU3JjIHdhc0pTTnVtYmVyQ2VsbDI7CisgICAgSm1wU3JjIHdhc0pTTnVtYmVyQ2VsbDJiOwor
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgWDg2OjplYXgsIHNyYzIsIFg4Njo6
ZWR4LCBpKTsKKworICAgIGlmICh0eXBlcy5zZWNvbmQoKS5pc1JldXNhYmxlKCkgJiYgaXNTU0Uy
UHJlc2VudCgpKSB7CisgICAgICAgIEFTU0VSVCh0eXBlcy5zZWNvbmQoKS5taWdodEJlTnVtYmVy
KCkpOworCisgICAgICAgIC8vIENoZWNrIG9wMiBpcyBhIG51bWJlcgorICAgICAgICBfXyB0ZXN0
bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgWDg2OjplZHgpOworICAgICAg
ICBKbXBTcmMgb3AyaW1tID0gX18gam5lKCk7CisgICAgICAgIGlmICghdHlwZXMuc2Vjb25kKCku
ZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChYODY6OmVkeCwgaSwgc3JjMik7CisgICAgICAgICAgICBfXyBjbXBsX2kzMm0ocmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obnVtYmVyU3RydWN0dXJlKSwgRklFTERfT0ZGU0VUKEpT
Q2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVkeCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5h
cHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gKDEpIEluIHRoaXMgY2FzZSBzcmMyIGlzIGEgcmV1c2FibGUgbnVtYmVyIGNlbGwuCisgICAg
ICAgIC8vICAgICBTbG93IGNhc2UgaWYgc3JjMSBpcyBub3QgYSBudW1iZXIgdHlwZS4KKyAgICAg
ICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWF4
KTsKKyAgICAgICAgSm1wU3JjIG9wMWltbSA9IF9fIGpuZSgpOworICAgICAgICBpZiAoIXR5cGVz
LmZpcnN0KCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVheCwgaSwgc3JjMSk7CisgICAgICAgICAgICBfXyBjbXBs
X2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obnVtYmVyU3RydWN0dXJlKSwgRklFTERf
T0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCk7CisgICAgICAgICAgICBtX3Ns
b3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gKDFhKSBpZiB3ZSBnZXQgaGVyZSwgc3JjMSBpcyBhbHNvIGEgbnVtYmVyIGNl
bGwKKyAgICAgICAgX18gbW92c2RfbXIoRklFTERfT0ZGU0VUKEpTTnVtYmVyQ2VsbCwgbV92YWx1
ZSksIFg4Njo6ZWF4LCBYODY6OnhtbTApOworICAgICAgICBKbXBTcmMgbG9hZGVkRG91YmxlID0g
X18gam1wKCk7CisgICAgICAgIC8vICgxYikgaWYgd2UgZ2V0IGhlcmUsIHNyYzEgaXMgYW4gaW1t
ZWRpYXRlCisgICAgICAgIF9fIGxpbmsob3AxaW1tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgZW1p
dEZhc3RBcml0aEltbVRvSW50KFg4Njo6ZWF4KTsKKyAgICAgICAgX18gY3Z0c2kyc2RfcnIoWDg2
OjplYXgsIFg4Njo6eG1tMCk7CisgICAgICAgIC8vICgxYykgCisgICAgICAgIF9fIGxpbmsobG9h
ZGVkRG91YmxlLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgaWYgKG9wY29kZUlEID09IG9wX2FkZCkK
KyAgICAgICAgICAgIF9fIGFkZHNkX21yKEZJRUxEX09GRlNFVChKU051bWJlckNlbGwsIG1fdmFs
dWUpLCBYODY6OmVkeCwgWDg2Ojp4bW0wKTsKKyAgICAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0g
b3Bfc3ViKQorICAgICAgICAgICAgX18gc3Vic2RfbXIoRklFTERfT0ZGU0VUKEpTTnVtYmVyQ2Vs
bCwgbV92YWx1ZSksIFg4Njo6ZWR4LCBYODY6OnhtbTApOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9tdWwpOworICAgICAgICAgICAgX18gbXVsc2Rf
bXIoRklFTERfT0ZGU0VUKEpTTnVtYmVyQ2VsbCwgbV92YWx1ZSksIFg4Njo6ZWR4LCBYODY6Onht
bTApOworICAgICAgICB9CisKKyAgICAgICAgcHV0RG91YmxlUmVzdWx0VG9KU051bWJlckNlbGxP
ckpTSW1tZWRpYXRlKFg4Njo6eG1tMCwgWDg2OjplZHgsIGRzdCwgJndhc0pTTnVtYmVyQ2VsbDIs
IFg4Njo6eG1tMSwgWDg2OjplY3gsIFg4Njo6ZWF4KTsKKyAgICAgICAgd2FzSlNOdW1iZXJDZWxs
MmIgPSBfXyBqbXAoKTsKKworICAgICAgICAvLyAoMikgVGhpcyBoYW5kbGVzIGNhc2VzIHdoZXJl
IHNyYzIgaXMgYW4gaW1tZWRpYXRlIG51bWJlci4KKyAgICAgICAgLy8gICAgIFR3byBzbG93IGNh
c2VzIC0gZWl0aGVyIHNyYzEgaXNuJ3QgYW4gaW1tZWRpYXRlLCBvciB0aGUgc3VidHJhY3Qgb3Zl
cmZsb3dzLgorICAgICAgICBfXyBsaW5rKG9wMmltbSwgX18gbGFiZWwoKSk7CisgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7CisgICAgfSBlbHNlIGlmICh0
eXBlcy5maXJzdCgpLmlzUmV1c2FibGUoKSAmJiBpc1NTRTJQcmVzZW50KCkpIHsKKyAgICAgICAg
QVNTRVJUKHR5cGVzLmZpcnN0KCkubWlnaHRCZU51bWJlcigpKTsKKworICAgICAgICAvLyBDaGVj
ayBvcDEgaXMgYSBudW1iZXIKKyAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFn
Qml0VHlwZUludGVnZXIsIFg4Njo6ZWF4KTsKKyAgICAgICAgSm1wU3JjIG9wMWltbSA9IF9fIGpu
ZSgpOworICAgICAgICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsK
KyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVheCwgaSwgc3Jj
MSk7CisgICAgICAgICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4o
bnVtYmVyU3RydWN0dXJlKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6
OmVheCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBq
bmUoKSwgaSkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gKDEpIEluIHRoaXMgY2FzZSBzcmMx
IGlzIGEgcmV1c2FibGUgbnVtYmVyIGNlbGwuCisgICAgICAgIC8vICAgICBTbG93IGNhc2UgaWYg
c3JjMiBpcyBub3QgYSBudW1iZXIgdHlwZS4KKyAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVk
aWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWR4KTsKKyAgICAgICAgSm1wU3JjIG9wMmlt
bSA9IF9fIGpuZSgpOworICAgICAgICBpZiAoIXR5cGVzLnNlY29uZCgpLmRlZmluaXRlbHlJc051
bWJlcigpKSB7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoWDg2Ojpl
ZHgsIGksIHNyYzIpOworICAgICAgICAgICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQ+KG51bWJlclN0cnVjdHVyZSksIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0
dXJlKSwgWDg2OjplZHgpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoX18gam5lKCksIGkpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vICgxYSkgaWYgd2Ug
Z2V0IGhlcmUsIHNyYzIgaXMgYWxzbyBhIG51bWJlciBjZWxsCisgICAgICAgIF9fIG1vdnNkX21y
KEZJRUxEX09GRlNFVChKU051bWJlckNlbGwsIG1fdmFsdWUpLCBYODY6OmVkeCwgWDg2Ojp4bW0x
KTsKKyAgICAgICAgSm1wU3JjIGxvYWRlZERvdWJsZSA9IF9fIGptcCgpOworICAgICAgICAvLyAo
MWIpIGlmIHdlIGdldCBoZXJlLCBzcmMyIGlzIGFuIGltbWVkaWF0ZQorICAgICAgICBfXyBsaW5r
KG9wMmltbSwgX18gbGFiZWwoKSk7CisgICAgICAgIGVtaXRGYXN0QXJpdGhJbW1Ub0ludChYODY6
OmVkeCk7CisgICAgICAgIF9fIGN2dHNpMnNkX3JyKFg4Njo6ZWR4LCBYODY6OnhtbTEpOworICAg
ICAgICAvLyAoMWMpIAorICAgICAgICBfXyBsaW5rKGxvYWRlZERvdWJsZSwgX18gbGFiZWwoKSk7
CisgICAgICAgIF9fIG1vdnNkX21yKEZJRUxEX09GRlNFVChKU051bWJlckNlbGwsIG1fdmFsdWUp
LCBYODY6OmVheCwgWDg2Ojp4bW0wKTsKKyAgICAgICAgaWYgKG9wY29kZUlEID09IG9wX2FkZCkK
KyAgICAgICAgICAgIF9fIGFkZHNkX3JyKFg4Njo6eG1tMSwgWDg2Ojp4bW0wKTsKKyAgICAgICAg
ZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3Bfc3ViKQorICAgICAgICAgICAgX18gc3Vic2RfcnIoWDg2
Ojp4bW0xLCBYODY6OnhtbTApOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChv
cGNvZGVJRCA9PSBvcF9tdWwpOworICAgICAgICAgICAgX18gbXVsc2RfcnIoWDg2Ojp4bW0xLCBY
ODY6OnhtbTApOworICAgICAgICB9CisgICAgICAgIF9fIG1vdnNkX3JtKFg4Njo6eG1tMCwgRklF
TERfT0ZGU0VUKEpTTnVtYmVyQ2VsbCwgbV92YWx1ZSksIFg4Njo6ZWF4KTsKKyAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgICAgIHB1dERvdWJsZVJlc3VsdFRvSlNO
dW1iZXJDZWxsT3JKU0ltbWVkaWF0ZShYODY6OnhtbTAsIFg4Njo6ZWF4LCBkc3QsICZ3YXNKU051
bWJlckNlbGwxLCBYODY6OnhtbTEsIFg4Njo6ZWN4LCBYODY6OmVkeCk7CisgICAgICAgIHdhc0pT
TnVtYmVyQ2VsbDFiID0gX18gam1wKCk7CisKKyAgICAgICAgLy8gKDIpIFRoaXMgaGFuZGxlcyBj
YXNlcyB3aGVyZSBzcmMxIGlzIGFuIGltbWVkaWF0ZSBudW1iZXIuCisgICAgICAgIC8vICAgICBU
d28gc2xvdyBjYXNlcyAtIGVpdGhlciBzcmMyIGlzbid0IGFuIGltbWVkaWF0ZSwgb3IgdGhlIHN1
YnRyYWN0IG92ZXJmbG93cy4KKyAgICAgICAgX18gbGluayhvcDFpbW0sIF9fIGxhYmVsKCkpOwor
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplZHgsIGkpOworICAgIH0g
ZWxzZQorICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW1zKFg4Njo6ZWF4LCBYODY6
OmVkeCwgaSk7CisKKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfYWRkKSB7CisgICAgICAgIGVtaXRG
YXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZShYODY6OmVheCk7CisgICAgICAgIF9fIGFkZGxfcnIoWDg2
OjplZHgsIFg4Njo6ZWF4KTsKKyAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50
cnkoX18gam8oKSwgaSkpOworICAgIH0gZWxzZSAgaWYgKG9wY29kZUlEID09IG9wX3N1Yikgewor
ICAgICAgICBfXyBzdWJsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7CisgICAgICAgIG1fc2xvd0Nh
c2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKKyAgICAgICAgZW1pdEZhc3RB
cml0aFJlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NF
UlQob3Bjb2RlSUQgPT0gb3BfbXVsKTsKKyAgICAgICAgLy8gY29udmVydCBlYXggJiBlZHggZnJv
bSBKU0ltbWVkaWF0ZXMgdG8gaW50cywgYW5kIGNoZWNrIGlmIGVpdGhlciBhcmUgemVybworICAg
ICAgICBlbWl0RmFzdEFyaXRoSW1tVG9JbnQoWDg2OjplZHgpOworICAgICAgICBKbXBTcmMgb3Ax
WmVybyA9IGVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZUp1bXBJZlplcm8oWDg2OjplYXgpOwor
ICAgICAgICBfXyB0ZXN0bF9ycihYODY6OmVkeCwgWDg2OjplZHgpOworICAgICAgICBKbXBTcmMg
b3AyTm9uWmVybyA9IF9fIGpuZSgpOworICAgICAgICBfXyBsaW5rKG9wMVplcm8sIF9fIGxhYmVs
KCkpOworICAgICAgICAvLyBpZiBlaXRoZXIgaW5wdXQgaXMgemVybywgYWRkIHRoZSB0d28gdG9n
ZXRoZXIsIGFuZCBjaGVjayBpZiB0aGUgcmVzdWx0IGlzIDwgMC4KKyAgICAgICAgLy8gSWYgaXQg
aXMsIHdlIGhhdmUgYSBwcm9ibGVtIChOIDwgMCksIChOICogMCkgPT0gLTAsIG5vdCByZXByZXNl
bnRhdGJsZSBhcyBhIEpTSW1tZWRpYXRlLiAKKyAgICAgICAgX18gbW92bF9ycihYODY6OmVheCwg
WDg2OjplY3gpOworICAgICAgICBfXyBhZGRsX3JyKFg4Njo6ZWR4LCBYODY6OmVjeCk7CisgICAg
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpzKCksIGkpKTsKKyAgICAg
ICAgLy8gU2tpcCB0aGUgYWJvdmUgY2hlY2sgaWYgbmVpdGhlciBpbnB1dCBpcyB6ZXJvCisgICAg
ICAgIF9fIGxpbmsob3AyTm9uWmVybywgX18gbGFiZWwoKSk7CisgICAgICAgIF9fIGltdWxsX3Jy
KFg4Njo6ZWR4LCBYODY6OmVheCk7CisgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2Fz
ZUVudHJ5KF9fIGpvKCksIGkpKTsKKyAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRl
KFg4Njo6ZWF4KTsKKyAgICB9CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisg
ICAgaWYgKHR5cGVzLnNlY29uZCgpLmlzUmV1c2FibGUoKSAmJiBpc1NTRTJQcmVzZW50KCkpIHsK
KyAgICAgICAgX18gbGluayh3YXNKU051bWJlckNlbGwyLCBfXyBsYWJlbCgpKTsKKyAgICAgICAg
X18gbGluayh3YXNKU051bWJlckNlbGwyYiwgX18gbGFiZWwoKSk7CisgICAgfQorICAgIGVsc2Ug
aWYgKHR5cGVzLmZpcnN0KCkuaXNSZXVzYWJsZSgpICYmIGlzU1NFMlByZXNlbnQoKSkgeworICAg
ICAgICBfXyBsaW5rKHdhc0pTTnVtYmVyQ2VsbDEsIF9fIGxhYmVsKCkpOworICAgICAgICBfXyBs
aW5rKHdhc0pTTnVtYmVyQ2VsbDFiLCBfXyBsYWJlbCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgSklU
Ojpjb21waWxlQmluYXJ5QXJpdGhPcFNsb3dDYXNlKE9wY29kZUlEIG9wY29kZUlELCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBkc3QsIHVuc2lnbmVkIHNy
YzEsIHVuc2lnbmVkIHNyYzIsIE9wZXJhbmRUeXBlcyB0eXBlcywgdW5zaWduZWQgaSkKK3sKKyAg
ICBKbXBEc3QgaGVyZSA9IF9fIGxhYmVsKCk7CisgICAgX18gbGluayhpdGVyLT5mcm9tLCBoZXJl
KTsKKyAgICBpZiAodHlwZXMuc2Vjb25kKCkuaXNSZXVzYWJsZSgpICYmIGlzU1NFMlByZXNlbnQo
KSkgeworICAgICAgICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsK
KyAgICAgICAgICAgIGlmIChsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbCgrK2l0ZXIsIHNyYzEpKQor
ICAgICAgICAgICAgICAgICsraXRlcjsKKyAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwg
aGVyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0eXBlcy5zZWNvbmQoKS5kZWZpbml0ZWx5
SXNOdW1iZXIoKSkgeworICAgICAgICAgICAgaWYgKGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKCsr
aXRlciwgc3JjMikpCisgICAgICAgICAgICAgICAgKytpdGVyOworICAgICAgICAgICAgX18gbGlu
ayhpdGVyLT5mcm9tLCBoZXJlKTsKKyAgICAgICAgfQorICAgICAgICBfXyBsaW5rKCgrK2l0ZXIp
LT5mcm9tLCBoZXJlKTsKKyAgICB9IGVsc2UgaWYgKHR5cGVzLmZpcnN0KCkuaXNSZXVzYWJsZSgp
ICYmIGlzU1NFMlByZXNlbnQoKSkgeworICAgICAgICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5p
dGVseUlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGlmIChsaW5rU2xvd0Nhc2VJZk5vdEpTQ2Vs
bCgrK2l0ZXIsIHNyYzEpKQorICAgICAgICAgICAgICAgICsraXRlcjsKKyAgICAgICAgICAgIF9f
IGxpbmsoaXRlci0+ZnJvbSwgaGVyZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0eXBlcy5z
ZWNvbmQoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkgeworICAgICAgICAgICAgaWYgKGxpbmtTbG93
Q2FzZUlmTm90SlNDZWxsKCsraXRlciwgc3JjMikpCisgICAgICAgICAgICAgICAgKytpdGVyOwor
ICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBoZXJlKTsKKyAgICAgICAgfQorICAgICAg
ICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBoZXJlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgX18g
bGluaygoKytpdGVyKS0+ZnJvbSwgaGVyZSk7CisKKyAgICAvLyBhZGRpdGlvbmFsIGVudHJ5IHBv
aW50IHRvIGhhbmRsZSAtMCBjYXNlcy4KKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbXVsKQorICAg
ICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBoZXJlKTsKKworICAgIGVtaXRQdXRDVElBcmdG
cm9tVmlydHVhbFJlZ2lzdGVyKHNyYzEsIDAsIFg4Njo6ZWN4KTsKKyAgICBlbWl0UHV0Q1RJQXJn
RnJvbVZpcnR1YWxSZWdpc3RlcihzcmMyLCA0LCBYODY6OmVjeCk7CisgICAgaWYgKG9wY29kZUlE
ID09IG9wX2FkZCkKKyAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9h
ZGQpOworICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX3N1YikKKyAgICAgICAgZW1pdENUSUNh
bGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9zdWIpOworICAgIGVsc2UgeworICAgICAgICBBU1NF
UlQob3Bjb2RlSUQgPT0gb3BfbXVsKTsKKyAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0
ZXI6OmN0aV9vcF9tdWwpOworICAgIH0KKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
Cit9CisKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKK3sKKyAgICBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCk7Cisg
ICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMu
c2l6ZSgpOworCisgICAgdW5zaWduZWQgcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4ID0g
MDsKKyAgICB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCA9IDA7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaW5zdHJ1Y3Rpb25Db3VudDsgKSB7CisgICAgICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UobV9pbnRlcnByZXRlci0+aXNPcGNvZGUoaW5zdHJ1Y3Rpb25baV0udS5vcGNvZGUp
LCAicHJpdmF0ZUNvbXBpbGVNYWluUGFzcyBnb25lIGJhZCBAICVkIiwgaSk7CisKKyNpZiBFTkFC
TEUoT1BDT0RFX1NBTVBMSU5HKQorICAgICAgICBpZiAoaSA+IDApIC8vIEF2b2lkIHRoZSBvdmVy
aGVhZCBvZiBzYW1wbGluZyBvcF9lbnRlciB0d2ljZS4KKyAgICAgICAgICAgIF9fIG1vdmxfaTMy
bShtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShpbnN0cnVjdGlvbiArIGkp
LCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7CisjZW5kaWYKKworICAg
ICAgICBtX2xhYmVsc1tpXSA9IF9fIGxhYmVsKCk7CisgICAgICAgIE9wY29kZUlEIG9wY29kZUlE
ID0gbV9pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25baV0udS5vcGNvZGUpOwor
ICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgICAgIGNhc2Ugb3BfbW92OiB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBzcmMgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworICAg
ICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKQor
ICAgICAgICAgICAgICAgIF9fIG1vdmxfaTMycihhc0ludGVnZXIobV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYykpLCBYODY6OmVheCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Cisg
ICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX2FkZDogeworICAgICAgICAgICAgdW5zaWduZWQgZHN0ID0gaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNyYzEgPSBpbnN0cnVjdGlv
bltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgc3JjMiA9IGluc3RydWN0
aW9uW2kgKyAzXS51Lm9wZXJhbmQ7CisKKyAgICAgICAgICAgIGlmIChKU1ZhbHVlKiB2YWx1ZSA9
IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMxKSkgeworICAgICAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgWDg2OjplYXgsIGkpOworICAgICAgICAgICAg
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7CisgICAgICAgICAg
ICAgICAgX18gYWRkbF9pMzJyKGdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlhdGUodmFsdWUpLCBY
ODY6OmVheCk7CisgICAgICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50
cnkoX18gam8oKSwgaSkpOworICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoSlNWYWx1ZSogdmFsdWUgPSBnZXRDb25zdGFu
dEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMikpIHsKKyAgICAgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYzEsIFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOworICAgICAgICAgICAgICAgIF9fIGFk
ZGxfaTMycihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKHZhbHVlKSwgWDg2OjplYXgpOwor
ICAgICAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCks
IGkpKTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIE9wZXJhbmRUeXBlcyB0eXBlcyA9IE9w
ZXJhbmRUeXBlczo6ZnJvbUludChpbnN0cnVjdGlvbltpICsgNF0udS5vcGVyYW5kKTsKKyAgICAg
ICAgICAgICAgICBpZiAodHlwZXMuZmlyc3QoKS5taWdodEJlTnVtYmVyKCkgJiYgdHlwZXMuc2Vj
b25kKCkubWlnaHRCZU51bWJlcigpKQorICAgICAgICAgICAgICAgICAgICBjb21waWxlQmluYXJ5
QXJpdGhPcChvcF9hZGQsIGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIGluc3RydWN0aW9u
W2kgKyAyXS51Lm9wZXJhbmQsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIE9wZXJhbmRU
eXBlczo6ZnJvbUludChpbnN0cnVjdGlvbltpICsgNF0udS5vcGVyYW5kKSwgaSk7CisgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmly
dHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsK
KyAgICAgICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOworICAgICAgICAgICAgICAg
ICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2FkZCk7CisgICAgICAgICAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ICs9IDU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2Vu
ZDogeworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKQor
ICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfZW5kKTsK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCwgWDg2OjplYXgsIGkpOworICAgICAgICAgICAgX18gcHVzaGxfbShSZWdpc3RlckZp
bGU6OlJldHVyblBDICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2Ojpl
ZGkpOworICAgICAgICAgICAgX18gcmV0KCk7CisgICAgICAgICAgICBpICs9IDI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2ptcDogeworICAgICAgICAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGptcCgpLCBpICsgMSArIHRhcmdl
dCkpOworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF9wcmVfaW5jOiB7CisgICAgICAgICAgICBpbnQgc3JjRHN0ID0gaW5z
dHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc3JjRHN0LCBYODY6OmVheCwgaSk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOworICAgICAgICAgICAgX18gYWRkbF9pOHIoZ2V0RGVU
YWdnZWRDb25zdGFudEltbWVkaWF0ZShKU0ltbWVkaWF0ZTo6b25lSW1tZWRpYXRlKCkpLCBYODY6
OmVheCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBq
bygpLCBpKSk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7Cisg
ICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX2xvb3A6IHsKKyAgICAgICAgICAgIGVtaXRTbG93U2NyaXB0Q2hlY2soaSk7CisK
KyAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbXAoKSwgaSAr
IDEgKyB0YXJnZXQpKTsKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9sZXNzOiB7CisgICAgICAgICAgICBl
bWl0U2xvd1NjcmlwdENoZWNrKGkpOworCisgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBp
bnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOworICAgICAgICAgICAgSlNWYWx1ZSogc3JjMmlt
bSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhpbnN0cnVjdGlvbltpICsgMl0udS5v
cGVyYW5kKTsKKyAgICAgICAgICAgIGlmIChzcmMyaW1tKSB7CisgICAgICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVk
eCwgaSk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6
ZWR4LCBpKTsKKyAgICAgICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKHNyYzJpbW0p
LCBYODY6OmVkeCk7CisgICAgICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUo
X18gamwoKSwgaSArIDMgKyB0YXJnZXQpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZCwgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBp
KTsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgs
IGkpOworICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVk
eCwgaSk7CisgICAgICAgICAgICAgICAgX18gY21wbF9ycihYODY6OmVkeCwgWDg2OjplYXgpOwor
ICAgICAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGpsKCksIGkgKyAz
ICsgdGFyZ2V0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2xvb3BfaWZfbGVzc2VxOiB7
CisgICAgICAgICAgICBlbWl0U2xvd1NjcmlwdENoZWNrKGkpOworCisgICAgICAgICAgICB1bnNp
Z25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOworICAgICAgICAgICAg
SlNWYWx1ZSogc3JjMmltbSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGlmIChzcmMyaW1tKSB7CisgICAg
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5v
cGVyYW5kLCBYODY6OmVkeCwgaSk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW1tTnVtKFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJ
bnRlZ2VyKHNyYzJpbW0pLCBYODY6OmVkeCk7CisgICAgICAgICAgICAgICAgbV9qbXBUYWJsZS5h
cHBlbmQoSm1wVGFibGUoX18gamxlKCksIGkgKyAzICsgdGFyZ2V0KSk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0
aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVy
YW5kLCBYODY6OmVkeCwgaSk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW1tTnVtKFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbW1OdW0oWDg2OjplZHgsIGkpOworICAgICAgICAgICAgICAgIF9fIGNtcGxfcnIoWDg2Ojpl
ZHgsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJs
ZShfXyBqbGUoKSwgaSArIDMgKyB0YXJnZXQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
bmV3X29iamVjdDogeworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0
aV9vcF9uZXdfb2JqZWN0KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZDogeworICAg
ICAgICAgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byByZXBhdGNoIGJvdGggdGhlIFN0cnVj
dHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKKyAgICAg
ICAgICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGlu
dG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQorICAgICAg
ICAgICAgLy8gc3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0
aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRoaXMuCisKKyAgICAgICAgICAgIGludCBiYXNlVlJlZyA9
IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhiYXNlVlJlZywgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJh
bmQsIFg4Njo6ZWR4LCBpKTsKKworICAgICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5wcm9w
ZXJ0eUFjY2Vzc0luc3RydWN0aW9uc1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhdLmJ5
dGVjb2RlSW5kZXggPT0gaSk7CisKKyAgICAgICAgICAgIC8vIEp1bXAgdG8gYSBzbG93IGNhc2Ug
aWYgZWl0aGVyIHRoZSBiYXNlIG9iamVjdCBpcyBhbiBpbW1lZGlhdGUsIG9yIGlmIHRoZSBTdHJ1
Y3R1cmUgZG9lcyBub3QgbWF0Y2guCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoWDg2OjplYXgsIGksIGJhc2VWUmVnKTsKKworICAgICAgICAgICAgSm1wRHN0IGhvdFBh
dGhCZWdpbiA9IF9fIGxhYmVsKCk7CisgICAgICAgICAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGls
YXRpb25JbmZvW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uaG90UGF0aEJlZ2luID0g
aG90UGF0aEJlZ2luOworICAgICAgICAgICAgKytwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5k
ZXg7CisKKyAgICAgICAgICAgIC8vIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBmb2xsb3dpbmcg
aW5zdHJ1Y3Rpb24gcGxhbnRzIGEgMzJiaXQgaW1tZWRpYXRlLCBpbiBvcmRlciB0aGF0IGl0IGNh
biBiZSBwYXRjaGVkIG92ZXIuCisgICAgICAgICAgICBfXyBjbXBsX2kzMm0ocmVwYXRjaEdldEJ5
SWREZWZhdWx0U3RydWN0dXJlLCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4
Njo6ZWF4KTsKKyAgICAgICAgICAgIEFTU0VSVChYODZBc3NlbWJsZXI6OmdldERpZmZlcmVuY2VC
ZXR3ZWVuTGFiZWxzKGhvdFBhdGhCZWdpbiwgX18gbGFiZWwoKSkgPT0gcmVwYXRjaE9mZnNldFB1
dEJ5SWRTdHJ1Y3R1cmUpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoX18gam5lKCksIGkpKTsKKworICAgICAgICAgICAgLy8gUGxhbnQgYSBsb2FkIGZyb20g
YSBib2d1cyBvZnNldCBpbiB0aGUgb2JqZWN0J3MgcHJvcGVydHkgbWFwOyB3ZSB3aWxsIHBhdGNo
IHRoaXMgbGF0ZXIsIGlmIGl0IGlzIHRvIGJlIHVzZWQuCisgICAgICAgICAgICBfXyBtb3ZsX21y
KEZJRUxEX09GRlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwgWDg2
OjplYXgpOworICAgICAgICAgICAgX18gbW92bF9ybShYODY6OmVkeCwgcmVwYXRjaEdldEJ5SWRE
ZWZhdWx0T2Zmc2V0LCBYODY6OmVheCk7CisgICAgICAgICAgICBBU1NFUlQoWDg2QXNzZW1ibGVy
OjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhob3RQYXRoQmVnaW4sIF9fIGxhYmVsKCkpID09
IHJlcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBPZmZzZXQpOworCisgICAgICAgICAgICBp
ICs9IDg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2dl
dF9ieV9pZDogeworICAgICAgICAgICAgLy8gQXMgZm9yIHB1dF9ieV9pZCwgZ2V0X2J5X2lkIHJl
cXVpcmVzIHRoZSBvZmZzZXQgb2YgdGhlIFN0cnVjdHVyZSBhbmQgdGhlIG9mZnNldCBvZiB0aGUg
YWNjZXNzIHRvIGJlIHJlcGF0Y2hlZC4KKyAgICAgICAgICAgIC8vIEFkZGl0aW9uYWxseSwgZm9y
IGdldF9ieV9pZCB3ZSBuZWVkIHJlcGF0Y2ggdGhlIG9mZnNldCBvZiB0aGUgYnJhbmNoIHRvIHRo
ZSBzbG93IGNhc2UgKHdlIHJlcGF0Y2ggdGhpcyB0byBqdW1wCisgICAgICAgICAgICAvLyB0byBh
cnJheS1sZW5ndGggLyBwcm90b3R5cGUgYWNjZXNzIHRyYW5wb2xpbmVzLCBhbmQgZmluYWxseSB3
ZSBhbHNvIHRoZSB0aGUgcHJvcGVydHktbWFwIGFjY2VzcyBvZmZzZXQgYXMgYSBsYWJlbAorICAg
ICAgICAgICAgLy8gdG8ganVtcCBiYWNrIHRvIGlmIG9uZSBvZiB0aGVzZSB0cmFtcG9saWVzIGZp
bmRzIGEgbWF0Y2guCisKKyAgICAgICAgICAgIGludCBiYXNlVlJlZyA9IGluc3RydWN0aW9uW2kg
KyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VW
UmVnLCBYODY6OmVheCwgaSk7CisKKyAgICAgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+cHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5i
eXRlY29kZUluZGV4ID09IGkpOworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoWDg2OjplYXgsIGksIGJhc2VWUmVnKTsKKworICAgICAgICAgICAgSm1wRHN0IGhvdFBh
dGhCZWdpbiA9IF9fIGxhYmVsKCk7CisgICAgICAgICAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGls
YXRpb25JbmZvW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uaG90UGF0aEJlZ2luID0g
aG90UGF0aEJlZ2luOworICAgICAgICAgICAgKytwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5k
ZXg7CisKKyAgICAgICAgICAgIF9fIGNtcGxfaTMybShyZXBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1
Y3R1cmUsIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgpOworICAg
ICAgICAgICAgQVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMo
aG90UGF0aEJlZ2luLCBfXyBsYWJlbCgpKSA9PSByZXBhdGNoT2Zmc2V0R2V0QnlJZFN0cnVjdHVy
ZSk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUo
KSwgaSkpOworICAgICAgICAgICAgQVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJl
dHdlZW5MYWJlbHMoaG90UGF0aEJlZ2luLCBfXyBsYWJlbCgpKSA9PSByZXBhdGNoT2Zmc2V0R2V0
QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOworCisgICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09G
RlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplYXgpOwor
ICAgICAgICAgICAgX18gbW92bF9tcihyZXBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQsIFg4Njo6
ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICBBU1NFUlQoWDg2QXNzZW1ibGVyOjpnZXREaWZm
ZXJlbmNlQmV0d2VlbkxhYmVscyhob3RQYXRoQmVnaW4sIF9fIGxhYmVsKCkpID09IHJlcGF0Y2hP
ZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKworICAgICAgICAgICAg
aSArPSA4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9p
bnN0YW5jZW9mOiB7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsgLy8gdmFsdWUKKyAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2
OjplY3gsIGkpOyAvLyBiYXNlVmFsCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluc3RydWN0aW9uW2kgKyA0XS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsgLy8gcHJvdG8KKwor
ICAgICAgICAgICAgLy8gY2hlY2sgaWYgYW55IGFyZSBpbW1lZGlhdGVzCisgICAgICAgICAgICBf
XyBvcmxfcnIoWDg2OjplYXgsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIG9ybF9ycihYODY6
OmVkeCwgWDg2OjplY3gpOworICAgICAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6
VGFnTWFzaywgWDg2OjplY3gpOworCisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xv
d0Nhc2VFbnRyeShfXyBqbnooKSwgaSkpOworCisgICAgICAgICAgICAvLyBjaGVjayB0aGF0IGFs
bCBhcmUgb2JqZWN0IHR5cGUgLSB0aGlzIGlzIGEgYml0IG9mIGEgYml0aGFjayB0byBhdm9pZCBl
eGNlc3MgYnJhbmNoaW5nOworICAgICAgICAgICAgLy8gd2UgY2hlY2sgdGhhdCB0aGUgc3VtIG9m
IHRoZSB0aHJlZSB0eXBlIGNvZGVzIGZyb20gU3RydWN0dXJlcyBpcyBleGFjdGx5IDMgKiBPYmpl
Y3RUeXBlLAorICAgICAgICAgICAgLy8gdGhpcyB3b3JrcyBiZWNhdXNlIE51bWJlclR5cGUgYW5k
IFN0cmluZ1R5cGUgYXJlIHNtYWxsZXIKKyAgICAgICAgICAgIF9fIG1vdmxfaTMycigzICogT2Jq
ZWN0VHlwZSwgWDg2OjplY3gpOworICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQo
SlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICBf
XyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplZHgsIFg4
Njo6ZWR4KTsKKyAgICAgICAgICAgIF9fIHN1YmxfbXIoRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwg
bV90eXBlSW5mby5tX3R5cGUpLCBYODY6OmVheCwgWDg2OjplY3gpOworICAgICAgICAgICAgX18g
c3VibF9tcihGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3R5cGVJbmZvLm1fdHlwZSksIFg4Njo6
ZWR4LCBYODY6OmVjeCk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsgLy8gcmVsb2FkIGJhc2VWYWwK
KyAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUp
LCBYODY6OmVkeCwgWDg2OjplZHgpOworICAgICAgICAgICAgX18gY21wbF9ybShYODY6OmVjeCwg
RklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX3R5cGUpLCBYODY6OmVkeCk7CisK
KyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBp
KSk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgYmFzZVZhbCdzIGZsYWdzIGluY2x1ZGUg
SW1wbGVtZW50c0hhc0luc3RhbmNlIGJ1dCBub3QgT3ZlcnJpZGVzSGFzSW5zdGFuY2UKKyAgICAg
ICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX2Zs
YWdzKSwgWDg2OjplZHgsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIGFuZGxfaTMycihJbXBs
ZW1lbnRzSGFzSW5zdGFuY2UgfCBPdmVycmlkZXNIYXNJbnN0YW5jZSwgWDg2OjplY3gpOworICAg
ICAgICAgICAgX18gY21wbF9pMzJyKEltcGxlbWVudHNIYXNJbnN0YW5jZSwgWDg2OjplY3gpOwor
CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwg
aSkpOworCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWN4LCBpKTsgLy8gcmVsb2FkIHZhbHVlCisgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyA0XS51Lm9wZXJhbmQsIFg4
Njo6ZWR4LCBpKTsgLy8gcmVsb2FkIHByb3RvCisKKyAgICAgICAgICAgIC8vIG9wdGltaXN0aWNh
bGx5IGxvYWQgdHJ1ZSByZXN1bHQKKyAgICAgICAgICAgIF9fIG1vdmxfaTMycihhc0ludGVnZXIo
anNCb29sZWFuKHRydWUpKSwgWDg2OjplYXgpOworCisgICAgICAgICAgICBKbXBEc3QgbG9vcCA9
IF9fIGxhYmVsKCk7CisKKyAgICAgICAgICAgIC8vIGxvYWQgdmFsdWUncyBwcm90b3R5cGUKKyAg
ICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBY
ODY6OmVjeCwgWDg2OjplY3gpOworICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQo
U3RydWN0dXJlLCBtX3Byb3RvdHlwZSksIFg4Njo6ZWN4LCBYODY6OmVjeCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIF9fIGNtcGxfcnIoWDg2OjplY3gsIFg4Njo6ZWR4KTsKKyAgICAgICAg
ICAgIEptcFNyYyBleGl0ID0gX18gamUoKTsKKworICAgICAgICAgICAgX18gY21wbF9pMzJyKGFz
SW50ZWdlcihqc051bGwoKSksIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIEptcFNyYyBnb1RvTG9v
cCA9IF9fIGpuZSgpOworICAgICAgICAgICAgX18gbGluayhnb1RvTG9vcCwgbG9vcCk7CisKKyAg
ICAgICAgICAgIF9fIG1vdmxfaTMycihhc0ludGVnZXIoanNCb29sZWFuKGZhbHNlKSksIFg4Njo6
ZWF4KTsKKworICAgICAgICAgICAgX18gbGluayhleGl0LCBfXyBsYWJlbCgpKTsKKworICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5k
KTsKKworICAgICAgICAgICAgaSArPSA1OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF9kZWxfYnlfaWQ6IHsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdG
cm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6
ZWN4KTsKKyAgICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZF0pOworICAgICAgICAgICAgZW1p
dFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgNCk7
CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2RlbF9ieV9p
ZCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAx
XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9tdWw6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRz
dCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25lZCBz
cmMxID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVk
IHNyYzIgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOworCisgICAgICAgICAgICAvLyBG
b3Igbm93LCBvbmx5IHBsYW50IGEgZmFzdCBpbnQgY2FzZSBpZiB0aGUgY29uc3RhbnQgb3BlcmFu
ZCBpcyBncmVhdGVyIHRoYW4gemVyby4KKyAgICAgICAgICAgIEpTVmFsdWUqIHNyYzFWYWx1ZSA9
IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMxKTsKKyAgICAgICAgICAgIEpTVmFs
dWUqIHNyYzJWYWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMyKTsKKyAg
ICAgICAgICAgIGludDMyX3QgdmFsdWU7CisgICAgICAgICAgICBpZiAoc3JjMVZhbHVlICYmICgo
dmFsdWUgPSBKU0ltbWVkaWF0ZTo6aW50VmFsdWUoc3JjMVZhbHVlKSkgPiAwKSkgeworICAgICAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgWDg2OjplYXgsIGkpOworICAg
ICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7Cisg
ICAgICAgICAgICAgICAgZW1pdEZhc3RBcml0aERlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKKyAg
ICAgICAgICAgICAgICBfXyBpbXVsbF9pMzJyKFg4Njo6ZWF4LCB2YWx1ZSwgWDg2OjplYXgpOwor
ICAgICAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCks
IGkpKTsKKyAgICAgICAgICAgICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUoWDg2Ojpl
YXgpOworICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoc3JjMlZhbHVlICYmICgodmFsdWUgPSBKU0ltbWVkaWF0ZTo6aW50
VmFsdWUoc3JjMlZhbHVlKSkgPiAwKSkgeworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjMSwgWDg2OjplYXgsIGkpOworICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7CisgICAgICAgICAgICAgICAgZW1pdEZhc3RB
cml0aERlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKKyAgICAgICAgICAgICAgICBfXyBpbXVsbF9p
MzJyKFg4Njo6ZWF4LCB2YWx1ZSwgWDg2OjplYXgpOworICAgICAgICAgICAgICAgIG1fc2xvd0Nh
c2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKKyAgICAgICAgICAgICAgICBl
bWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUoWDg2OjplYXgpOworICAgICAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgIGNvbXBpbGVCaW5hcnlBcml0aE9wKG9wX211bCwgaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgaW5zdHJ1Y3Rpb25baSArIDNd
LnUub3BlcmFuZCwgT3BlcmFuZFR5cGVzOjpmcm9tSW50KGluc3RydWN0aW9uW2kgKyA0XS51Lm9w
ZXJhbmQpLCBpKTsKKworICAgICAgICAgICAgaSArPSA1OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXdfZnVuYzogeworICAgICAgICAgICAgRnVuY0Rl
Y2xOb2RlKiBmdW5jID0gKG1fY29kZUJsb2NrLT5mdW5jdGlvbnNbaW5zdHJ1Y3Rpb25baSArIDJd
LnUub3BlcmFuZF0pLmdldCgpOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGZ1bmMpLCAwKTsKKyAgICAgICAgICAgIGVtaXRDVElD
YWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbmV3X2Z1bmMpOworICAgICAgICAgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAg
ICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
b3BfY2FsbDoKKyAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAgIGNhc2Ugb3BfY29u
c3RydWN0OiB7CisgICAgICAgICAgICBjb21waWxlT3BDYWxsKG9wY29kZUlELCBpbnN0cnVjdGlv
biArIGksIGksIGNhbGxMaW5rSW5mb0luZGV4KyspOworICAgICAgICAgICAgaSArPSAob3Bjb2Rl
SUQgPT0gb3BfY29uc3RydWN0ID8gNyA6IDUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9nZXRfZ2xvYmFsX3ZhcjogeworICAgICAgICAgICAgSlNWYXJp
YWJsZU9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+
KGluc3RydWN0aW9uW2kgKyAyXS51LmpzQ2VsbCk7CisgICAgICAgICAgICBfXyBtb3ZsX2kzMnIo
YXNJbnRlZ2VyKGdsb2JhbE9iamVjdCksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIGVtaXRHZXRW
YXJpYWJsZU9iamVjdFJlZ2lzdGVyKFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVy
YW5kLCBYODY6OmVheCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRfZ2xvYmFsX3Zhcjogewor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5v
cGVyYW5kLCBYODY6OmVkeCwgaSk7CisgICAgICAgICAgICBKU1ZhcmlhYmxlT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oaW5zdHJ1Y3Rpb25baSAr
IDFdLnUuanNDZWxsKTsKKyAgICAgICAgICAgIF9fIG1vdmxfaTMycihhc0ludGVnZXIoZ2xvYmFs
T2JqZWN0KSwgWDg2OjplYXgpOworICAgICAgICAgICAgZW1pdFB1dFZhcmlhYmxlT2JqZWN0UmVn
aXN0ZXIoWDg2OjplZHgsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3BfZ2V0X3Njb3BlZF92YXI6IHsKKyAgICAgICAgICAgIGludCBza2lwID0gaW5z
dHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCArIG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNo
YWluOworCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFJlZ2lzdGVyRmlsZTo6
U2NvcGVDaGFpbiwgWDg2OjplYXgsIGkpOworICAgICAgICAgICAgd2hpbGUgKHNraXAtLSkKKyAg
ICAgICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChTY29wZUNoYWluTm9kZSwgbmV4
dCksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisKKyAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERf
T0ZGU0VUKFNjb3BlQ2hhaW5Ob2RlLCBvYmplY3QpLCBYODY6OmVheCwgWDg2OjplYXgpOworICAg
ICAgICAgICAgZW1pdEdldFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIoWDg2OjplYXgsIGluc3RydWN0
aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBp
ICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1
dF9zY29wZWRfdmFyOiB7CisgICAgICAgICAgICBpbnQgc2tpcCA9IGluc3RydWN0aW9uW2kgKyAy
XS51Lm9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbjsKKworICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4sIFg4
Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rp
b25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOworICAgICAgICAgICAgd2hpbGUgKHNr
aXAtLSkKKyAgICAgICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChTY29wZUNoYWlu
Tm9kZSwgbmV4dCksIFg4Njo6ZWR4LCBYODY6OmVkeCk7CisKKyAgICAgICAgICAgIF9fIG1vdmxf
bXIoRklFTERfT0ZGU0VUKFNjb3BlQ2hhaW5Ob2RlLCBvYmplY3QpLCBYODY6OmVkeCwgWDg2Ojpl
ZHgpOworICAgICAgICAgICAgZW1pdFB1dFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIoWDg2OjplYXgs
IFg4Njo6ZWR4LCBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkg
Kz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfdGVh
cl9vZmZfYWN0aXZhdGlvbjogeworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOworICAg
ICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF90ZWFyX29mZl9hY3Rp
dmF0aW9uKTsKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3BfdGVhcl9vZmZfYXJndW1lbnRzOiB7CisgICAgICAgICAgICBl
bWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3RlYXJfb2ZmX2FyZ3VtZW50cyk7Cisg
ICAgICAgICAgICBpICs9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX3JldDogeworICAgICAgICAgICAgLy8gV2UgY291bGQgSklUIGdlbmVyYXRlIHRo
ZSBkZXJlZiwgb25seSBjYWxsaW5nIG91dCB0byBDIHdoZW4gdGhlIHJlZmNvdW50IGhpdHMgemVy
by4KKyAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbikKKyAg
ICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3JldF9zY29w
ZUNoYWluKTsKKworICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgaW4gJWVheC4KKyAg
ICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZCwgWDg2OjplYXgsIGkpOworCisgICAgICAgICAgICAvLyBHcmFiIHRoZSByZXR1cm4gYWRk
cmVzcy4KKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoUmVnaXN0ZXJGaWxlOjpS
ZXR1cm5QQywgWDg2OjplZHgsIGkpOworCisgICAgICAgICAgICAvLyBSZXN0b3JlIG91ciBjYWxs
ZXIncyAiciIuCisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFJlZ2lzdGVyRmls
ZTo6Q2FsbGVyRnJhbWUsIFg4Njo6ZWRpLCBpKTsKKworICAgICAgICAgICAgLy8gUmV0dXJuLgor
ICAgICAgICAgICAgX18gcHVzaGxfcihYODY6OmVkeCk7CisgICAgICAgICAgICBfXyByZXQoKTsK
KworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9uZXdfYXJyYXk6IHsKKyAgICAgICAgICAgIF9fIGxlYWxfbXIoc2l6ZW9m
KFJlZ2lzdGVyKSAqIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWRpLCBYODY6
OmVkeCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCAwKTsKKyAgICAgICAg
ICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA0
KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbmV3X2Fy
cmF5KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Jlc29sdmU6IHsKKyAgICAgICAgICAgIElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZF0pOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgMCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2Fs
bChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmUpOworICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAg
IGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
Y29uc3RydWN0X3ZlcmlmeTogeworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7CisKKyAgICAgICAgICAg
IF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKKyAgICAgICAg
ICAgIEptcFNyYyBpc0ltbWVkaWF0ZSA9IF9fIGpuZSgpOworICAgICAgICAgICAgX18gbW92bF9t
cihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7
CisgICAgICAgICAgICBfXyBjbXBsX2kzMm0oT2JqZWN0VHlwZSwgRklFTERfT0ZGU0VUKFN0cnVj
dHVyZSwgbV90eXBlSW5mbykgKyBGSUVMRF9PRkZTRVQoVHlwZUluZm8sIG1fdHlwZSksIFg4Njo6
ZWN4KTsKKyAgICAgICAgICAgIEptcFNyYyBpc09iamVjdCA9IF9fIGplKCk7CisKKyAgICAgICAg
ICAgIF9fIGxpbmsoaXNJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCwg
aSk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAx
XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgX18gbGluayhpc09iamVjdCwgX18gbGFiZWwoKSk7
CisKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDogeworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplYXgsIGluc3RydWN0
aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVkeCwgaSk7CisgICAgICAgICAgICBlbWl0RmFzdEFy
aXRoSW1tVG9JbnQoWDg2OjplZHgpOworICAgICAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVk
aWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5k
KFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKKyAgICAgICAgICAgIF9fIGNtcGxfaTMybShy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2ludGVycHJldGVyLT5tX2pzQXJyYXlWcHRyKSwg
WDg2OjplYXgpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnko
X18gam5lKCksIGkpKTsKKworICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBhcnJheTsgZ2V0IHRo
ZSBtX3N0b3JhZ2UgcG9pbnRlciBpbnRvIGVjeCwgdGhlbiBjaGVjayBpZiB0aGUgaW5kZXggaXMg
YmVsb3cgdGhlIGZhc3QgY3V0b2ZmCisgICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNF
VChKU0FycmF5LCBtX3N0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplY3gpOworICAgICAgICAgICAg
X18gY21wbF9ybShYODY6OmVkeCwgRklFTERfT0ZGU0VUKEpTQXJyYXksIG1fZmFzdEFjY2Vzc0N1
dG9mZiksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2Fz
ZUVudHJ5KF9fIGpiZSgpLCBpKSk7CisKKyAgICAgICAgICAgIC8vIEdldCB0aGUgdmFsdWUgZnJv
bSB0aGUgdmVjdG9yCisgICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSwgWDg2OjplY3gsIFg4Njo6ZWR4LCBzaXplb2YoSlNWYWx1ZSop
LCBYODY6OmVheCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2Z1bmM6IHsKKyAgICAg
ICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5z
dHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZF0pOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Nv
bnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgMCk7CisgICAgICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVfZnVuYyk7CisgICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJh
bmQsIFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3N1YjogeworICAgICAgICAgICAg
Y29tcGlsZUJpbmFyeUFyaXRoT3Aob3Bfc3ViLCBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5k
LCBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVy
YW5kLCBPcGVyYW5kVHlwZXM6OmZyb21JbnQoaW5zdHJ1Y3Rpb25baSArIDRdLnUub3BlcmFuZCks
IGkpOworICAgICAgICAgICAgaSArPSA1OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsOiB7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1
Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOworICAgICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgIGVtaXRGYXN0
QXJpdGhJbW1Ub0ludChYODY6OmVkeCk7CisgICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1t
ZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBl
bmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOworICAgICAgICAgICAgX18gY21wbF9pMzJt
KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG1faW50ZXJwcmV0ZXItPm1fanNBcnJheVZwdHIp
LCBYODY6OmVheCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRy
eShfXyBqbmUoKSwgaSkpOworCisgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGFycmF5OyBnZXQg
dGhlIG1fc3RvcmFnZSBwb2ludGVyIGludG8gZWN4LCB0aGVuIGNoZWNrIGlmIHRoZSBpbmRleCBp
cyBiZWxvdyB0aGUgZmFzdCBjdXRvZmYKKyAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZG
U0VUKEpTQXJyYXksIG1fc3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7CisgICAgICAgICAg
ICBfXyBjbXBsX3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoSlNBcnJheSwgbV9mYXN0QWNjZXNz
Q3V0b2ZmKSwgWDg2OjplYXgpOworICAgICAgICAgICAgSm1wU3JjIGluRmFzdFZlY3RvciA9IF9f
IGphKCk7CisgICAgICAgICAgICAvLyBObzsgb2ggd2VsbCwgY2hlY2sgaWYgdGhlIGFjY2VzcyBp
ZiB3aXRoaW4gdGhlIHZlY3RvciAtIGlmIHNvLCB3ZSBtYXkgc3RpbGwgYmUgb2theS4KKyAgICAg
ICAgICAgIF9fIGNtcGxfcm0oWDg2OjplZHgsIEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2UsIG1f
dmVjdG9yTGVuZ3RoKSwgWDg2OjplY3gpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5k
KFNsb3dDYXNlRW50cnkoX18gamJlKCksIGkpKTsKKworICAgICAgICAgICAgLy8gVGhpcyBpcyBh
IHdyaXRlIHRvIHRoZSBzbG93IHBhcnQgb2YgdGhlIHZlY3RvcjsgZmlyc3QsIHdlIGhhdmUgdG8g
Y2hlY2sgaWYgdGhpcyB3b3VsZCBiZSB0aGUgZmlyc3Qgd3JpdGUgdG8gdGhpcyBsb2NhdGlvbi4K
KyAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgaW5pdGlhbCB3
cml0ZSB0byBhcnJheTsgaW5jcmVtZW50IHRoZSB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBh
cnJheSwgYW5kIHBvdGVudGlhbGx5IHVwZGF0ZSBmYXN0IGFjY2VzcyBjdXRvZmYuIAorICAgICAg
ICAgICAgX18gY21wbF9pOG0oMCwgRklFTERfT0ZGU0VUKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pLCBYODY6OmVjeCwgWDg2OjplZHgsIHNpemVvZihKU1ZhbHVlKikpOworICAgICAgICAgICAg
bV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gamUoKSwgaSkpOworCisgICAgICAg
ICAgICAvLyBBbGwgZ29vZCAtIHB1dCB0aGUgdmFsdWUgaW50byB0aGUgYXJyYXkuCisgICAgICAg
ICAgICBfXyBsaW5rKGluRmFzdFZlY3RvciwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWF4
LCBpKTsKKyAgICAgICAgICAgIF9fIG1vdmxfcm0oWDg2OjplYXgsIEZJRUxEX09GRlNFVChBcnJh
eVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSwgWDg2OjplY3gsIFg4Njo6ZWR4LCBzaXplb2YoSlNWYWx1
ZSopKTsKKyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIENUSV9DT01QSUxFX0JJTkFSWV9PUChvcF9sZXNzZXEpCisgICAgICAgIGNhc2Ug
b3BfbG9vcF9pZl90cnVlOiB7CisgICAgICAgICAgICBlbWl0U2xvd1NjcmlwdENoZWNrKGkpOwor
CisgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVy
YW5kOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7CisKKyAgICAgICAgICAgIF9fIGNtcGxfaTMycihh
c0ludGVnZXIoSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKKyAgICAg
ICAgICAgIEptcFNyYyBpc1plcm8gPSBfXyBqZSgpOworICAgICAgICAgICAgX18gdGVzdGxfaTMy
cihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAg
IG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGpuZSgpLCBpICsgMiArIHRhcmdldCkpOwor
CisgICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjp0cnVlSW1t
ZWRpYXRlKCkpLCBYODY6OmVheCk7CisgICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBU
YWJsZShfXyBqZSgpLCBpICsgMiArIHRhcmdldCkpOworICAgICAgICAgICAgX18gY21wbF9pMzJy
KGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6ZmFsc2VJbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKKyAg
ICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7
CisKKyAgICAgICAgICAgIF9fIGxpbmsoaXNaZXJvLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAg
IGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9OworICAgICAgICBjYXNlIG9w
X3Jlc29sdmVfYmFzZTogeworICAgICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSk7CisgICAg
ICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4o
aWRlbnQpLCAwKTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlf
b3BfcmVzb2x2ZV9iYXNlKTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5z
dHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDM7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25lZ2F0ZTogeworICAgICAg
ICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJd
LnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50
ZXJwcmV0ZXI6OmN0aV9vcF9uZWdhdGUpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0gMzsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9z
a2lwOiB7CisgICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKTsKKyAgICAgICAgICAgIGVt
aXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDAp
OworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGluc3RydWN0aW9uW2kgKyAzXS51
Lm9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbiwgNCk7CisgICAgICAg
ICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Jlc29sdmVfc2tpcCk7Cisg
ICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9yZXNvbHZlX2dsb2JhbDogeworICAgICAgICAgICAgLy8gRmFz
dCBjYXNlCisgICAgICAgICAgICB1bnNpZ25lZCBnbG9iYWxPYmplY3QgPSBhc0ludGVnZXIoaW5z
dHJ1Y3Rpb25baSArIDJdLnUuanNDZWxsKTsKKyAgICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFu
ZF0pOworICAgICAgICAgICAgdm9pZCogc3RydWN0dXJlQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGluc3RydWN0aW9uICsgaSArIDQpOworICAgICAgICAgICAgdm9pZCogb2Zmc2V0
QWRkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGluc3RydWN0aW9uICsgaSArIDUpOworCisg
ICAgICAgICAgICAvLyBDaGVjayBTdHJ1Y3R1cmUgb2YgZ2xvYmFsIG9iamVjdAorICAgICAgICAg
ICAgX18gbW92bF9pMzJyKGdsb2JhbE9iamVjdCwgWDg2OjplYXgpOworICAgICAgICAgICAgX18g
bW92bF9tcihzdHJ1Y3R1cmVBZGRyZXNzLCBYODY6OmVkeCk7CisgICAgICAgICAgICBfXyBjbXBs
X3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4
KTsKKyAgICAgICAgICAgIEptcFNyYyBub01hdGNoID0gX18gam5lKCk7IC8vIFN0cnVjdHVyZXMg
ZG9uJ3QgbWF0Y2gKKworICAgICAgICAgICAgLy8gTG9hZCBjYWNoZWQgcHJvcGVydHkKKyAgICAg
ICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTR2xvYmFsT2JqZWN0LCBtX3Byb3BlcnR5
U3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICBfXyBtb3ZsX21yKG9m
ZnNldEFkZHIsIFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIF9fIG1vdmxfbXIoMCwgWDg2OjplYXgs
IFg4Njo6ZWR4LCBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVheCk7CisgICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAg
ICAgICAgSm1wU3JjIGVuZCA9IF9fIGptcCgpOworCisgICAgICAgICAgICAvLyBTbG93IGNhc2UK
KyAgICAgICAgICAgIF9fIGxpbmsobm9NYXRjaCwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBl
bWl0UHV0Q1RJQXJnQ29uc3RhbnQoZ2xvYmFsT2JqZWN0LCAwKTsKKyAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDQpOwor
ICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQ+KGluc3RydWN0aW9uICsgaSksIDgpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50
ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlX2dsb2JhbCk7CisgICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAg
X18gbGluayhlbmQsIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgaSArPSA2OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgQ1RJX0NPTVBJTEVfQklOQVJZX09QKG9wX2Rp
dikKKyAgICAgICAgY2FzZSBvcF9wcmVfZGVjOiB7CisgICAgICAgICAgICBpbnQgc3JjRHN0ID0g
aW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVheCwgaSk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOworICAgICAgICAgICAgX18gc3VibF9pOHIoZ2V0
RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZShKU0ltbWVkaWF0ZTo6b25lSW1tZWRpYXRlKCkpLCBY
ODY6OmVheCk7CisgICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShf
XyBqbygpLCBpKSk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7
CisgICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX2pubGVzczogeworICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5z
dHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIEpTVmFsdWUqIHNyYzJpbW0g
PSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3Bl
cmFuZCk7CisgICAgICAgICAgICBpZiAoc3JjMmltbSkgeworICAgICAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplZHgs
IGkpOworICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVk
eCwgaSk7CisgICAgICAgICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihzcmMyaW1tKSwg
WDg2OjplZHgpOworICAgICAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9f
IGpnZSgpLCBpICsgMyArIHRhcmdldCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkp
OworICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwg
aSk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWR4
LCBpKTsKKyAgICAgICAgICAgICAgICBfXyBjbXBsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7Cisg
ICAgICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gamdlKCksIGkgKyAz
ICsgdGFyZ2V0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25vdDogeworICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBY
ODY6OmVheCwgaSk7CisgICAgICAgICAgICBfXyB4b3JsX2k4cihKU0ltbWVkaWF0ZTo6RnVsbFRh
Z1R5cGVCb29sLCBYODY6OmVheCk7CisgICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRp
YXRlOjpGdWxsVGFnVHlwZU1hc2ssIFg4Njo6ZWF4KTsgLy8gaTg/CisgICAgICAgICAgICBtX3Ns
b3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOworICAgICAgICAgICAg
X18geG9ybF9pOHIoKEpTSW1tZWRpYXRlOjpGdWxsVGFnVHlwZUJvb2wgfCBKU0ltbWVkaWF0ZTo6
RXh0ZW5kZWRQYXlsb2FkQml0Qm9vbFZhbHVlKSwgWDg2OjplYXgpOworICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAg
ICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfamZhbHNlOiB7CisgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlv
bltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7CisKKyAgICAgICAgICAg
IF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSksIFg4
Njo6ZWF4KTsKKyAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGplKCks
IGkgKyAyICsgdGFyZ2V0KSk7CisgICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRl
OjpUYWdCaXRUeXBlSW50ZWdlciwgWDg2OjplYXgpOworICAgICAgICAgICAgSm1wU3JjIGlzTm9u
WmVybyA9IF9fIGpuZSgpOworCisgICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKEpT
SW1tZWRpYXRlOjpmYWxzZUltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOworICAgICAgICAgICAgbV9q
bXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gamUoKSwgaSArIDIgKyB0YXJnZXQpKTsKKyAgICAg
ICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6OnRydWVJbW1lZGlhdGUo
KSksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVu
dHJ5KF9fIGpuZSgpLCBpKSk7CisKKyAgICAgICAgICAgIF9fIGxpbmsoaXNOb25aZXJvLCBfXyBs
YWJlbCgpKTsKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9OworICAgICAgICBjYXNlIG9wX2plcV9udWxsOiB7CisgICAgICAgICAgICB1bnNpZ25lZCBz
cmMgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQg
dGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKKworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgIF9fIHRl
c3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIEpt
cFNyYyBpc0ltbWVkaWF0ZSA9IF9fIGpueigpOworCisgICAgICAgICAgICBfXyBtb3ZsX21yKEZJ
RUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsKKyAg
ICAgICAgICAgIF9fIHRlc3RsX2kzMm0oTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRklFTERfT0ZG
U0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX2ZsYWdzKSwgWDg2OjplY3gpOworICAgICAgICAg
ICAgX18gc2V0bnpfcihYODY6OmVheCk7CisKKyAgICAgICAgICAgIEptcFNyYyB3YXNOb3RJbW1l
ZGlhdGUgPSBfXyBqbXAoKTsKKworICAgICAgICAgICAgX18gbGluayhpc0ltbWVkaWF0ZSwgX18g
bGFiZWwoKSk7CisKKyAgICAgICAgICAgIF9fIG1vdmxfaTMycih+SlNJbW1lZGlhdGU6OkV4dGVu
ZGVkVGFnQml0VW5kZWZpbmVkLCBYODY6OmVjeCk7CisgICAgICAgICAgICBfXyBhbmRsX3JyKFg4
Njo6ZWF4LCBYODY6OmVjeCk7CisgICAgICAgICAgICBfXyBjbXBsX2kzMnIoSlNJbW1lZGlhdGU6
OkZ1bGxUYWdUeXBlTnVsbCwgWDg2OjplY3gpOworICAgICAgICAgICAgX18gc2V0ZV9yKFg4Njo6
ZWF4KTsKKworICAgICAgICAgICAgX18gbGluayh3YXNOb3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkp
OworCisgICAgICAgICAgICBfXyBtb3Z6YmxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICAg
ICAgICAgIF9fIGNtcGxfaTMycigwLCBYODY6OmVheCk7CisgICAgICAgICAgICBtX2ptcFRhYmxl
LmFwcGVuZChKbXBUYWJsZShfXyBqbnooKSwgaSArIDIgKyB0YXJnZXQpKTsgICAgICAgICAgICAK
KworICAgICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH07Cisg
ICAgICAgIGNhc2Ugb3Bfam5lcV9udWxsOiB7CisgICAgICAgICAgICB1bnNpZ25lZCBzcmMgPSBp
bnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0
ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKKworICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihzcmMsIFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgIF9fIHRlc3RsX2kz
MnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIEptcFNyYyBp
c0ltbWVkaWF0ZSA9IF9fIGpueigpOworCisgICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09G
RlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsKKyAgICAgICAg
ICAgIF9fIHRlc3RsX2kzMm0oTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRklFTERfT0ZGU0VUKFN0
cnVjdHVyZSwgbV90eXBlSW5mby5tX2ZsYWdzKSwgWDg2OjplY3gpOworICAgICAgICAgICAgX18g
c2V0el9yKFg4Njo6ZWF4KTsKKworICAgICAgICAgICAgSm1wU3JjIHdhc05vdEltbWVkaWF0ZSA9
IF9fIGptcCgpOworCisgICAgICAgICAgICBfXyBsaW5rKGlzSW1tZWRpYXRlLCBfXyBsYWJlbCgp
KTsKKworICAgICAgICAgICAgX18gbW92bF9pMzJyKH5KU0ltbWVkaWF0ZTo6RXh0ZW5kZWRUYWdC
aXRVbmRlZmluZWQsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIGFuZGxfcnIoWDg2OjplYXgs
IFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIGNtcGxfaTMycihKU0ltbWVkaWF0ZTo6RnVsbFRh
Z1R5cGVOdWxsLCBYODY6OmVjeCk7CisgICAgICAgICAgICBfXyBzZXRuZV9yKFg4Njo6ZWF4KTsK
KworICAgICAgICAgICAgX18gbGluayh3YXNOb3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOworCisg
ICAgICAgICAgICBfXyBtb3Z6YmxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAg
IF9fIGNtcGxfaTMycigwLCBYODY6OmVheCk7CisgICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVu
ZChKbXBUYWJsZShfXyBqbnooKSwgaSArIDIgKyB0YXJnZXQpKTsgICAgICAgICAgICAKKworICAg
ICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9wb3N0X2luYzogeworICAgICAgICAgICAgaW50IHNyY0RzdCA9IGluc3RydWN0aW9u
W2kgKyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
Y0RzdCwgWDg2OjplYXgsIGkpOworICAgICAgICAgICAgX18gbW92bF9ycihYODY6OmVheCwgWDg2
OjplZHgpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4
LCBpKTsKKyAgICAgICAgICAgIF9fIGFkZGxfaThyKGdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlh
dGUoSlNJbW1lZGlhdGU6Om9uZUltbWVkaWF0ZSgpKSwgWDg2OjplZHgpOworICAgICAgICAgICAg
bV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam8oKSwgaSkpOworICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIFg4Njo6ZWR4KTsKKyAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Cisg
ICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIG9wX3VuZXhwZWN0ZWRfbG9hZDogeworICAgICAgICAgICAgSlNWYWx1ZSogdiA9IG1f
Y29kZUJsb2NrLT51bmV4cGVjdGVkQ29uc3RhbnRzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJh
bmRdOworICAgICAgICAgICAgX18gbW92bF9pMzJyKGFzSW50ZWdlcih2KSwgWDg2OjplYXgpOwor
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5v
cGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3BfanNyOiB7CisgICAgICAgICAgICBpbnQgcmV0QWRkckRzdCA9
IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgdGFyZ2V0ID0g
aW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIF9fIG1vdmxfaTMybSgw
LCBzaXplb2YoUmVnaXN0ZXIpICogcmV0QWRkckRzdCwgWDg2OjplZGkpOworICAgICAgICAgICAg
Sm1wRHN0IGFkZHJQb3NpdGlvbiA9IF9fIGxhYmVsKCk7CisgICAgICAgICAgICBtX2ptcFRhYmxl
LmFwcGVuZChKbXBUYWJsZShfXyBqbXAoKSwgaSArIDIgKyB0YXJnZXQpKTsKKyAgICAgICAgICAg
IEptcERzdCBzcmV0VGFyZ2V0ID0gX18gbGFiZWwoKTsKKyAgICAgICAgICAgIG1fanNyU2l0ZXMu
YXBwZW5kKEpTUkluZm8oYWRkclBvc2l0aW9uLCBzcmV0VGFyZ2V0KSk7CisgICAgICAgICAgICBp
ICs9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Ny
ZXQ6IHsKKyAgICAgICAgICAgIF9fIGptcF9tKHNpemVvZihSZWdpc3RlcikgKiBpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kLCBYODY6OmVkaSk7CisgICAgICAgICAgICBpICs9IDI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2VxOiB7CisgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5k
LCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOwor
ICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtcyhYODY6OmVheCwgWDg2Ojpl
ZHgsIGkpOworICAgICAgICAgICAgX18gY21wbF9ycihYODY6OmVkeCwgWDg2OjplYXgpOworICAg
ICAgICAgICAgX18gc2V0ZV9yKFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIF9fIG1vdnpibF9ycihY
ODY6OmVheCwgWDg2OjplYXgpOworICAgICAgICAgICAgZW1pdFRhZ0FzQm9vbEltbWVkaWF0ZShY
ODY6OmVheCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9sc2hpZnQ6IHsKKyAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6
ZWF4LCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVjeCwgaSk7CisgICAgICAg
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOworICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWN4LCBpKTsKKyAgICAgICAgICAg
IGVtaXRGYXN0QXJpdGhJbW1Ub0ludChYODY6OmVheCk7CisgICAgICAgICAgICBlbWl0RmFzdEFy
aXRoSW1tVG9JbnQoWDg2OjplY3gpOworICAgICAgICAgICAgX18gc2hsbF9DTHIoWDg2OjplYXgp
OworICAgICAgICAgICAgZW1pdEZhc3RBcml0aEludFRvSW1tT3JTbG93Q2FzZShYODY6OmVheCwg
aSk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAx
XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9iaXRhbmQ6IHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IHNyYzEgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWdu
ZWQgc3JjMiA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNp
Z25lZCBkc3QgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaWYg
KEpTVmFsdWUqIHZhbHVlID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzEpKSB7
CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMyLCBYODY6OmVheCwg
aSk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4
LCBpKTsKKyAgICAgICAgICAgICAgICBfXyBhbmRsX2kzMnIoYXNJbnRlZ2VyKHZhbHVlKSwgWDg2
OjplYXgpOyAvLyBGSVhNRTogbWFrZSBpdCBtb3JlIG9idmlvdXMgdGhpcyBpcyByZWx5aW5nIG9u
IHRoZSBmb3JtYXQgb2YgSlNJbW1lZGlhdGUKKyAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKEpTVmFsdWUqIHZhbHVlID0g
Z2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzIpKSB7CisgICAgICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBYODY6OmVheCwgaSk7CisgICAgICAgICAgICAg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAg
ICAgICBfXyBhbmRsX2kzMnIoYXNJbnRlZ2VyKHZhbHVlKSwgWDg2OjplYXgpOworICAgICAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgWDg2OjplYXgs
IHNyYzIsIFg4Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgICAgICBfXyBhbmRsX3JyKFg4Njo6ZWR4
LCBYODY6OmVheCk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVt
KFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICs9IDU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3JzaGlmdDogeworICAgICAgICAgICAgdW5z
aWduZWQgc3JjMSA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1
bnNpZ25lZCBzcmMyID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKKyAgICAgICAgICAg
IGlmIChKU1ZhbHVlKiB2YWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMy
KSkgeworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgWDg2Ojpl
YXgsIGkpOworICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6
OmVheCwgaSk7CisgICAgICAgICAgICAgICAgLy8gTWFzayB3aXRoIDB4MWYgYXMgcGVyIGVjbWEt
MjYyIDExLjcuMiBzdGVwIDcuCisgICAgICAgICAgICAgICAgX18gc2FybF9pOHIoSlNJbW1lZGlh
dGU6OmdldFRydW5jYXRlZFVJbnQzMih2YWx1ZSkgJiAweDFmLCBYODY6OmVheCk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNy
YzEsIFg4Njo6ZWF4LCBzcmMyLCBYODY6OmVjeCwgaSk7CisgICAgICAgICAgICAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplY3gsIGkpOworICAgICAgICAgICAgICAgIGVt
aXRGYXN0QXJpdGhJbW1Ub0ludChYODY6OmVjeCk7CisgICAgICAgICAgICAgICAgX18gc2FybF9D
THIoWDg2OjplYXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZW1pdEZhc3RBcml0aFBv
dGVudGlhbGx5UmVUYWdJbW1lZGlhdGUoWDg2OjplYXgpOworICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAg
IGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
Yml0bm90OiB7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7CisgICAgICAgICAgICBfXyB4b3JsX2k4cih+
SlNJbW1lZGlhdGU6OlRhZ0JpdFR5cGVJbnRlZ2VyLCBYODY6OmVheCk7CisgICAgICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAg
ICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9yZXNvbHZlX3dpdGhfYmFzZTogeworICAgICAgICAgICAgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgM10udS5vcGVy
YW5kXSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZD4oaWRlbnQpLCAwKTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVy
cHJldGVyOjpjdGlfb3BfcmVzb2x2ZV93aXRoX2Jhc2UpOworICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVkeCk7Cisg
ICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9w
ZXJhbmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6IHsKKyAgICAgICAgICAgIEZ1bmNFeHBy
Tm9kZSogZnVuYyA9IChtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByZXNzaW9uc1tpbnN0cnVjdGlv
bltpICsgMl0udS5vcGVyYW5kXSkuZ2V0KCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29u
c3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oZnVuYyksIDApOworICAgICAgICAgICAg
ZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9uZXdfZnVuY19leHApOworICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5k
KTsKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2Ugb3BfbW9kOiB7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSAr
IDNdLnUub3BlcmFuZCwgWDg2OjplY3gsIGkpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEltbU51bShYODY6OmVjeCwgaSk7CisgICAgICAgICAgICBlbWl0RmFzdEFyaXRoRGVUYWdJ
bW1lZGlhdGUoWDg2OjplYXgpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dD
YXNlRW50cnkoZW1pdEZhc3RBcml0aERlVGFnSW1tZWRpYXRlSnVtcElmWmVybyhYODY6OmVjeCks
IGkpKTsKKyAgICAgICAgICAgIF9fIGNkcSgpOworICAgICAgICAgICAgX18gaWRpdmxfcihYODY6
OmVjeCk7CisgICAgICAgICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUoWDg2OjplZHgp
OworICAgICAgICAgICAgX18gbW92bF9ycihYODY6OmVkeCwgWDg2OjplYXgpOworICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsK
KyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3BfanRydWU6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3Ry
dWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsKKworICAgICAg
ICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgp
KSwgWDg2OjplYXgpOworICAgICAgICAgICAgSm1wU3JjIGlzWmVybyA9IF9fIGplKCk7CisgICAg
ICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgWDg2
OjplYXgpOworICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gam5lKCks
IGkgKyAyICsgdGFyZ2V0KSk7CisKKyAgICAgICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIo
SlNJbW1lZGlhdGU6OnRydWVJbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIG1f
am1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGplKCksIGkgKyAyICsgdGFyZ2V0KSk7CisgICAg
ICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjpmYWxzZUltbWVkaWF0
ZSgpKSwgWDg2OjplYXgpOworICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoX18gam5lKCksIGkpKTsKKworICAgICAgICAgICAgX18gbGluayhpc1plcm8sIF9fIGxh
YmVsKCkpOworICAgICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgQ1RJX0NPTVBJTEVfQklOQVJZX09QKG9wX2xlc3MpCisgICAgICAgIGNhc2Ug
b3BfbmVxOiB7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlv
bltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFu
ZCwgWDg2OjplZHgsIGkpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVt
cyhYODY6OmVheCwgWDg2OjplZHgsIGkpOworICAgICAgICAgICAgX18gY21wbF9ycihYODY6OmVh
eCwgWDg2OjplZHgpOworCisgICAgICAgICAgICBfXyBzZXRuZV9yKFg4Njo6ZWF4KTsKKyAgICAg
ICAgICAgIF9fIG1vdnpibF9ycihYODY6OmVheCwgWDg2OjplYXgpOworICAgICAgICAgICAgZW1p
dFRhZ0FzQm9vbEltbWVkaWF0ZShYODY6OmVheCk7CisKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisKKyAgICAgICAgICAg
IGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
cG9zdF9kZWM6IHsKKyAgICAgICAgICAgIGludCBzcmNEc3QgPSBpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kOworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIFg4
Njo6ZWF4LCBpKTsKKyAgICAgICAgICAgIF9fIG1vdmxfcnIoWDg2OjplYXgsIFg4Njo6ZWR4KTsK
KyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7Cisg
ICAgICAgICAgICBfXyBzdWJsX2k4cihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKEpTSW1t
ZWRpYXRlOjpvbmVJbW1lZGlhdGUoKSksIFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIG1fc2xvd0Nh
c2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKKyAgICAgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVkeCk7CisgICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAg
ICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgQ1RJX0NP
TVBJTEVfQklOQVJZX09QKG9wX3Vyc2hpZnQpCisgICAgICAgIGNhc2Ugb3BfYml0eG9yOiB7Cisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMl0udS5v
cGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplZHgs
IGkpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtcyhYODY6OmVheCwg
WDg2OjplZHgsIGkpOworICAgICAgICAgICAgX18geG9ybF9ycihYODY6OmVkeCwgWDg2OjplYXgp
OworICAgICAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKKyAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZCk7CisgICAgICAgICAgICBpICs9IDU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIG9wX25ld19yZWdleHA6IHsKKyAgICAgICAgICAgIFJlZ0V4cCogcmVn
RXhwID0gbV9jb2RlQmxvY2stPnJlZ2V4cHNbaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZF0u
Z2V0KCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZD4ocmVnRXhwKSwgMCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRl
cnByZXRlcjo6Y3RpX29wX25ld19yZWdleHApOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0g
MzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfYml0b3I6
IHsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAy
XS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6
OmVkeCwgaSk7CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW1zKFg4Njo6
ZWF4LCBYODY6OmVkeCwgaSk7CisgICAgICAgICAgICBfXyBvcmxfcnIoWDg2OjplZHgsIFg4Njo6
ZWF4KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDU7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3Rocm93OiB7CisgICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAw
LCBYODY6OmVjeCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3Rp
X29wX3Rocm93KTsKKyAgICAgICAgICAgIF9fIGFkZGxfaThyKDB4MjAsIFg4Njo6ZXNwKTsKKyAg
ICAgICAgICAgIF9fIHBvcGxfcihYODY6OmVieCk7CisgICAgICAgICAgICBfXyBwb3BsX3IoWDg2
OjplZGkpOworICAgICAgICAgICAgX18gcG9wbF9yKFg4Njo6ZXNpKTsKKyAgICAgICAgICAgIF9f
IHJldCgpOworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9nZXRfcG5hbWVzOiB7CisgICAgICAgICAgICBlbWl0UHV0Q1RJ
QXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBY
ODY6OmVjeCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29w
X2dldF9wbmFtZXMpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVj
dGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbmV4dF9wbmFtZTogeworICAgICAg
ICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJd
LnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOworICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0g
aW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGks
IEludGVycHJldGVyOjpjdGlfb3BfbmV4dF9wbmFtZSk7CisgICAgICAgICAgICBfXyB0ZXN0bF9y
cihYODY6OmVheCwgWDg2OjplYXgpOworICAgICAgICAgICAgSm1wU3JjIGVuZE9mSXRlciA9IF9f
IGplKCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUo
X18gam1wKCksIGkgKyAzICsgdGFyZ2V0KSk7CisgICAgICAgICAgICBfXyBsaW5rKGVuZE9mSXRl
ciwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1c2hfc2NvcGU6IHsKKyAgICAgICAgICAgIGVt
aXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQsIDAsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVy
OjpjdGlfb3BfcHVzaF9zY29wZSk7CisgICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3BvcF9zY29wZTogeworICAgICAgICAg
ICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wb3Bfc2NvcGUpOworICAgICAg
ICAgICAgaSArPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgQ1RJ
X0NPTVBJTEVfVU5BUllfT1Aob3BfdHlwZW9mKQorICAgICAgICBDVElfQ09NUElMRV9VTkFSWV9P
UChvcF9pc191bmRlZmluZWQpCisgICAgICAgIENUSV9DT01QSUxFX1VOQVJZX09QKG9wX2lzX2Jv
b2xlYW4pCisgICAgICAgIENUSV9DT01QSUxFX1VOQVJZX09QKG9wX2lzX251bWJlcikKKyAgICAg
ICAgQ1RJX0NPTVBJTEVfVU5BUllfT1Aob3BfaXNfc3RyaW5nKQorICAgICAgICBDVElfQ09NUElM
RV9VTkFSWV9PUChvcF9pc19vYmplY3QpCisgICAgICAgIENUSV9DT01QSUxFX1VOQVJZX09QKG9w
X2lzX2Z1bmN0aW9uKQorICAgICAgICBjYXNlIG9wX3N0cmljdGVxOiB7CisgICAgICAgICAgICBj
b21waWxlT3BTdHJpY3RFcShpbnN0cnVjdGlvbiArIGksIGksIE9wU3RyaWN0RXEpOworICAgICAg
ICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBvcF9uc3RyaWN0ZXE6IHsKKyAgICAgICAgICAgIGNvbXBpbGVPcFN0cmljdEVxKGluc3RydWN0
aW9uICsgaSwgaSwgT3BOU3RyaWN0RXEpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF90b19qc251bWJlcjogeworICAg
ICAgICAgICAgaW50IHNyY1ZSZWcgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworICAg
ICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCBYODY6OmVheCwgaSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ0Jp
dFR5cGVJbnRlZ2VyLCBYODY6OmVheCk7CisgICAgICAgICAgICBKbXBTcmMgd2FzSW1tZWRpYXRl
ID0gX18gam56KCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChY
ODY6OmVheCwgaSwgc3JjVlJlZyk7CisKKyAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZG
U0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwgWDg2OjplY3gpOworICAgICAgICAg
ICAgX18gY21wbF9pMzJtKE51bWJlclR5cGUsIEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlw
ZUluZm8ubV90eXBlKSwgWDg2OjplY3gpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX3Ns
b3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBfXyBsaW5rKHdhc0ltbWVkaWF0ZSwgX18gbGFiZWwoKSk7CisKKyAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFu
ZCk7CisgICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIG9wX2luOiB7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7Cisg
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltp
ICsgM10udS5vcGVyYW5kLCA0LCBYODY6OmVjeCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChp
LCBJbnRlcnByZXRlcjo6Y3RpX29wX2luKTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDQ7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1c2hfbmV3
X3Njb3BlOiB7CisgICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKTsKKyAgICAgICAgICAg
IGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCks
IDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1pdENU
SUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXNoX25ld19zY29wZSk7CisgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwor
ICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9jYXRjaDogeworICAgICAgICAgICAgZW1pdEdldENUSVBhcmFtKENUSV9BUkdT
X2NhbGxGcmFtZSwgWDg2OjplZGkpOyAvLyBlZGkgOj0gcgorICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAg
IGkgKz0gMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bf
am1wX3Njb3BlczogeworICAgICAgICAgICAgdW5zaWduZWQgY291bnQgPSBpbnN0cnVjdGlvbltp
ICsgMV0udS5vcGVyYW5kOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGNvdW50
LCAwKTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bfam1w
X3Njb3Blcyk7CisgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsg
Ml0udS5vcGVyYW5kOworICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18g
am1wKCksIGkgKyAyICsgdGFyZ2V0KSk7CisgICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9ieV9pbmRleDogeworICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDFdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Nv
bnN0YW50KGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDQpOworICAgICAgICAgICAgZW1p
dFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFu
ZCwgOCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6
OmN0aV9vcF9wdXRfYnlfaW5kZXgpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOiB7CisgICAgICAg
ICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgc2NydXRpbmVlID0gaW5zdHJ1Y3Rpb25b
aSArIDNdLnUub3BlcmFuZDsKKworICAgICAgICAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9y
IHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KKyAgICAg
ICAgICAgIFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5pbW1lZGlh
dGVTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAgICAgICAgICAgbV9zd2l0Y2hlcy5h
cHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgaSwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVj
b3JkOjpJbW1lZGlhdGUpKTsKKyAgICAgICAgICAgIGp1bXBUYWJsZS0+Y3RpT2Zmc2V0cy5ncm93
KGp1bXBUYWJsZS0+YnJhbmNoT2Zmc2V0cy5zaXplKCkpOworCisgICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIDAsIFg4Njo6ZWN4KTsKKyAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudCh0YWJsZUluZGV4LCA0KTsKKyAgICAgICAgICAg
IGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bfc3dpdGNoX2ltbSk7CisgICAgICAg
ICAgICBfXyBqbXBfcihYODY6OmVheCk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOiB7CisgICAg
ICAgICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBpbnN0cnVjdGlvbltpICsg
Ml0udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgc2NydXRpbmVlID0gaW5zdHJ1Y3Rp
b25baSArIDNdLnUub3BlcmFuZDsKKworICAgICAgICAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUg
Zm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KKyAg
ICAgICAgICAgIFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5jaGFy
YWN0ZXJTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAgICAgICAgICAgbV9zd2l0Y2hl
cy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgaSwgZGVmYXVsdE9mZnNldCwgU3dpdGNo
UmVjb3JkOjpDaGFyYWN0ZXIpKTsKKyAgICAgICAgICAgIGp1bXBUYWJsZS0+Y3RpT2Zmc2V0cy5n
cm93KGp1bXBUYWJsZS0+YnJhbmNoT2Zmc2V0cy5zaXplKCkpOworCisgICAgICAgICAgICBlbWl0
UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIDAsIFg4Njo6ZWN4KTsKKyAg
ICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudCh0YWJsZUluZGV4LCA0KTsKKyAgICAgICAg
ICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bfc3dpdGNoX2NoYXIpOworICAg
ICAgICAgICAgX18gam1wX3IoWDg2OjplYXgpOworICAgICAgICAgICAgaSArPSA0OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOiB7
CisgICAgICAgICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBpbnN0cnVjdGlv
bltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgc2NydXRpbmVlID0gaW5z
dHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKKworICAgICAgICAgICAgLy8gY3JlYXRlIGp1bXAg
dGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVu
dC4KKyAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2Nr
LT5zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOworICAgICAgICAgICAgbV9zd2l0
Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgaSwgZGVmYXVsdE9mZnNldCkpOwor
CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUs
IDAsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudCh0YWJsZUlu
ZGV4LCA0KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bf
c3dpdGNoX3N0cmluZyk7CisgICAgICAgICAgICBfXyBqbXBfcihYODY6OmVheCk7CisgICAgICAg
ICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IG9wX2RlbF9ieV92YWw6IHsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJl
Z2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKKyAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAz
XS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIElu
dGVycHJldGVyOjpjdGlfb3BfZGVsX2J5X3ZhbCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSAr
PSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9wdXRf
Z2V0dGVyOiB7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rlcihp
bnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7CisgICAgICAgICAgICBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9u
W2kgKyAyXS51Lm9wZXJhbmRdKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDQpOworICAgICAgICAgICAgZW1pdFB1
dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwg
OCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0
aV9vcF9wdXRfZ2V0dGVyKTsKKyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHV0X3NldHRlcjogeworICAgICAgICAgICAg
ZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3Bl
cmFuZCwgMCwgWDg2OjplY3gpOworICAgICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSk7Cisg
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZD4oaWRlbnQpLCA0KTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDgsIFg4Njo6ZWN4KTsKKyAgICAgICAg
ICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHV0X3NldHRlcik7CisgICAg
ICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIG9wX25ld19lcnJvcjogeworICAgICAgICAgICAgSlNWYWx1ZSogbWVzc2FnZSA9IG1fY29k
ZUJsb2NrLT51bmV4cGVjdGVkQ29uc3RhbnRzW2luc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmRd
OworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGluc3RydWN0aW9uW2kgKyAyXS51
Lm9wZXJhbmQsIDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGFzSW50ZWdl
cihtZXNzYWdlKSwgNCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQobV9jb2Rl
QmxvY2stPmxpbmVOdW1iZXJGb3JWUEMoJmluc3RydWN0aW9uW2ldKSwgOCk7CisgICAgICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX25ld19lcnJvcik7CisgICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9kZWJ1ZzogeworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50
KGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIDApOworICAgICAgICAgICAgZW1pdFB1dENU
SUFyZ0NvbnN0YW50KGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDQpOworICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDgp
OworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9kZWJ1Zyk7
CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX2VxX251bGw6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRzdCA9IGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25lZCBzcmMxID0gaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKKworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMxLCBYODY6OmVheCwgaSk7CisgICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpT
SW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7CisgICAgICAgICAgICBKbXBTcmMgaXNJbW1l
ZGlhdGUgPSBfXyBqbnooKTsKKworICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQo
SlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7CisgICAgICAgICAgICBf
XyB0ZXN0bF9pMzJtKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIEZJRUxEX09GRlNFVChTdHJ1Y3R1
cmUsIG1fdHlwZUluZm8ubV9mbGFncyksIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIHNldG56
X3IoWDg2OjplYXgpOworCisgICAgICAgICAgICBKbXBTcmMgd2FzTm90SW1tZWRpYXRlID0gX18g
am1wKCk7CisKKyAgICAgICAgICAgIF9fIGxpbmsoaXNJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwor
CisgICAgICAgICAgICBfXyBtb3ZsX2kzMnIofkpTSW1tZWRpYXRlOjpFeHRlbmRlZFRhZ0JpdFVu
ZGVmaW5lZCwgWDg2OjplY3gpOworICAgICAgICAgICAgX18gYW5kbF9ycihYODY6OmVheCwgWDg2
OjplY3gpOworICAgICAgICAgICAgX18gY21wbF9pMzJyKEpTSW1tZWRpYXRlOjpGdWxsVGFnVHlw
ZU51bGwsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIHNldGVfcihYODY6OmVheCk7CisKKyAg
ICAgICAgICAgIF9fIGxpbmsod2FzTm90SW1tZWRpYXRlLCBfXyBsYWJlbCgpKTsKKworICAgICAg
ICAgICAgX18gbW92emJsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICBlbWl0
VGFnQXNCb29sSW1tZWRpYXRlKFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKworICAgICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9uZXFfbnVsbDogeworICAgICAgICAgICAgdW5z
aWduZWQgZHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVu
c2lnbmVkIHNyYzEgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworCisgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIFg4Njo6ZWF4LCBpKTsKKyAgICAgICAgICAg
IF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKKyAgICAgICAg
ICAgIEptcFNyYyBpc0ltbWVkaWF0ZSA9IF9fIGpueigpOworCisgICAgICAgICAgICBfXyBtb3Zs
X21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgsIFg4Njo6ZWN4
KTsKKyAgICAgICAgICAgIF9fIHRlc3RsX2kzMm0oTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgRklF
TERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX2ZsYWdzKSwgWDg2OjplY3gpOworICAg
ICAgICAgICAgX18gc2V0el9yKFg4Njo6ZWF4KTsKKworICAgICAgICAgICAgSm1wU3JjIHdhc05v
dEltbWVkaWF0ZSA9IF9fIGptcCgpOworCisgICAgICAgICAgICBfXyBsaW5rKGlzSW1tZWRpYXRl
LCBfXyBsYWJlbCgpKTsKKworICAgICAgICAgICAgX18gbW92bF9pMzJyKH5KU0ltbWVkaWF0ZTo6
RXh0ZW5kZWRUYWdCaXRVbmRlZmluZWQsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIGFuZGxf
cnIoWDg2OjplYXgsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIF9fIGNtcGxfaTMycihKU0ltbWVk
aWF0ZTo6RnVsbFRhZ1R5cGVOdWxsLCBYODY6OmVjeCk7CisgICAgICAgICAgICBfXyBzZXRuZV9y
KFg4Njo6ZWF4KTsKKworICAgICAgICAgICAgX18gbGluayh3YXNOb3RJbW1lZGlhdGUsIF9fIGxh
YmVsKCkpOworCisgICAgICAgICAgICBfXyBtb3Z6YmxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsK
KyAgICAgICAgICAgIGVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUoWDg2OjplYXgpOworICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgICAgICAgICBpICs9IDM7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2VudGVyOiB7Cisg
ICAgICAgICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5pdGlh
bGl6ZSBvdXIgY29uc3RhbnQKKyAgICAgICAgICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUg
cG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZworICAgICAgICAgICAg
Ly8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgorICAgICAgICAg
ICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZhcnMgKyBtX2NvZGVCbG9jay0+Y29u
c3RhbnRSZWdpc3RlcnMuc2l6ZSgpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGog
PCBjb3VudDsgKytqKQorICAgICAgICAgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIoaik7CisKKyAg
ICAgICAgICAgIGkrPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBvcF9lbnRlcl93aXRoX2FjdGl2YXRpb246IHsKKyAgICAgICAgICAgIC8vIEV2ZW4gdGhv
dWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAorICAg
ICAgICAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5u
ZWNlc3NhcmlseSBwcm9sb25naW5nCisgICAgICAgICAgICAvLyBvYmplY3QgbGlmZXRpbWUgYW5k
IGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCisgICAgICAgICAgICBzaXplX3QgY291bnQgPSBtX2Nv
ZGVCbG9jay0+bnVtVmFycyArIG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7
CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGNvdW50OyArK2opCisgICAgICAg
ICAgICAgICAgZW1pdEluaXRSZWdpc3RlcihqKTsKKworICAgICAgICAgICAgZW1pdENUSUNhbGwo
aSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXNoX2FjdGl2YXRpb24pOworICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKworICAg
ICAgICAgICAgaSs9IDI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6IHsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksICht
X2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycyA9PSAxKSA/IEludGVycHJldGVyOjpjdGlfb3BfY3Jl
YXRlX2FyZ3VtZW50c19ub19wYXJhbXMgOiBJbnRlcnByZXRlcjo6Y3RpX29wX2NyZWF0ZV9hcmd1
bWVudHMpOworICAgICAgICAgICAgaSArPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBvcF9jb252ZXJ0X3RoaXM6IHsKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkp
OworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoWDg2OjplYXgsIGkp
OworICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVy
ZSksIFg4Njo6ZWF4LCBYODY6OmVkeCk7CisgICAgICAgICAgICBfXyB0ZXN0bF9pMzJtKE5lZWRz
VGhpc0NvbnZlcnNpb24sIEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV9mbGFn
cyksIFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVu
dHJ5KF9fIGpueigpLCBpKSk7CisKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6IHsKKyAg
ICAgICAgICAgIGVtaXRHZXRDVElQYXJhbShDVElfQVJHU19wcm9maWxlclJlZmVyZW5jZSwgWDg2
OjplYXgpOworICAgICAgICAgICAgX18gY21wbF9pMzJtKDAsIFg4Njo6ZWF4KTsKKyAgICAgICAg
ICAgIEptcFNyYyBub1Byb2ZpbGVyID0gX18gamUoKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElB
cmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIDAsIFg4
Njo6ZWF4KTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bf
cHJvZmlsZV93aWxsX2NhbGwpOworICAgICAgICAgICAgX18gbGluayhub1Byb2ZpbGVyLCBfXyBs
YWJlbCgpKTsKKworICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9wcm9maWxlX2RpZF9jYWxsOiB7CisgICAgICAgICAgICBl
bWl0R2V0Q1RJUGFyYW0oQ1RJX0FSR1NfcHJvZmlsZXJSZWZlcmVuY2UsIFg4Njo6ZWF4KTsKKyAg
ICAgICAgICAgIF9fIGNtcGxfaTMybSgwLCBYODY6OmVheCk7CisgICAgICAgICAgICBKbXBTcmMg
bm9Qcm9maWxlciA9IF9fIGplKCk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAwLCBYODY6OmVheCk7Cisg
ICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Byb2ZpbGVfZGlk
X2NhbGwpOworICAgICAgICAgICAgX18gbGluayhub1Byb2ZpbGVyLCBfXyBsYWJlbCgpKTsKKwor
ICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOgorICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9j
aGFpbjoKKyAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2VuZXJpYzoKKyAgICAgICAgY2FzZSBv
cF9nZXRfYnlfaWRfcHJvdG86CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3Q6
CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3NlbGY6CisgICAgICAgIGNhc2Ugb3BfZ2V0X2J5
X2lkX3NlbGZfbGlzdDoKKyAgICAgICAgY2FzZSBvcF9nZXRfc3RyaW5nX2xlbmd0aDoKKyAgICAg
ICAgY2FzZSBvcF9wdXRfYnlfaWRfZ2VuZXJpYzoKKyAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRf
cmVwbGFjZToKKyAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbjoKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJU
KHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCA9PSBtX2NvZGVCbG9jay0+cHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpKTsKKyAgICBBU1NFUlQoY2FsbExpbmtJbmZvSW5kZXgg
PT0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mb3Muc2l6ZSgpKTsKK30KKworCit2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpCit7CisgICAgdW5zaWduZWQgam1wVGFibGVDb3VudCA9
IG1fam1wVGFibGUuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBqbXBUYWJs
ZUNvdW50OyArK2kpCisgICAgICAgIF9fIGxpbmsobV9qbXBUYWJsZVtpXS5mcm9tLCBtX2xhYmVs
c1ttX2ptcFRhYmxlW2ldLnRvXSk7CisgICAgbV9qbXBUYWJsZS5jbGVhcigpOworfQorCisjZGVm
aW5lIENUSV9DT01QSUxFX0JJTkFSWV9PUF9TTE9XX0NBU0UobmFtZSkgXAorICAgIGNhc2UgbmFt
ZTogeyBcCisgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7IFwKKyAgICAg
ICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUu
b3BlcmFuZCwgMCwgWDg2OjplY3gpOyBcCisgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVh
bFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsgXAor
ICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpXyMjbmFtZSk7IFwKKyAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsg
XAorICAgICAgICBpICs9IDQ7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAgICB9CisKKyNkZWZpbmUg
Q1RJX0NPTVBJTEVfQklOQVJZX09QX1NMT1dfQ0FTRV9ET1VCTEVfRU5UUlkobmFtZSkgXAorICAg
IGNhc2UgbmFtZTogeyBcCisgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7
IFwKKyAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7ICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOyBcCisgICAgICAgIGVtaXRQdXRD
VElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDQs
IFg4Njo6ZWN4KTsgXAorICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpXyMj
bmFtZSk7IFwKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kKTsgXAorICAgICAgICBpICs9IDQ7IFwKKyAgICAgICAgYnJlYWs7IFwKKyAg
ICB9CisgICAgCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQoreworICAgIHVu
c2lnbmVkIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCA9IDA7CisgICAgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kZXggPSAwOworCisgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpOworICAgIGZvciAoVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciBpdGVyID0gbV9zbG93Q2FzZXMuYmVnaW4oKTsgaXRlciAhPSBt
X3Nsb3dDYXNlcy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIC8vIEZJWE1FOiBlbmFibGUgcGVl
cGhvbGUgb3B0aW1pemF0aW9ucyBmb3Igc2xvdyBjYXNlcyB3aGVuIGFwcGxpY2FibGUKKyAgICAg
ICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOworCisgICAgICAgIHVuc2lnbmVkIGkgPSBpdGVy
LT50bzsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIHVuc2lnbmVkIGZpcnN0VG8gPSBpOworI2Vu
ZGlmCisKKyAgICAgICAgc3dpdGNoIChPcGNvZGVJRCBvcGNvZGVJRCA9IG1faW50ZXJwcmV0ZXIt
PmdldE9wY29kZUlEKGluc3RydWN0aW9uW2ldLnUub3Bjb2RlKSkgeworICAgICAgICBjYXNlIG9w
X2NvbnZlcnRfdGhpczogeworICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJl
bCgpKTsKKyAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwor
ICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICBlbWl0
Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2NvbnZlcnRfdGhpcyk7CisgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwor
ICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9hZGQ6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRzdCA9IGluc3RydWN0aW9u
W2kgKyAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICB1bnNpZ25lZCBzcmMxID0gaW5zdHJ1Y3Rp
b25baSArIDJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNyYzIgPSBpbnN0cnVj
dGlvbltpICsgM10udS5vcGVyYW5kOworICAgICAgICAgICAgaWYgKEpTVmFsdWUqIHZhbHVlID0g
Z2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzEpKSB7CisgICAgICAgICAgICAgICAg
Sm1wU3JjIG5vdEltbSA9IGl0ZXItPmZyb207CisgICAgICAgICAgICAgICAgX18gbGluaygoKytp
dGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICAgICAgX18gc3VibF9pMzJyKGdl
dERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlhdGUodmFsdWUpLCBYODY6OmVheCk7CisgICAgICAgICAg
ICAgICAgX18gbGluayhub3RJbW0sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzEsIDAsIFg4Njo6ZWN4KTsKKyAgICAgICAg
ICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCA0KTsKKyAgICAgICAgICAgICAgICBlbWl0
Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2FkZCk7CisgICAgICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgfSBlbHNlIGlmIChKU1ZhbHVl
KiB2YWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMyKSkgeworICAgICAg
ICAgICAgICAgIEptcFNyYyBub3RJbW0gPSBpdGVyLT5mcm9tOworICAgICAgICAgICAgICAgIF9f
IGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgICAgIF9fIHN1
YmxfaTMycihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKHZhbHVlKSwgWDg2OjplYXgpOwor
ICAgICAgICAgICAgICAgIF9fIGxpbmsobm90SW1tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzcmMyLCA0LCBYODY6OmVjeCk7CisgICAgICAgICAg
ICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9hZGQpOworICAgICAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gT3BlcmFuZFR5cGVzOjpmcm9t
SW50KGluc3RydWN0aW9uW2kgKyA0XS51Lm9wZXJhbmQpOworICAgICAgICAgICAgICAgIGlmICh0
eXBlcy5maXJzdCgpLm1pZ2h0QmVOdW1iZXIoKSAmJiB0eXBlcy5zZWNvbmQoKS5taWdodEJlTnVt
YmVyKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVCaW5hcnlBcml0aE9wU2xvd0Nhc2Uo
b3BfYWRkLCBpdGVyLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVzLCBpKTsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpICs9IDU7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIG9wX2dldF9ieV92YWw6IHsKKyAgICAgICAgICAgIC8vIFRoZSBz
bG93IGNhc2UgdGhhdCBoYW5kbGVzIGFjY2Vzc2VzIHRvIGFycmF5cyAoYmVsb3cpIG1heSBqdW1w
IGJhY2sgdXAgdG8gaGVyZS4gCisgICAgICAgICAgICBKbXBEc3QgYmVnaW5HZXRCeVZhbFNsb3cg
PSBfXyBsYWJlbCgpOworCisgICAgICAgICAgICBKbXBTcmMgbm90SW1tID0gaXRlci0+ZnJvbTsK
KyAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAg
ICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBl
bWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIF9fIGxp
bmsobm90SW1tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2Ojpl
YXgsIDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgNCk7CisgICAgICAg
ICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV92YWwpOworICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kKTsKKyAgICAgICAgICAgIF9fIGxpbmsoX18gam1wKCksIG1fbGFiZWxzW2kgKyA0XSk7CisK
KyAgICAgICAgICAgIC8vIFRoaXMgaXMgc2xvdyBjYXNlIHRoYXQgaGFuZGxlcyBhY2Nlc3NlcyB0
byBhcnJheXMgYWJvdmUgdGhlIGZhc3QgY3V0LW9mZi4KKyAgICAgICAgICAgIC8vIEZpcnN0LCBj
aGVjayBpZiB0aGlzIGlzIGFuIGFjY2VzcyB0byB0aGUgdmVjdG9yCisgICAgICAgICAgICBfXyBs
aW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIF9fIGNtcGxfcm0o
WDg2OjplZHgsIEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2UsIG1fdmVjdG9yTGVuZ3RoKSwgWDg2
OjplY3gpOworICAgICAgICAgICAgX18gbGluayhfXyBqYmUoKSwgYmVnaW5HZXRCeVZhbFNsb3cp
OworCisgICAgICAgICAgICAvLyBva2F5LCBtaXNzZWQgdGhlIGZhc3QgcmVnaW9uLCBidXQgaXQg
aXMgc3RpbGwgaW4gdGhlIHZlY3Rvci4gIEdldCB0aGUgdmFsdWUuCisgICAgICAgICAgICBfXyBt
b3ZsX21yKEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSwgWDg2OjplY3gs
IFg4Njo6ZWR4LCBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVjeCk7CisgICAgICAgICAgICAvLyBD
aGVjayB3aGV0aGVyIHRoZSB2YWx1ZSBsb2FkZWQgaXMgemVybzsgaWYgc28gd2UgbmVlZCB0byBy
ZXR1cm4gdW5kZWZpbmVkLgorICAgICAgICAgICAgX18gdGVzdGxfcnIoWDg2OjplY3gsIFg4Njo6
ZWN4KTsKKyAgICAgICAgICAgIF9fIGxpbmsoX18gamUoKSwgYmVnaW5HZXRCeVZhbFNsb3cpOwor
ICAgICAgICAgICAgX18gbW92bF9ycihYODY6OmVjeCwgWDg2OjplYXgpOworICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBYODY6
OmVheCk7CisKKyAgICAgICAgICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3Bfc3ViOiB7CisgICAgICAgICAgICBjb21waWxlQmluYXJ5QXJp
dGhPcFNsb3dDYXNlKG9wX3N1YiwgaXRlciwgaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwg
aW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFu
ZCwgT3BlcmFuZFR5cGVzOjpmcm9tSW50KGluc3RydWN0aW9uW2kgKyA0XS51Lm9wZXJhbmQpLCBp
KTsKKyAgICAgICAgICAgIGkgKz0gNTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2Ugb3BfcnNoaWZ0OiB7CisgICAgICAgICAgICB1bnNpZ25lZCBzcmMyID0gaW5z
dHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJv
bSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBpZiAoZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1l
cmljQXJnKHNyYzIpKQorICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJl
Z2lzdGVyKHNyYzIsIDQsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAg
ICAgIGVtaXRQdXRDVElBcmcoWDg2OjplY3gsIDQpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3BfcnNoaWZ0KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBp
ICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2xz
aGlmdDogeworICAgICAgICAgICAgSm1wU3JjIG5vdEltbTEgPSBpdGVyLT5mcm9tOworICAgICAg
ICAgICAgSm1wU3JjIG5vdEltbTIgPSAoKytpdGVyKS0+ZnJvbTsKKyAgICAgICAgICAgIF9fIGxp
bmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplYXgsIGluc3Ry
dWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWN4LCBpKTsKKyAgICAgICAgICAgIF9fIGxp
bmsobm90SW1tMSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBfXyBsaW5rKG5vdEltbTIsIF9f
IGxhYmVsKCkpOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAg
ICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWN4LCA0KTsKKyAgICAgICAgICAgIGVtaXRDVElD
YWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbHNoaWZ0KTsKKyAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAg
ICBpICs9IDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X2xvb3BfaWZfbGVzczogeworICAgICAgICAgICAgZW1pdFNsb3dTY3JpcHRDaGVjayhpKTsKKwor
ICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFu
ZDsKKyAgICAgICAgICAgIEpTVmFsdWUqIHNyYzJpbW0gPSBnZXRDb25zdGFudEltbWVkaWF0ZU51
bWVyaWNBcmcoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpZiAo
c3JjMmltbSkgeworICAgICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwo
KSk7CisgICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgMCk7CisgICAgICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOworICAgICAgICAgICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3BfbG9vcF9pZl9sZXNzKTsKKyAgICAgICAgICAgICAgICBf
XyB0ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOworICAgICAgICAgICAgICAgIF9fIGxpbmso
X18gam5lKCksIG1fbGFiZWxzW2kgKyAzICsgdGFyZ2V0XSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAg
ICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICAgICAgZW1p
dFB1dENUSUFyZyhYODY6OmVkeCwgNCk7CisgICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwg
SW50ZXJwcmV0ZXI6OmN0aV9vcF9sb29wX2lmX2xlc3MpOworICAgICAgICAgICAgICAgIF9fIHRl
c3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICAgICAgX18gbGluayhfXyBq
bmUoKSwgbV9sYWJlbHNbaSArIDMgKyB0YXJnZXRdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
b3BfcHV0X2J5X2lkOiB7CisgICAgICAgICAgICBpZiAobGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwo
aXRlciwgaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCkpCisgICAgICAgICAgICAgICAgKytp
dGVyOworICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKworICAg
ICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyc1tp
bnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJn
Q29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaWRlbnQpLCA0KTsKKyAgICAgICAg
ICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFy
ZyhYODY6OmVkeCwgOCk7CisgICAgICAgICAgICBKbXBTcmMgY2FsbCA9IGVtaXRDVElDYWxsKGks
IEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X2lkKTsKKworICAgICAgICAgICAgLy8gVHJhY2sg
dGhlIGxvY2F0aW9uIG9mIHRoZSBjYWxsOyB0aGlzIHdpbGwgYmUgdXNlZCB0byByZWNvdmVyIHJl
cGF0Y2ggaW5mb3JtYXRpb24uCisgICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPnByb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25zW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uYnl0
ZWNvZGVJbmRleCA9PSBpKTsKKyAgICAgICAgICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlv
bkluZm9bcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24g
PSBjYWxsOworICAgICAgICAgICAgKytwcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXg7CisK
KyAgICAgICAgICAgIGkgKz0gODsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOiB7CisgICAgICAgICAgICAvLyBBcyBmb3IgdGhlIGhvdCBw
YXRoIG9mIGdldF9ieV9pZCwgYWJvdmUsIHdlIGVuc3VyZSB0aGF0IHdlIGNhbiB1c2UgYW4gYXJj
aGl0ZWN0dXJlIHNwZWNpZmljIG9mZnNldAorICAgICAgICAgICAgLy8gc28gdGhhdCB3ZSBvbmx5
IG5lZWQgdHJhY2sgb25lIHBvaW50ZXIgaW50byB0aGUgc2xvdyBjYXNlIGNvZGUgLSB3ZSB0cmFj
ayBhIHBvaW50ZXIgdG8gdGhlIGxvY2F0aW9uCisgICAgICAgICAgICAvLyBvZiB0aGUgY2FsbCAo
d2hpY2ggd2UgY2FuIHVzZSB0byBsb29rIHVwIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uKSwgYnV0
IHNob3VsZCBhIGFycmF5LWxlbmd0aCBvcgorICAgICAgICAgICAgLy8gcHJvdG90eXBlIGFjY2Vz
cyB0cmFtcG9saW5lIGZhaWwgd2Ugd2FudCB0byBiYWlsIG91dCBiYWNrIHRvIGhlcmUuICBUbyBk
byBzbyB3ZSBjYW4gc3VidHJhY3QgYmFjaworICAgICAgICAgICAgLy8gdGhlIGRpc3RhbmNlIGZy
b20gdGhlIGNhbGwgdG8gdGhlIGhlYWQgb2YgdGhlIHNsb3cgY2FzZS4KKworICAgICAgICAgICAg
aWYgKGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9w
ZXJhbmQpKQorICAgICAgICAgICAgICAgICsraXRlcjsKKyAgICAgICAgICAgIF9fIGxpbmsoaXRl
ci0+ZnJvbSwgX18gbGFiZWwoKSk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICAgICBKbXBE
c3QgY29sZFBhdGhCZWdpbiA9IF9fIGxhYmVsKCk7CisjZW5kaWYgICAgICAgIAorICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAzXS51Lm9w
ZXJhbmRdKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9j
YXN0PHVuc2lnbmVkPihpZGVudCksIDQpOworICAgICAgICAgICAgSm1wU3JjIGNhbGwgPSBlbWl0
Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZCk7CisgICAgICAgICAgICBB
U1NFUlQoWDg2QXNzZW1ibGVyOjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhjb2xkUGF0aEJl
Z2luLCBjYWxsKSA9PSByZXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CisgICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQp
OworCisgICAgICAgICAgICAvLyBUcmFjayB0aGUgbG9jYXRpb24gb2YgdGhlIGNhbGw7IHRoaXMg
d2lsbCBiZSB1c2VkIHRvIHJlY292ZXIgcmVwYXRjaCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAg
IEFTU0VSVChtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbcHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5ieXRlY29kZUluZGV4ID09IGkpOworICAgICAgICAgICAg
bV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9u
SW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGw7CisgICAgICAgICAgICArK3Byb3BlcnR5
QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleDsKKworICAgICAgICAgICAgaSArPSA4OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9sb29wX2lmX2xlc3NlcTogewor
ICAgICAgICAgICAgZW1pdFNsb3dTY3JpcHRDaGVjayhpKTsKKworICAgICAgICAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIEpT
VmFsdWUqIHNyYzJpbW0gPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoaW5zdHJ1Y3Rp
b25baSArIDJdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpZiAoc3JjMmltbSkgeworICAgICAg
ICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgMCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dENU
SUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgNCwg
WDg2OjplY3gpOworICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpj
dGlfb3BfbG9vcF9pZl9sZXNzZXEpOworICAgICAgICAgICAgICAgIF9fIHRlc3RsX3JyKFg4Njo6
ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICAgICAgX18gbGluayhfXyBqbmUoKSwgbV9sYWJl
bHNbaSArIDMgKyB0YXJnZXRdKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgICAgICBfXyBs
aW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6
ZWR4LCA0KTsKKyAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3Rp
X29wX2xvb3BfaWZfbGVzc2VxKTsKKyAgICAgICAgICAgICAgICBfXyB0ZXN0bF9ycihYODY6OmVh
eCwgWDg2OjplYXgpOworICAgICAgICAgICAgICAgIF9fIGxpbmsoX18gam5lKCksIG1fbGFiZWxz
W2kgKyAzICsgdGFyZ2V0XSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICs9IDQ7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3ByZV9pbmM6IHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBKbXBTcmMgbm90SW1tID0gaXRlci0+ZnJvbTsKKyAgICAgICAgICAg
IF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgX18gc3Vi
bF9pOHIoZ2V0RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZShKU0ltbWVkaWF0ZTo6b25lSW1tZWRp
YXRlKCkpLCBYODY6OmVheCk7CisgICAgICAgICAgICBfXyBsaW5rKG5vdEltbSwgX18gbGFiZWwo
KSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAgICAg
IGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHJlX2luYyk7CisgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CisgICAgICAgICAgICBpICs9IDI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6
IHsKKyAgICAgICAgICAgIC8vIE5vcm1hbCBzbG93IGNhc2VzIC0gZWl0aGVyIGlzIG5vdCBhbiBp
bW1lZGlhdGUgaW1tLCBvciBpcyBhbiBhcnJheS4KKyAgICAgICAgICAgIEptcFNyYyBub3RJbW0g
PSBpdGVyLT5mcm9tOworICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFi
ZWwoKSk7CisgICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsK
KyAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2soWDg2OjplZHgpOworICAg
ICAgICAgICAgX18gbGluayhub3RJbW0sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVjeCwg
aSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAgICAg
IGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDQpOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhY
ODY6OmVjeCwgOCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3Rp
X29wX3B1dF9ieV92YWwpOworICAgICAgICAgICAgX18gbGluayhfXyBqbXAoKSwgbV9sYWJlbHNb
aSArIDRdKTsKKworICAgICAgICAgICAgLy8gc2xvdyBjYXNlcyBmb3IgaW1tZWRpYXRlIGludCBh
Y2Nlc3NlcyB0byBhcnJheXMKKyAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9f
IGxhYmVsKCkpOworICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwo
KSk7CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAz
XS51Lm9wZXJhbmQsIFg4Njo6ZWN4LCBpKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2
OjplYXgsIDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgNCk7CisgICAg
ICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWN4LCA4KTsKKyAgICAgICAgICAgIGVtaXRDVElD
YWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X3ZhbF9hcnJheSk7CisKKyAgICAgICAg
ICAgIGkgKz0gNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
b3BfbG9vcF9pZl90cnVlOiB7CisgICAgICAgICAgICBlbWl0U2xvd1NjcmlwdENoZWNrKGkpOwor
CisgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChp
LCBJbnRlcnByZXRlcjo6Y3RpX29wX2p0cnVlKTsKKyAgICAgICAgICAgIF9fIHRlc3RsX3JyKFg4
Njo6ZWF4LCBYODY6OmVheCk7CisgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVj
dGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgX18gbGluayhfXyBqbmUoKSwgbV9s
YWJlbHNbaSArIDIgKyB0YXJnZXRdKTsKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcHJlX2RlYzogeworICAgICAgICAg
ICAgdW5zaWduZWQgc3JjRHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIEptcFNyYyBub3RJbW0gPSBpdGVyLT5mcm9tOworICAgICAgICAgICAgX18gbGluaygo
KytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBfXyBhZGRsX2k4cihnZXRE
ZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKEpTSW1tZWRpYXRlOjpvbmVJbW1lZGlhdGUoKSksIFg4
Njo6ZWF4KTsKKyAgICAgICAgICAgIF9fIGxpbmsobm90SW1tLCBfXyBsYWJlbCgpKTsKKyAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1pdENUSUNh
bGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wcmVfZGVjKTsKKyAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3Bfam5sZXNzOiB7CisgICAgICAgICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOworICAgICAg
ICAgICAgSlNWYWx1ZSogc3JjMmltbSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhp
bnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGlmIChzcmMyaW1tKSB7
CisgICAgICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAg
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCAwKTsKKyAgICAgICAgICAgICAgICBl
bWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVy
YW5kLCA0LCBYODY6OmVjeCk7CisgICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJw
cmV0ZXI6OmN0aV9vcF9qbGVzcyk7CisgICAgICAgICAgICAgICAgX18gdGVzdGxfcnIoWDg2Ojpl
YXgsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgICAgICBfXyBsaW5rKF9fIGplKCksIG1fbGFiZWxz
W2kgKyAzICsgdGFyZ2V0XSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICAgICAgX18gbGlu
aygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICAgICAgZW1pdFB1dENU
SUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVk
eCwgNCk7CisgICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9v
cF9qbGVzcyk7CisgICAgICAgICAgICAgICAgX18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4
KTsKKyAgICAgICAgICAgICAgICBfXyBsaW5rKF9fIGplKCksIG1fbGFiZWxzW2kgKyAzICsgdGFy
Z2V0XSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25vdDogeworICAgICAgICAgICAgX18g
bGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIF9fIHhvcmxfaThyKEpT
SW1tZWRpYXRlOjpGdWxsVGFnVHlwZUJvb2wsIFg4Njo6ZWF4KTsKKyAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJw
cmV0ZXI6OmN0aV9vcF9ub3QpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihp
bnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfamZhbHNlOiB7CisgICAg
ICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgZW1p
dFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRl
cnByZXRlcjo6Y3RpX29wX2p0cnVlKTsKKyAgICAgICAgICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4
LCBYODY6OmVheCk7CisgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltp
ICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgX18gbGluayhfXyBqZSgpLCBtX2xhYmVsc1tp
ICsgMiArIHRhcmdldF0pOyAvLyBpbnZlcnRlZCEKKyAgICAgICAgICAgIGkgKz0gMzsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfcG9zdF9pbmM6IHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIHNyY0RzdCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAg
ICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBlbWl0
UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVy
cHJldGVyOjpjdGlfb3BfcG9zdF9pbmMpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihzcmNEc3QsIFg4Njo6ZWR4KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDM7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2JpdG5vdDogewor
ICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAg
IGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwg
SW50ZXJwcmV0ZXI6OmN0aV9vcF9iaXRub3QpOworICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAgICAgICAgIGkgKz0g
MzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfYml0YW5k
OiB7CisgICAgICAgICAgICB1bnNpZ25lZCBzcmMxID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNyYzIgPSBpbnN0cnVjdGlvbltpICsgM10udS5v
cGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgZHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIGlmIChnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmco
c3JjMSkpIHsKKyAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkp
OworICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzEs
IDAsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCA0
KTsKKyAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2Jp
dGFuZCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAg
ICAgICAgICAgfSBlbHNlIGlmIChnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMikp
IHsKKyAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOworICAg
ICAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgICAg
IGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzIsIDQsIFg4Njo6ZWN4KTsKKyAg
ICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2JpdGFuZCk7
CisgICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVs
KCkpOworICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNy
YzEsIDAsIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4
LCA0KTsKKyAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29w
X2JpdGFuZCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaSArPSA1OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9qdHJ1ZTogeworICAgICAgICAgICAgX18gbGluayhp
dGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2Ojpl
YXgsIDApOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9q
dHJ1ZSk7CisgICAgICAgICAgICBfXyB0ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOworICAg
ICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsK
KyAgICAgICAgICAgIF9fIGxpbmsoX18gam5lKCksIG1fbGFiZWxzW2kgKyAyICsgdGFyZ2V0XSk7
CisgICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX3Bvc3RfZGVjOiB7CisgICAgICAgICAgICB1bnNpZ25lZCBzcmNEc3QgPSBp
bnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgX18gbGluayhpdGVyLT5m
cm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9f
IGxhYmVsKCkpOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7CisgICAg
ICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Bvc3RfZGVjKTsKKyAg
ICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVkeCk7CisgICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQpOworICAgICAgICAgICAgaSArPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF9iaXR4b3I6IHsKKyAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJv
bSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsK
KyAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDQpOworICAgICAgICAgICAgZW1p
dENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9iaXR4b3IpOworICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKKyAgICAg
ICAgICAgIGkgKz0gNTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfYml0b3I6IHsKKyAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwo
KSk7CisgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAgICAg
IGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDQpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwg
SW50ZXJwcmV0ZXI6OmN0aV9vcF9iaXRvcik7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSA1
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9lcTogewor
ICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAg
IGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhY
ODY6OmVkeCwgNCk7CisgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3Rp
X29wX2VxKTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDQ7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX25lcTogeworICAgICAgICAgICAgX18gbGlu
ayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2
OjplYXgsIDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgNCk7CisgICAg
ICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX25lcSk7CisgICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQp
OworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgQ1RJX0NPTVBJTEVfQklOQVJZX09QX1NMT1dfQ0FTRV9ET1VCTEVfRU5UUlkob3Bfc3Ry
aWN0ZXEpOworICAgICAgICBDVElfQ09NUElMRV9CSU5BUllfT1BfU0xPV19DQVNFX0RPVUJMRV9F
TlRSWShvcF9uc3RyaWN0ZXEpOworICAgICAgICBjYXNlIG9wX2luc3RhbmNlb2Y6IHsKKyAgICAg
ICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7CisgICAgICAgICAgICBfXyBs
aW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIF9fIGxpbmsoKCsr
aXRlciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21W
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gp
OworICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rp
b25baSArIDNdLnUub3BlcmFuZCwgNCwgWDg2OjplY3gpOworICAgICAgICAgICAgZW1pdFB1dENU
SUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDRdLnUub3BlcmFuZCwgOCwg
WDg2OjplY3gpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9v
cF9pbnN0YW5jZW9mKTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7CisgICAgICAgICAgICBpICs9IDU7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIG9wX21vZDogeworICAgICAgICAgICAg
Sm1wU3JjIG5vdEltbTEgPSBpdGVyLT5mcm9tOworICAgICAgICAgICAgSm1wU3JjIG5vdEltbTIg
PSAoKytpdGVyKS0+ZnJvbTsKKyAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9f
IGxhYmVsKCkpOworICAgICAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKFg4Njo6
ZWF4KTsKKyAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhSZVRhZ0ltbWVkaWF0ZShYODY6OmVjeCk7
CisgICAgICAgICAgICBfXyBsaW5rKG5vdEltbTEsIF9fIGxhYmVsKCkpOworICAgICAgICAgICAg
X18gbGluayhub3RJbW0yLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgIGVtaXRQdXRDVElBcmco
WDg2OjplYXgsIDApOworICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVjeCwgNCk7Cisg
ICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX21vZCk7CisgICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQpOworICAgICAgICAgICAgaSArPSA0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF9tdWw6IHsKKyAgICAgICAgICAgIGludCBkc3QgPSBpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHNyYzEgPSBpbnN0cnVjdGlvbltp
ICsgMl0udS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHNyYzIgPSBpbnN0cnVjdGlvbltpICsg
M10udS5vcGVyYW5kOworICAgICAgICAgICAgSlNWYWx1ZSogc3JjMVZhbHVlID0gZ2V0Q29uc3Rh
bnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzEpOworICAgICAgICAgICAgSlNWYWx1ZSogc3JjMlZh
bHVlID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzIpOworICAgICAgICAgICAg
aW50MzJfdCB2YWx1ZTsKKyAgICAgICAgICAgIGlmIChzcmMxVmFsdWUgJiYgKCh2YWx1ZSA9IEpT
SW1tZWRpYXRlOjppbnRWYWx1ZShzcmMxVmFsdWUpKSA+IDApKSB7CisgICAgICAgICAgICAgICAg
X18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgICAgICBfXyBsaW5r
KCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKKyAgICAgICAgICAgICAgICAvLyBUaGVyZSBp
cyBhbiBleHRyYSBzbG93IGNhc2UgZm9yIChvcDEgKiAtTikgb3IgKC1OICogb3AyKSwgdG8gY2hl
Y2sgZm9yIDAgc2luY2UgdGhpcyBzaG91bGQgcHJvZHVjZSBhIHJlc3VsdCBvZiAtMC4KKyAgICAg
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzcmMxLCAwLCBYODY6
OmVjeCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIo
c3JjMiwgNCwgWDg2OjplY3gpOworICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVy
cHJldGVyOjpjdGlfb3BfbXVsKTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNyYzJWYWx1ZSAmJiAoKHZhbHVlID0g
SlNJbW1lZGlhdGU6OmludFZhbHVlKHNyYzJWYWx1ZSkpID4gMCkpIHsKKyAgICAgICAgICAgICAg
ICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgICAgIF9fIGxp
bmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOworICAgICAgICAgICAgICAgIC8vIFRoZXJl
IGlzIGFuIGV4dHJhIHNsb3cgY2FzZSBmb3IgKG9wMSAqIC1OKSBvciAoLU4gKiBvcDIpLCB0byBj
aGVjayBmb3IgMCBzaW5jZSB0aGlzIHNob3VsZCBwcm9kdWNlIGEgcmVzdWx0IG9mIC0wLgorICAg
ICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzEsIDAsIFg4
Njo6ZWN4KTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rl
cihzcmMyLCA0LCBYODY6OmVjeCk7CisgICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50
ZXJwcmV0ZXI6OmN0aV9vcF9tdWwpOworICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGNvbXBpbGVC
aW5hcnlBcml0aE9wU2xvd0Nhc2Uob3BfbXVsLCBpdGVyLCBkc3QsIHNyYzEsIHNyYzIsIE9wZXJh
bmRUeXBlczo6ZnJvbUludChpbnN0cnVjdGlvbltpICsgNF0udS5vcGVyYW5kKSwgaSk7CisgICAg
ICAgICAgICBpICs9IDU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGNhc2Ugb3BfY2FsbDoKKyAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgICAgIGNhc2Ug
b3BfY29uc3RydWN0OiB7CisgICAgICAgICAgICBpbnQgZHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBjYWxsZWUgPSBpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25baSArIDNd
LnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGluc3RydWN0aW9u
W2kgKyA0XS51Lm9wZXJhbmQ7CisKKyAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18g
bGFiZWwoKSk7CisKKyAgICAgICAgICAgIC8vIFRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIHNldCB1
cCBvbiB0aGUgaG90IHBhdGggZm9yIG9wX2NhbGxfZXZhbAorICAgICAgICAgICAgaWYgKG9wY29k
ZUlEID09IG9wX2NhbGwpCisgICAgICAgICAgICAgICAgY29tcGlsZU9wQ2FsbFNldHVwQXJncyhp
bnN0cnVjdGlvbiArIGkpOworICAgICAgICAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfY29u
c3RydWN0KQorICAgICAgICAgICAgICAgIGNvbXBpbGVPcENvbnN0cnVjdFNldHVwQXJncyhpbnN0
cnVjdGlvbiArIGkpOworCisgICAgICAgICAgICAvLyBGYXN0IGNoZWNrIGZvciBKUyBmdW5jdGlv
bi4KKyAgICAgICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6
ZWN4KTsKKyAgICAgICAgICAgIEptcFNyYyBjYWxsTGlua0ZhaWxOb3RPYmplY3QgPSBfXyBqbmUo
KTsKKyAgICAgICAgICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPiht
X2ludGVycHJldGVyLT5tX2pzRnVuY3Rpb25WcHRyKSwgWDg2OjplY3gpOworICAgICAgICAgICAg
Sm1wU3JjIGNhbGxMaW5rRmFpbE5vdEpTRnVuY3Rpb24gPSBfXyBqbmUoKTsKKworICAgICAgICAg
ICAgLy8gRmlyc3QsIGluIHRoZSBjYXNlIG9mIGEgY29uc3RydWN0LCBhbGxvY2F0ZSB0aGUgbmV3
IG9iamVjdC4KKyAgICAgICAgICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QpIHsKKyAg
ICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2NvbnN0cnVj
dF9KU0NvbnN0cnVjdCk7CisgICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZWdpc3Rlck9mZnNldCAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGFyZ0Nv
dW50KTsKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgWDg2
OjplY3gsIGkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBfXyBtb3ZsX2kzMnIoYXJn
Q291bnQsIFg4Njo6ZWR4KTsKKworICAgICAgICAgICAgLy8gU3BlY3VsYXRpdmVseSByb2xsIHRo
ZSBjYWxsZnJhbWUsIGFzc3VtaW5nIGFyZ0NvdW50IHdpbGwgbWF0Y2ggdGhlIGFyaXR5LgorICAg
ICAgICAgICAgX18gbW92bF9ybShYODY6OmVkaSwgKFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUg
KyByZWdpc3Rlck9mZnNldCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBY
ODY6OmVkaSk7CisgICAgICAgICAgICBfXyBhZGRsX2kzMnIocmVnaXN0ZXJPZmZzZXQgKiBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6OmVkaSk7CisKKyAgICAgICAgICAg
IG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNh
bGxSZXR1cm5Mb2NhdGlvbiA9CisgICAgICAgICAgICAgICAgZW1pdE5ha2VkQ2FsbChpLCBtX2lu
dGVycHJldGVyLT5tX2N0aVZpcnR1YWxDYWxsUHJlTGluayk7CisKKyAgICAgICAgICAgIEptcFNy
YyBzdG9yZVJlc3VsdEZvckZpcnN0UnVuID0gX18gam1wKCk7CisKKyAgICAgICAgICAgIC8vIFRo
aXMgaXMgdGhlIGFkZHJlc3MgZm9yIHRoZSBjb2xkIHBhdGggKmFmdGVyKiB0aGUgZmlyc3QgcnVu
ICh3aGljaCB0cmllcyB0byBsaW5rIHRoZSBjYWxsKS4KKyAgICAgICAgICAgIG1fY2FsbFN0cnVj
dHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNvbGRQYXRoT3RoZXIg
PSBfXyBsYWJlbCgpOworCisgICAgICAgICAgICAvLyBUaGUgYXJndW1lbnRzIGhhdmUgYmVlbiBz
ZXQgdXAgb24gdGhlIGhvdCBwYXRoIGZvciBvcF9jYWxsX2V2YWwKKyAgICAgICAgICAgIGlmIChv
cGNvZGVJRCA9PSBvcF9jYWxsKQorICAgICAgICAgICAgICAgIGNvbXBpbGVPcENhbGxTZXR1cEFy
Z3MoaW5zdHJ1Y3Rpb24gKyBpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9w
X2NvbnN0cnVjdCkKKyAgICAgICAgICAgICAgICBjb21waWxlT3BDb25zdHJ1Y3RTZXR1cEFyZ3Mo
aW5zdHJ1Y3Rpb24gKyBpKTsKKworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIEpTRnVuY3Rpb25z
LgorICAgICAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2Ojpl
Y3gpOworICAgICAgICAgICAgSm1wU3JjIGlzTm90T2JqZWN0ID0gX18gam5lKCk7CisgICAgICAg
ICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9pbnRlcnByZXRl
ci0+bV9qc0Z1bmN0aW9uVnB0ciksIFg4Njo6ZWN4KTsKKyAgICAgICAgICAgIEptcFNyYyBpc0pT
RnVuY3Rpb24gPSBfXyBqZSgpOworCisgICAgICAgICAgICAvLyBUaGlzIGhhbmRsZXMgaG9zdCBm
dW5jdGlvbnMKKyAgICAgICAgICAgIEptcERzdCBub3RKU0Z1bmN0aW9ubGFiZWwgPSBfXyBsYWJl
bCgpOworICAgICAgICAgICAgX18gbGluayhpc05vdE9iamVjdCwgbm90SlNGdW5jdGlvbmxhYmVs
KTsKKyAgICAgICAgICAgIF9fIGxpbmsoY2FsbExpbmtGYWlsTm90T2JqZWN0LCBub3RKU0Z1bmN0
aW9ubGFiZWwpOworICAgICAgICAgICAgX18gbGluayhjYWxsTGlua0ZhaWxOb3RKU0Z1bmN0aW9u
LCBub3RKU0Z1bmN0aW9ubGFiZWwpOworICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgKChvcGNv
ZGVJRCA9PSBvcF9jb25zdHJ1Y3QpID8gSW50ZXJwcmV0ZXI6OmN0aV9vcF9jb25zdHJ1Y3RfTm90
SlNDb25zdHJ1Y3QgOiBJbnRlcnByZXRlcjo6Y3RpX29wX2NhbGxfTm90SlNGdW5jdGlvbikpOwor
ICAgICAgICAgICAgSm1wU3JjIHdhc05vdEpTRnVuY3Rpb24gPSBfXyBqbXAoKTsKKworICAgICAg
ICAgICAgLy8gTmV4dCwgaGFuZGxlIEpTRnVuY3Rpb25zLi4uCisgICAgICAgICAgICBfXyBsaW5r
KGlzSlNGdW5jdGlvbiwgX18gbGFiZWwoKSk7CisKKyAgICAgICAgICAgIC8vIEZpcnN0LCBpbiB0
aGUgY2FzZSBvZiBhIGNvbnN0cnVjdCwgYWxsb2NhdGUgdGhlIG5ldyBvYmplY3QuCisgICAgICAg
ICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0KSB7CisgICAgICAgICAgICAgICAgZW1p
dENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9jb25zdHJ1Y3RfSlNDb25zdHJ1Y3QpOwor
ICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQgLSBS
ZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgLSBhcmdDb3VudCk7CisgICAgICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIFg4Njo6ZWN4LCBpKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gU3BlY3VsYXRpdmVseSByb2xsIHRoZSBjYWxsZnJh
bWUsIGFzc3VtaW5nIGFyZ0NvdW50IHdpbGwgbWF0Y2ggdGhlIGFyaXR5LgorICAgICAgICAgICAg
X18gbW92bF9ybShYODY6OmVkaSwgKFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUgKyByZWdpc3Rl
ck9mZnNldCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6OmVkaSk7
CisgICAgICAgICAgICBfXyBhZGRsX2kzMnIocmVnaXN0ZXJPZmZzZXQgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6OmVkaSk7CisgICAgICAgICAgICBfXyBtb3ZsX2kz
MnIoYXJnQ291bnQsIFg4Njo6ZWR4KTsKKworICAgICAgICAgICAgZW1pdE5ha2VkQ2FsbChpLCBt
X2ludGVycHJldGVyLT5tX2N0aVZpcnR1YWxDYWxsKTsKKworICAgICAgICAgICAgLy8gUHV0IHRo
ZSByZXR1cm4gdmFsdWUgaW4gZHN0LiBJbiB0aGUgaW50ZXJwcmV0ZXIsIG9wX3JldCBkb2VzIHRo
aXMuCisgICAgICAgICAgICBKbXBEc3Qgc3RvcmVSZXN1bHQgPSBfXyBsYWJlbCgpOworICAgICAg
ICAgICAgX18gbGluayh3YXNOb3RKU0Z1bmN0aW9uLCBzdG9yZVJlc3VsdCk7CisgICAgICAgICAg
ICBfXyBsaW5rKHN0b3JlUmVzdWx0Rm9yRmlyc3RSdW4sIHN0b3JlUmVzdWx0KTsKKyAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworI2lmIEVOQUJMRShDT0RFQkxPQ0tf
U0FNUExJTkcpCisgICAgICAgICAgICBfXyBtb3ZsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZD4obV9jb2RlQmxvY2spLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmNvZGVCbG9ja1Ns
b3QoKSk7CisjZW5kaWYKKyAgICAgICAgICAgICsrY2FsbExpbmtJbmZvSW5kZXg7CisKKyAgICAg
ICAgICAgIGkgKz0gKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IDcgOiA1KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfdG9fanNudW1iZXI6IHsKKyAg
ICAgICAgICAgIGlmIChsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBpbnN0cnVjdGlvbltp
ICsgMl0udS5vcGVyYW5kKSkKKyAgICAgICAgICAgICAgICArK2l0ZXI7CisgICAgICAgICAgICBf
XyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOworCisgICAgICAgICAgICBlbWl0UHV0Q1RJ
QXJnKFg4Njo6ZWF4LCAwKTsKKyAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVy
OjpjdGlfb3BfdG9fanNudW1iZXIpOworCisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgaSArPSAzOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoKGl0ZXIgKyAxKSA9PSBtX3Nsb3dDYXNl
cy5lbmQoKSB8fCBmaXJzdFRvICE9IChpdGVyICsgMSktPnRvLCJOb3QgZW5vdWdoIGp1bXBzIGxp
bmtlZCBpbiBzbG93IGNhc2UgY29kZWdlbi4iKTsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShmaXJzdFRvID09IGl0ZXItPnRvLCAiVG9vIG1hbnkganVtcHMgbGlua2VkIGluIHNsb3cgY2Fz
ZSBjb2RlZ2VuLiIpOworCisgICAgICAgIF9fIGxpbmsoX18gam1wKCksIG1fbGFiZWxzW2ldKTsK
KyAgICB9CisKKyAgICBBU1NFUlQocHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4ID09IG1f
Y29kZUJsb2NrLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCkpOworICAgIEFTU0VS
VChjYWxsTGlua0luZm9JbmRleCA9PSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvcy5zaXplKCkp
OworfQorCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGUoKQoreworI2lmIEVOQUJMRShDT0RFQkxP
Q0tfU0FNUExJTkcpCisgICAgICAgIF9fIG1vdmxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2ln
bmVkPihtX2NvZGVCbG9jayksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+Y29kZUJsb2NrU2xv
dCgpKTsKKyNlbmRpZgorI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCisgICAgICAgIF9fIG1v
dmxfaTMybShtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBs
ZVNsb3QoKSk7CisjZW5kaWYKKworICAgIC8vIENvdWxkIHVzZSBhIHBvcGxfbSwgYnV0IHdvdWxk
IG5lZWQgdG8gb2Zmc2V0IHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gaWYgc28uCisgICAgX18g
cG9wbF9yKFg4Njo6ZWN4KTsKKyAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoWDg2OjplY3gs
IFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMpOworCisgICAgSm1wU3JjIHNsb3dSZWdpc3RlckZpbGVD
aGVjazsKKyAgICBKbXBEc3QgYWZ0ZXJSZWdpc3RlckZpbGVDaGVjazsKKyAgICBpZiAobV9jb2Rl
QmxvY2stPmNvZGVUeXBlID09IEZ1bmN0aW9uQ29kZSkgeworICAgICAgICAvLyBJbiB0aGUgY2Fz
ZSBvZiBhIGZhc3QgbGlua2VkIGNhbGwsIHdlIGRvIG5vdCBzZXQgdGhpcyB1cCBpbiB0aGUgY2Fs
bGVyLgorICAgICAgICBfXyBtb3ZsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9j
b2RlQmxvY2spLCBSZWdpc3RlckZpbGU6OkNvZGVCbG9jayAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSksIFg4Njo6ZWRpKTsKKworICAgICAgICBlbWl0R2V0Q1RJUGFyYW0oQ1RJ
X0FSR1NfcmVnaXN0ZXJGaWxlLCBYODY6OmVheCk7CisgICAgICAgIF9fIGxlYWxfbXIobV9jb2Rl
QmxvY2stPm51bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlciksIFg4Njo6ZWRpLCBY
ODY6OmVkeCk7CisgICAgICAgIF9fIGNtcGxfbXIoRklFTERfT0ZGU0VUKFJlZ2lzdGVyRmlsZSwg
bV9lbmQpLCBYODY6OmVheCwgWDg2OjplZHgpOworICAgICAgICBzbG93UmVnaXN0ZXJGaWxlQ2hl
Y2sgPSBfXyBqZygpOworICAgICAgICBhZnRlclJlZ2lzdGVyRmlsZUNoZWNrID0gX18gbGFiZWwo
KTsKKyAgICB9CisKKyAgICBwcml2YXRlQ29tcGlsZU1haW5QYXNzKCk7CisgICAgcHJpdmF0ZUNv
bXBpbGVMaW5rUGFzcygpOworICAgIHByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCk7CisKKyAgICBp
ZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlID09IEZ1bmN0aW9uQ29kZSkgeworICAgICAgICBfXyBs
aW5rKHNsb3dSZWdpc3RlckZpbGVDaGVjaywgX18gbGFiZWwoKSk7CisgICAgICAgIGVtaXRDVElD
YWxsKDAsIEludGVycHJldGVyOjpjdGlfcmVnaXN0ZXJfZmlsZV9jaGVjayk7CisgICAgICAgIEpt
cFNyYyBiYWNrVG9Cb2R5ID0gX18gam1wKCk7CisgICAgICAgIF9fIGxpbmsoYmFja1RvQm9keSwg
YWZ0ZXJSZWdpc3RlckZpbGVDaGVjayk7CisgICAgfQorCisgICAgQVNTRVJUKG1fam1wVGFibGUu
aXNFbXB0eSgpKTsKKworICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weSgpOworCisg
ICAgLy8gVHJhbnNsYXRlIHZQQyBvZmZzZXRzIGludG8gYWRkcmVzc2VzIGluIEpJVCBnZW5lcmF0
ZWQgY29kZSwgZm9yIHN3aXRjaCB0YWJsZXMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fc3dpdGNoZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3dpdGNoUmVjb3JkIHJlY29yZCA9
IG1fc3dpdGNoZXNbaV07CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSByZWNvcmQu
Ynl0ZWNvZGVJbmRleDsKKworICAgICAgICBpZiAocmVjb3JkLnR5cGUgIT0gU3dpdGNoUmVjb3Jk
OjpTdHJpbmcpIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWNvcmQudHlwZSA9PSBTd2l0Y2hSZWNv
cmQ6OkltbWVkaWF0ZSB8fCByZWNvcmQudHlwZSA9PSBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rlcik7
IAorICAgICAgICAgICAgQVNTRVJUKHJlY29yZC5qdW1wVGFibGUuc2ltcGxlSnVtcFRhYmxlLT5i
cmFuY2hPZmZzZXRzLnNpemUoKSA9PSByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+
Y3RpT2Zmc2V0cy5zaXplKCkpOworCisgICAgICAgICAgICByZWNvcmQuanVtcFRhYmxlLnNpbXBs
ZUp1bXBUYWJsZS0+Y3RpRGVmYXVsdCA9IF9fIGdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9s
YWJlbHNbYnl0ZWNvZGVJbmRleCArIDMgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0pOworCisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgcmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVK
dW1wVGFibGUtPmJyYW5jaE9mZnNldHMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBvZmZzZXQgPSByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+YnJhbmNo
T2Zmc2V0c1tqXTsKKyAgICAgICAgICAgICAgICByZWNvcmQuanVtcFRhYmxlLnNpbXBsZUp1bXBU
YWJsZS0+Y3RpT2Zmc2V0c1tqXSA9IG9mZnNldCA/IF9fIGdldFJlbG9jYXRlZEFkZHJlc3MoY29k
ZSwgbV9sYWJlbHNbYnl0ZWNvZGVJbmRleCArIDMgKyBvZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFi
bGUuc2ltcGxlSnVtcFRhYmxlLT5jdGlEZWZhdWx0OworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHJlY29yZC50eXBlID09IFN3aXRjaFJlY29yZDo6
U3RyaW5nKTsKKworICAgICAgICAgICAgcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1wVGFibGUt
PmN0aURlZmF1bHQgPSBfXyBnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIG1fbGFiZWxzW2J5dGVj
b2RlSW5kZXggKyAzICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsKKworICAgICAgICAgICAgU3Ry
aW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgZW5kID0gcmVjb3JkLmp1
bXBUYWJsZS5zdHJpbmdKdW1wVGFibGUtPm9mZnNldFRhYmxlLmVuZCgpOyAgICAgICAgICAgIAor
ICAgICAgICAgICAgZm9yIChTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVy
YXRvciBpdCA9IHJlY29yZC5qdW1wVGFibGUuc3RyaW5nSnVtcFRhYmxlLT5vZmZzZXRUYWJsZS5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZz
ZXQgPSBpdC0+c2Vjb25kLmJyYW5jaE9mZnNldDsKKyAgICAgICAgICAgICAgICBpdC0+c2Vjb25k
LmN0aU9mZnNldCA9IG9mZnNldCA/IF9fIGdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9sYWJl
bHNbYnl0ZWNvZGVJbmRleCArIDMgKyBvZmZzZXRdKSA6IHJlY29yZC5qdW1wVGFibGUuc3RyaW5n
SnVtcFRhYmxlLT5jdGlEZWZhdWx0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgZm9yIChWZWN0b3I8SGFuZGxlckluZm8+OjppdGVyYXRvciBpdGVyID0gbV9jb2RlQmxv
Y2stPmV4Y2VwdGlvbkhhbmRsZXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jb2RlQmxvY2stPmV4Y2Vw
dGlvbkhhbmRsZXJzLmVuZCgpOyArK2l0ZXIpCisgICAgICAgICBpdGVyLT5uYXRpdmVDb2RlID0g
X18gZ2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX2xhYmVsc1tpdGVyLT50YXJnZXRdKTsKKwor
ICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdp
bigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBpZiAoaXRlci0+
dG8pCisgICAgICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgaXRlci0+ZnJvbSwgaXRl
ci0+dG8pOworICAgICAgICBtX2NvZGVCbG9jay0+Y3RpUmV0dXJuQWRkcmVzc1ZQQ01hcC5hZGQo
X18gZ2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBpdGVyLT5mcm9tKSwgaXRlci0+Ynl0ZWNvZGVJ
bmRleCk7CisgICAgfQorCisgICAgLy8gTGluayBhYnNvbHV0ZSBhZGRyZXNzZXMgZm9yIGpzcgor
ICAgIGZvciAoVmVjdG9yPEpTUkluZm8+OjppdGVyYXRvciBpdGVyID0gbV9qc3JTaXRlcy5iZWdp
bigpOyBpdGVyICE9IG1fanNyU2l0ZXMuZW5kKCk7ICsraXRlcikKKyAgICAgICAgWDg2QXNzZW1i
bGVyOjpsaW5rQWJzb2x1dGVBZGRyZXNzKGNvZGUsIGl0ZXItPmFkZHJQb3NpdGlvbiwgaXRlci0+
dGFyZ2V0KTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+cHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3RydWN0dXJl
U3R1YkluZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNb
aV07CisgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gWDg2QXNzZW1ibGVyOjpnZXRS
ZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9baV0u
Y2FsbFJldHVybkxvY2F0aW9uKTsKKyAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBYODZBc3Nl
bWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0
aW9uSW5mb1tpXS5ob3RQYXRoQmVnaW4pOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mb3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
Q2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mb3NbaV07CisgICAg
ICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRB
ZGRyZXNzKGNvZGUsIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uY2FsbFJl
dHVybkxvY2F0aW9uKTsKKyAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBYODZBc3NlbWJsZXI6
OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9u
SW5mb1tpXS5ob3RQYXRoQmVnaW4pOworICAgICAgICBpbmZvLmhvdFBhdGhPdGhlciA9IFg4NkFz
c2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29t
cGlsYXRpb25JbmZvW2ldLmhvdFBhdGhPdGhlcik7CisgICAgICAgIGluZm8uY29sZFBhdGhPdGhl
ciA9IFg4NkFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX2NhbGxTdHJ1Y3R1
cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmNvbGRQYXRoT3RoZXIpOworICAgIH0KKworICAgIG1f
Y29kZUJsb2NrLT5jdGlDb2RlID0gY29kZTsKK30KKwordm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
R2V0QnlJZFNlbGYoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZzZXQsIHZv
aWQqIHJldHVybkFkZHJlc3MpCit7CisgICAgLy8gQ2hlY2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0
aGUgcmlnaHQgU3RydWN0dXJlLgorICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01h
c2ssIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMSA9IF9fIGpuZSgpOworICAg
IEptcFNyYyBmYWlsdXJlQ2FzZXMyID0gY2hlY2tTdHJ1Y3R1cmUoWDg2OjplYXgsIHN0cnVjdHVy
ZSk7CisKKyAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0RGlyZWN0T2Zmc2V0CisgICAgX18g
bW92bF9tcihGSUVMRF9PRkZTRVQoSlNPYmplY3QsIG1fcHJvcGVydHlTdG9yYWdlKSwgWDg2Ojpl
YXgsIFg4Njo6ZWF4KTsKKyAgICBfXyBtb3ZsX21yKGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1Zh
bHVlKiksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgX18gcmV0KCk7CisKKyAgICB2b2lkKiBj
b2RlID0gX18gZXhlY3V0YWJsZUNvcHkoKTsKKworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2Rl
LCBmYWlsdXJlQ2FzZXMxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3Rp
X29wX2dldF9ieV9pZF9zZWxmX2ZhaWwpKTsKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwg
ZmFpbHVyZUNhc2VzMiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9v
cF9nZXRfYnlfaWRfc2VsZl9mYWlsKSk7CisgICAgCisgICAgbV9jb2RlQmxvY2stPmdldFN0dWJJ
bmZvKHJldHVybkFkZHJlc3MpLnN0dWJSb3V0aW5lID0gY29kZTsKKyAgICAKKyAgICBjdGlSZXBh
dGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBjb2RlKTsKK30KKwordm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1
Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0
dXJuQWRkcmVzcywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisjaWYgVVNFKENUSV9SRVBBVENI
X1BJQykKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5nZXRTdHVi
SW5mbyhyZXR1cm5BZGRyZXNzKTsKKworICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcmVwYXRjaCBt
b3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMu
CisgICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlz
dCkpOworCisgICAgLy8gVGhlIHByb3RvdHlwZSBvYmplY3QgZGVmaW5pdGVseSBleGlzdHMgKGlm
IHRoaXMgc3R1YiBleGlzdHMgdGhlIENvZGVCbG9jayBpcyByZWZlcmVuY2luZyBhIFN0cnVjdHVy
ZSB0aGF0IGlzCisgICAgLy8gcmVmZXJlbmNpbmcgdGhlIHByb3RvdHlwZSBvYmplY3QgLSBsZXQn
cyBzcGVjdWxhdGl2ZWx5IGxvYWQgaXQncyB0YWJsZSBuaWNlIGFuZCBlYXJseSEpCisgICAgSlNP
YmplY3QqIHByb3RvT2JqZWN0ID0gYXNPYmplY3Qoc3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29r
dXAoY2FsbEZyYW1lKSk7CisgICAgUHJvcGVydHlTdG9yYWdlKiBwcm90b1Byb3BlcnR5U3RvcmFn
ZSA9ICZwcm90b09iamVjdC0+bV9wcm9wZXJ0eVN0b3JhZ2U7CisgICAgX18gbW92bF9tcihzdGF0
aWNfY2FzdDx2b2lkKj4ocHJvdG9Qcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVkeCk7CisKKyAgICAv
LyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCisgICAgSm1w
U3JjIGZhaWx1cmVDYXNlczEgPSBjaGVja1N0cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJlKTsK
KworICAgIC8vIENoZWNrIHRoZSBwcm90b3R5cGUgb2JqZWN0J3MgU3RydWN0dXJlIGhhZCBub3Qg
Y2hhbmdlZC4KKyAgICBTdHJ1Y3R1cmUqKiBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzID0gJihw
cm90b09iamVjdC0+bV9zdHJ1Y3R1cmUpOworICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9j
YXN0PHVpbnQzMl90Pihwcm90b3R5cGVTdHJ1Y3R1cmUpLCBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRy
ZXNzKTsKKyAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMiA9IF9fIGpuZSgpOworCisgICAgLy8gQ2hl
Y2tzIG91dCBva2F5ISAtIGdldERpcmVjdE9mZnNldAorICAgIF9fIG1vdmxfbXIoY2FjaGVkT2Zm
c2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplZHgsIFg4Njo6ZWF4KTsKKworICAgIEptcFNy
YyBzdWNjZXNzID0gX18gam1wKCk7CisKKyAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNv
cHkoKTsKKworICAgIC8vIFVzZSB0aGUgcmVwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBm
YWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgorICAg
IHZvaWQqIHNsb3dDYXNlQmVnaW4gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihpbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbikgLSByZXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbDsKKyAgICBY
ODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2VzMSwgc2xvd0Nhc2VCZWdpbik7Cisg
ICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczIsIHNsb3dDYXNlQmVnaW4p
OworCisgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUs
IGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KKyAg
ICBpbnRwdHJfdCBzdWNjZXNzRGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZm8u
aG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQ7Cisg
ICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIHN1Y2Nlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHN1Y2Nlc3NEZXN0KSk7CisKKyAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0
ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCisgICAgaW5mby5zdHViUm91dGlu
ZSA9IGNvZGU7CisKKyAgICAvLyBGaW5hbGx5IHJlcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNl
IGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgorICAgIGludHB0cl90
IGptcExvY2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVn
aW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlOworICAgIFg4NkFzc2Vt
Ymxlcjo6cmVwYXRjaEJyYW5jaE9mZnNldChqbXBMb2NhdGlvbiwgY29kZSk7CisjZWxzZQorICAg
IC8vIFRoZSBwcm90b3R5cGUgb2JqZWN0IGRlZmluaXRlbHkgZXhpc3RzIChpZiB0aGlzIHN0dWIg
ZXhpc3RzIHRoZSBDb2RlQmxvY2sgaXMgcmVmZXJlbmNpbmcgYSBTdHJ1Y3R1cmUgdGhhdCBpcwor
ICAgIC8vIHJlZmVyZW5jaW5nIHRoZSBwcm90b3R5cGUgb2JqZWN0IC0gbGV0J3Mgc3BlY3VsYXRp
dmVseSBsb2FkIGl0J3MgdGFibGUgbmljZSBhbmQgZWFybHkhKQorICAgIEpTT2JqZWN0KiBwcm90
b09iamVjdCA9IGFzT2JqZWN0KHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxGcmFt
ZSkpOworICAgIFByb3BlcnR5U3RvcmFnZSogcHJvdG9Qcm9wZXJ0eVN0b3JhZ2UgPSAmcHJvdG9P
YmplY3QtPm1fcHJvcGVydHlTdG9yYWdlOworICAgIF9fIG1vdmxfbXIoc3RhdGljX2Nhc3Q8dm9p
ZCo+KHByb3RvUHJvcGVydHlTdG9yYWdlKSwgWDg2OjplZHgpOworCisgICAgLy8gQ2hlY2sgZWF4
IGlzIGFuIG9iamVjdCBvZiB0aGUgcmlnaHQgU3RydWN0dXJlLgorICAgIF9fIHRlc3RsX2kzMnIo
SlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgZmFpbHVyZUNhc2Vz
MSA9IF9fIGpuZSgpOworICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMyID0gY2hlY2tTdHJ1Y3R1cmUo
WDg2OjplYXgsIHN0cnVjdHVyZSk7CisKKyAgICAvLyBDaGVjayB0aGUgcHJvdG90eXBlIG9iamVj
dCdzIFN0cnVjdHVyZSBoYWQgbm90IGNoYW5nZWQuCisgICAgU3RydWN0dXJlKiogcHJvdG90eXBl
U3RydWN0dXJlQWRkcmVzcyA9ICYocHJvdG9PYmplY3QtPm1fc3RydWN0dXJlKTsKKyAgICBfXyBj
bXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4ocHJvdG90eXBlU3RydWN0dXJlKSwg
cHJvdG90eXBlU3RydWN0dXJlQWRkcmVzcyk7CisgICAgSm1wU3JjIGZhaWx1cmVDYXNlczMgPSBf
XyBqbmUoKTsKKworICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXREaXJlY3RPZmZzZXQKKyAg
ICBfXyBtb3ZsX21yKGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWR4LCBY
ODY6OmVheCk7CisKKyAgICBfXyByZXQoKTsKKworICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRh
YmxlQ29weSgpOworCisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczEs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3By
b3RvX2ZhaWwpKTsKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2VzMiwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfcHJv
dG9fZmFpbCkpOworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMzLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9wcm90
b19mYWlsKSk7CisKKyAgICBtX2NvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyku
c3R1YlJvdXRpbmUgPSBjb2RlOworCisgICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
cmV0dXJuQWRkcmVzcywgY29kZSk7CisjZW5kaWYKK30KKworI2lmIFVTRShDVElfUkVQQVRDSF9Q
SUMpCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3Jw
aGljU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNp
emVfdCBjYWNoZWRPZmZzZXQpCit7CisgICAgSm1wU3JjIGZhaWx1cmVDYXNlID0gY2hlY2tTdHJ1
Y3R1cmUoWDg2OjplYXgsIHN0cnVjdHVyZSk7CisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQo
SlNPYmplY3QsIG1fcHJvcGVydHlTdG9yYWdlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICBf
XyBtb3ZsX21yKGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWF4LCBYODY6
OmVheCk7CisgICAgSm1wU3JjIHN1Y2Nlc3MgPSBfXyBqbXAoKTsKKworICAgIHZvaWQqIGNvZGUg
PSBfXyBleGVjdXRhYmxlQ29weSgpOworICAgIEFTU0VSVChjb2RlKTsKKworICAgIC8vIFVzZSB0
aGUgcmVwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8g
dGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgorICAgIHZvaWQqIGxhc3RQcm90b0JlZ2lu
ID0gcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0
aW5lOworICAgIGlmICghbGFzdFByb3RvQmVnaW4pCisgICAgICAgIGxhc3RQcm90b0JlZ2luID0g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbikgLSBy
ZXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbDsKKworICAgIFg4NkFzc2VtYmxlcjo6bGlu
ayhjb2RlLCBmYWlsdXJlQ2FzZSwgbGFzdFByb3RvQmVnaW4pOworCisgICAgLy8gT24gc3VjY2Vz
cyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBw
ZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KKyAgICBpbnRwdHJfdCBzdWNjZXNzRGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4pICsg
cmVwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDsKKyAgICBYODZBc3NlbWJsZXI6
OmxpbmsoY29kZSwgc3VjY2VzcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3VjY2Vzc0Rlc3Qp
KTsKKworICAgIHN0cnVjdHVyZS0+cmVmKCk7CisgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5s
aXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhY2hlZE9mZnNldCwgY29kZSwgc3RydWN0dXJlKTsKKwor
ICAgIC8vIEZpbmFsbHkgcmVwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUg
aG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCisgICAgaW50cHRyX3Qgam1wTG9jYXRpb24g
PSByZWludGVycHJldF9jYXN0PGludHB0cl90PihzdHViSW5mby0+aG90UGF0aEJlZ2luKSArIHJl
cGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZTsKKyAgICBYODZBc3NlbWJsZXI6OnJl
cGF0Y2hCcmFuY2hPZmZzZXQoam1wTG9jYXRpb24sIGNvZGUpOworfQorCit2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVzLCBpbnQg
Y3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVT
dHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZzZXQsIENhbGxGcmFtZSogY2FsbEZyYW1lKQorewor
ICAgIC8vIFRoZSBwcm90b3R5cGUgb2JqZWN0IGRlZmluaXRlbHkgZXhpc3RzIChpZiB0aGlzIHN0
dWIgZXhpc3RzIHRoZSBDb2RlQmxvY2sgaXMgcmVmZXJlbmNpbmcgYSBTdHJ1Y3R1cmUgdGhhdCBp
cworICAgIC8vIHJlZmVyZW5jaW5nIHRoZSBwcm90b3R5cGUgb2JqZWN0IC0gbGV0J3Mgc3BlY3Vs
YXRpdmVseSBsb2FkIGl0J3MgdGFibGUgbmljZSBhbmQgZWFybHkhKQorICAgIEpTT2JqZWN0KiBw
cm90b09iamVjdCA9IGFzT2JqZWN0KHN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKGNhbGxG
cmFtZSkpOworICAgIFByb3BlcnR5U3RvcmFnZSogcHJvdG9Qcm9wZXJ0eVN0b3JhZ2UgPSAmcHJv
dG9PYmplY3QtPm1fcHJvcGVydHlTdG9yYWdlOworICAgIF9fIG1vdmxfbXIoc3RhdGljX2Nhc3Q8
dm9pZCo+KHByb3RvUHJvcGVydHlTdG9yYWdlKSwgWDg2OjplZHgpOworCisgICAgLy8gQ2hlY2sg
ZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmlnaHQgU3RydWN0dXJlLgorICAgIEptcFNyYyBmYWls
dXJlQ2FzZXMxID0gY2hlY2tTdHJ1Y3R1cmUoWDg2OjplYXgsIHN0cnVjdHVyZSk7CisKKyAgICAv
LyBDaGVjayB0aGUgcHJvdG90eXBlIG9iamVjdCdzIFN0cnVjdHVyZSBoYWQgbm90IGNoYW5nZWQu
CisgICAgU3RydWN0dXJlKiogcHJvdG90eXBlU3RydWN0dXJlQWRkcmVzcyA9ICYocHJvdG9PYmpl
Y3QtPm1fc3RydWN0dXJlKTsKKyAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1aW50
MzJfdD4ocHJvdG90eXBlU3RydWN0dXJlKSwgcHJvdG90eXBlU3RydWN0dXJlQWRkcmVzcyk7Cisg
ICAgSm1wU3JjIGZhaWx1cmVDYXNlczIgPSBfXyBqbmUoKTsKKworICAgIC8vIENoZWNrcyBvdXQg
b2theSEgLSBnZXREaXJlY3RPZmZzZXQKKyAgICBfXyBtb3ZsX21yKGNhY2hlZE9mZnNldCAqIHNp
emVvZihKU1ZhbHVlKiksIFg4Njo6ZWR4LCBYODY6OmVheCk7CisKKyAgICBKbXBTcmMgc3VjY2Vz
cyA9IF9fIGptcCgpOworCisgICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7CisK
KyAgICAvLyBVc2UgdGhlIHJlcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBj
YXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KKyAgICB2b2lkKiBs
YXN0UHJvdG9CZWdpbiA9IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0g
MV0uc3R1YlJvdXRpbmU7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNl
czEsIGxhc3RQcm90b0JlZ2luKTsKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVy
ZUNhc2VzMiwgbGFzdFByb3RvQmVnaW4pOworCisgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFj
ayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBz
dG9yZSB0byBkZXN0IGZvciB1cy4KKyAgICBpbnRwdHJfdCBzdWNjZXNzRGVzdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNl
dEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDsKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwg
c3VjY2VzcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3VjY2Vzc0Rlc3QpKTsKKworICAgIHN0
cnVjdHVyZS0+cmVmKCk7CisgICAgcHJvdG90eXBlU3RydWN0dXJlLT5yZWYoKTsKKyAgICBwcm90
b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhY2hlZE9mZnNldCwgY29k
ZSwgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUpOworCisgICAgLy8gRmluYWxseSByZXBh
dGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhl
cmUgaW5zdGVhZC4KKyAgICBpbnRwdHJfdCBqbXBMb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRC
cmFuY2hUb1Nsb3dDYXNlOworICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaEJyYW5jaE9mZnNldChq
bXBMb2NhdGlvbiwgY29kZSk7Cit9CisKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRD
aGFpbkxpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgc2l6
ZV90IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgQVNTRVJUKGNv
dW50KTsKKyAgICAKKyAgICBWZWN0b3I8Sm1wU3JjPiBidWNrZXRzT2ZGYWlsOworCisgICAgLy8g
Q2hlY2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmlnaHQgU3RydWN0dXJlLgorICAgIGJ1Y2tl
dHNPZkZhaWwuYXBwZW5kKGNoZWNrU3RydWN0dXJlKFg4Njo6ZWF4LCBzdHJ1Y3R1cmUpKTsKKwor
ICAgIFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBSZWZQdHI8U3Ry
dWN0dXJlPiogY2hhaW5FbnRyaWVzID0gY2hhaW4tPmhlYWQoKTsKKyAgICBKU09iamVjdCogcHJv
dG9PYmplY3QgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7
CisgICAgICAgIHByb3RvT2JqZWN0ID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBl
Rm9yTG9va3VwKGNhbGxGcmFtZSkpOworICAgICAgICBjdXJyU3RydWN0dXJlID0gY2hhaW5FbnRy
aWVzW2ldLmdldCgpOworCisgICAgICAgIC8vIENoZWNrIHRoZSBwcm90b3R5cGUgb2JqZWN0J3Mg
U3RydWN0dXJlIGhhZCBub3QgY2hhbmdlZC4KKyAgICAgICAgU3RydWN0dXJlKiogcHJvdG90eXBl
U3RydWN0dXJlQWRkcmVzcyA9ICYocHJvdG9PYmplY3QtPm1fc3RydWN0dXJlKTsKKyAgICAgICAg
X18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGN1cnJTdHJ1Y3R1cmUpLCBw
cm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzKTsKKyAgICAgICAgYnVja2V0c09mRmFpbC5hcHBlbmQo
X18gam5lKCkpOworICAgIH0KKyAgICBBU1NFUlQocHJvdG9PYmplY3QpOworCisgICAgUHJvcGVy
dHlTdG9yYWdlKiBwcm90b1Byb3BlcnR5U3RvcmFnZSA9ICZwcm90b09iamVjdC0+bV9wcm9wZXJ0
eVN0b3JhZ2U7CisgICAgX18gbW92bF9tcihzdGF0aWNfY2FzdDx2b2lkKj4ocHJvdG9Qcm9wZXJ0
eVN0b3JhZ2UpLCBYODY6OmVkeCk7CisgICAgX18gbW92bF9tcihjYWNoZWRPZmZzZXQgKiBzaXpl
b2YoSlNWYWx1ZSopLCBYODY6OmVkeCwgWDg2OjplYXgpOworICAgIEptcFNyYyBzdWNjZXNzID0g
X18gam1wKCk7CisKKyAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNvcHkoKTsKKworICAg
IC8vIFVzZSB0aGUgcmVwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2Vz
IGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgorICAgIHZvaWQqIGxhc3RQ
cm90b0JlZ2luID0gcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5z
dHViUm91dGluZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWNrZXRzT2ZGYWls
LnNpemUoKTsgKytpKQorICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgYnVja2V0c09m
RmFpbFtpXSwgbGFzdFByb3RvQmVnaW4pOworCisgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFj
ayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBz
dG9yZSB0byBkZXN0IGZvciB1cy4KKyAgICBpbnRwdHJfdCBzdWNjZXNzRGVzdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNl
dEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldDsKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwg
c3VjY2VzcywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3VjY2Vzc0Rlc3QpKTsKKworICAgIC8v
IFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRl
ZCBsYXRlci4KKyAgICBzdHJ1Y3R1cmUtPnJlZigpOworICAgIGNoYWluLT5yZWYoKTsKKyAgICBw
cm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhY2hlZE9mZnNldCwg
Y29kZSwgc3RydWN0dXJlLCBjaGFpbik7CisKKyAgICAvLyBGaW5hbGx5IHJlcGF0Y2ggdGhlIGp1
bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFk
LgorICAgIGludHB0cl90IGptcExvY2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
c3R1YkluZm8tPmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xv
d0Nhc2U7CisgICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoQnJhbmNoT2Zmc2V0KGptcExvY2F0aW9u
LCBjb2RlKTsKK30KKyNlbmRpZgorCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hh
aW4oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNv
dW50LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCB2b2lkKiByZXR1cm5BZGRyZXNzLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKK3sKKyNpZiBVU0UoQ1RJX1JFUEFUQ0hfUElDKQorICAgIFN0cnVjdHVyZVN0
dWJJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwor
CisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZXBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0
dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KKyAgICBjdGlSZXBhdGNoQ2FsbEJ5
UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRl
cnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7CisKKyAgICBBU1NFUlQoY291
bnQpOworICAgIAorICAgIFZlY3RvcjxKbXBTcmM+IGJ1Y2tldHNPZkZhaWw7CisKKyAgICAvLyBD
aGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCisgICAgYnVja2V0
c09mRmFpbC5hcHBlbmQoY2hlY2tTdHJ1Y3R1cmUoWDg2OjplYXgsIHN0cnVjdHVyZSkpOworCisg
ICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIFJlZlB0cjxTdHJ1
Y3R1cmU+KiBjaGFpbkVudHJpZXMgPSBjaGFpbi0+aGVhZCgpOworICAgIEpTT2JqZWN0KiBwcm90
b09iamVjdCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK
KyAgICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJyU3RydWN0dXJlLT5wcm90b3R5cGVG
b3JMb29rdXAoY2FsbEZyYW1lKSk7CisgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBjaGFpbkVudHJp
ZXNbaV0uZ2V0KCk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHByb3RvdHlwZSBvYmplY3QncyBT
dHJ1Y3R1cmUgaGFkIG5vdCBjaGFuZ2VkLgorICAgICAgICBTdHJ1Y3R1cmUqKiBwcm90b3R5cGVT
dHJ1Y3R1cmVBZGRyZXNzID0gJihwcm90b09iamVjdC0+bV9zdHJ1Y3R1cmUpOworICAgICAgICBf
XyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oY3VyclN0cnVjdHVyZSksIHBy
b3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MpOworICAgICAgICBidWNrZXRzT2ZGYWlsLmFwcGVuZChf
XyBqbmUoKSk7CisgICAgfQorICAgIEFTU0VSVChwcm90b09iamVjdCk7CisKKyAgICBQcm9wZXJ0
eVN0b3JhZ2UqIHByb3RvUHJvcGVydHlTdG9yYWdlID0gJnByb3RvT2JqZWN0LT5tX3Byb3BlcnR5
U3RvcmFnZTsKKyAgICBfXyBtb3ZsX21yKHN0YXRpY19jYXN0PHZvaWQqPihwcm90b1Byb3BlcnR5
U3RvcmFnZSksIFg4Njo6ZWR4KTsKKyAgICBfXyBtb3ZsX21yKGNhY2hlZE9mZnNldCAqIHNpemVv
ZihKU1ZhbHVlKiksIFg4Njo6ZWR4LCBYODY6OmVheCk7CisgICAgSm1wU3JjIHN1Y2Nlc3MgPSBf
XyBqbXAoKTsKKworICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weSgpOworCisgICAg
Ly8gVXNlIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMg
YmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCisgICAgdm9pZCogc2xvd0Nh
c2VCZWdpbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGluZm8uY2FsbFJldHVybkxvY2F0aW9u
KSAtIHJlcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsOworCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJ1Y2tldHNPZkZhaWwuc2l6ZSgpOyArK2kpCisgICAgICAgIFg4NkFzc2Vt
Ymxlcjo6bGluayhjb2RlLCBidWNrZXRzT2ZGYWlsW2ldLCBzbG93Q2FzZUJlZ2luKTsKKworICAg
IC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBv
aW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCisgICAgaW50cHRy
X3Qgc3VjY2Vzc0Rlc3QgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmZvLmhvdFBhdGhC
ZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0OworICAgIFg4NkFz
c2VtYmxlcjo6bGluayhjb2RlLCBzdWNjZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihzdWNj
ZXNzRGVzdCkpOworCisgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRo
YXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgorICAgIGluZm8uc3R1YlJvdXRpbmUgPSBjb2Rl
OworCisgICAgLy8gRmluYWxseSByZXBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGlu
IHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KKyAgICBpbnRwdHJfdCBqbXBMb2Nh
dGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2luKSArIHJl
cGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZTsKKyAgICBYODZBc3NlbWJsZXI6OnJl
cGF0Y2hCcmFuY2hPZmZzZXQoam1wTG9jYXRpb24sIGNvZGUpOworI2Vsc2UKKyAgICBBU1NFUlQo
Y291bnQpOworICAgIAorICAgIFZlY3RvcjxKbXBTcmM+IGJ1Y2tldHNPZkZhaWw7CisKKyAgICAv
LyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCisgICAgX18g
dGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOworICAgIGJ1Y2tldHNP
ZkZhaWwuYXBwZW5kKF9fIGpuZSgpKTsKKyAgICBidWNrZXRzT2ZGYWlsLmFwcGVuZChjaGVja1N0
cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJlKSk7CisKKyAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1
Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgUmVmUHRyPFN0cnVjdHVyZT4qIGNoYWluRW50cmllcyA9
IGNoYWluLT5oZWFkKCk7CisgICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gMDsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBwcm90b09iamVjdCA9
IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsK
KyAgICAgICAgY3VyclN0cnVjdHVyZSA9IGNoYWluRW50cmllc1tpXS5nZXQoKTsKKworICAgICAg
ICAvLyBDaGVjayB0aGUgcHJvdG90eXBlIG9iamVjdCdzIFN0cnVjdHVyZSBoYWQgbm90IGNoYW5n
ZWQuCisgICAgICAgIFN0cnVjdHVyZSoqIHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MgPSAmKHBy
b3RvT2JqZWN0LT5tX3N0cnVjdHVyZSk7CisgICAgICAgIF9fIGNtcGxfaTMybShyZWludGVycHJl
dF9jYXN0PHVpbnQzMl90PihjdXJyU3RydWN0dXJlKSwgcHJvdG90eXBlU3RydWN0dXJlQWRkcmVz
cyk7CisgICAgICAgIGJ1Y2tldHNPZkZhaWwuYXBwZW5kKF9fIGpuZSgpKTsKKyAgICB9CisgICAg
QVNTRVJUKHByb3RvT2JqZWN0KTsKKworICAgIFByb3BlcnR5U3RvcmFnZSogcHJvdG9Qcm9wZXJ0
eVN0b3JhZ2UgPSAmcHJvdG9PYmplY3QtPm1fcHJvcGVydHlTdG9yYWdlOworICAgIF9fIG1vdmxf
bXIoc3RhdGljX2Nhc3Q8dm9pZCo+KHByb3RvUHJvcGVydHlTdG9yYWdlKSwgWDg2OjplZHgpOwor
ICAgIF9fIG1vdmxfbXIoY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplZHgs
IFg4Njo6ZWF4KTsKKyAgICBfXyByZXQoKTsKKworICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRh
YmxlQ29weSgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1Y2tldHNPZkZhaWwu
c2l6ZSgpOyArK2kpCisgICAgICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBidWNrZXRzT2ZG
YWlsW2ldLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9i
eV9pZF9wcm90b19mYWlsKSk7CisKKyAgICBtX2NvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJu
QWRkcmVzcykuc3R1YlJvdXRpbmUgPSBjb2RlOworCisgICAgY3RpUmVwYXRjaENhbGxCeVJldHVy
bkFkZHJlc3MocmV0dXJuQWRkcmVzcywgY29kZSk7CisjZW5kaWYKK30KKwordm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlUHV0QnlJZFJlcGxhY2UoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBj
YWNoZWRPZmZzZXQsIHZvaWQqIHJldHVybkFkZHJlc3MpCit7CisgICAgLy8gQ2hlY2sgZWF4IGlz
IGFuIG9iamVjdCBvZiB0aGUgcmlnaHQgU3RydWN0dXJlLgorICAgIF9fIHRlc3RsX2kzMnIoSlNJ
bW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMSA9
IF9fIGpuZSgpOworICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMyID0gY2hlY2tTdHJ1Y3R1cmUoWDg2
OjplYXgsIHN0cnVjdHVyZSk7CisKKyAgICAvLyBjaGVja3Mgb3V0IG9rYXkhIC0gcHV0RGlyZWN0
T2Zmc2V0CisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNPYmplY3QsIG1fcHJvcGVydHlT
dG9yYWdlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICBfXyBtb3ZsX3JtKFg4Njo6ZWR4LCBj
YWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVheCk7CisgICAgX18gcmV0KCk7
CisKKyAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNvcHkoKTsKKyAgICAKKyAgICBYODZB
c3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2VzMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfaWRfZmFpbCkpOworICAgIFg4NkFzc2VtYmxl
cjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMyLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRl
cnByZXRlcjo6Y3RpX29wX3B1dF9ieV9pZF9mYWlsKSk7CisKKyAgICBtX2NvZGVCbG9jay0+Z2V0
U3R1YkluZm8ocmV0dXJuQWRkcmVzcykuc3R1YlJvdXRpbmUgPSBjb2RlOworICAgIAorICAgIGN0
aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIGNvZGUpOworfQorCitl
eHRlcm4gIkMiIHsKKworICAgIHN0YXRpYyBKU09iamVjdCogcmVzaXplUHJvcGVydHlTdG9yYWdl
KEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCisg
ICAgeworICAgICAgICBiYXNlT2JqZWN0LT5hbGxvY2F0ZVByb3BlcnR5U3RvcmFnZUlubGluZShv
bGRTaXplLCBuZXdTaXplKTsKKyAgICAgICAgcmV0dXJuIGJhc2VPYmplY3Q7CisgICAgfQorCit9
CisKK3N0YXRpYyBpbmxpbmUgYm9vbCB0cmFuc2l0aW9uV2lsbE5lZWRTdG9yYWdlUmVhbGxvYyhT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUpCit7CisgICAg
cmV0dXJuIG9sZFN0cnVjdHVyZS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1
Y3R1cmUtPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCk7Cit9CisKK3ZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgU3RydWN0dXJlQ2hhaW4qIGNo
YWluLCB2b2lkKiByZXR1cm5BZGRyZXNzKQoreworICAgIFZlY3RvcjxKbXBTcmMsIDE2PiBmYWls
dXJlQ2FzZXM7CisgICAgLy8gQ2hlY2sgZWF4IGlzIGFuIG9iamVjdCBvZiB0aGUgcmlnaHQgU3Ry
dWN0dXJlLgorICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4
KTsKKyAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKF9fIGpuZSgpKTsKKyAgICBfXyBjbXBsX2kzMm0o
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4ob2xkU3RydWN0dXJlKSwgRklFTERfT0ZGU0VUKEpT
Q2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCk7CisgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChf
XyBqbmUoKSk7CisgICAgVmVjdG9yPEptcFNyYz4gc3VjY2Vzc0Nhc2VzOworCisgICAgLy8gIGVj
eCA9IGJhc2VPYmplY3QKKyAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3Ry
dWN0dXJlKSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsKKyAgICAvLyBwcm90byhlY3gpID0gYmFzZU9i
amVjdC0+c3RydWN0dXJlKCktPnByb3RvdHlwZSgpCisgICAgX18gY21wbF9pMzJtKE9iamVjdFR5
cGUsIEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8pICsgRklFTERfT0ZGU0VUKFR5
cGVJbmZvLCBtX3R5cGUpLCBYODY6OmVjeCk7CisgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChfXyBq
bmUoKSk7CisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoU3RydWN0dXJlLCBtX3Byb3RvdHlw
ZSksIFg4Njo6ZWN4LCBYODY6OmVjeCk7CisgICAgCisgICAgLy8gZWN4ID0gYmFzZU9iamVjdC0+
bV9zdHJ1Y3R1cmUKKyAgICBmb3IgKFJlZlB0cjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFk
KCk7ICppdDsgKytpdCkgeworICAgICAgICAvLyBudWxsIGNoZWNrIHRoZSBwcm90b3R5cGUKKyAg
ICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihqc051bGwoKSksIFg4Njo6ZWN4KTsKKyAgICAg
ICAgc3VjY2Vzc0Nhc2VzLmFwcGVuZChfXyBqZSgpKTsKKworICAgICAgICAvLyBDaGVjayB0aGUg
c3RydWN0dXJlIGlkCisgICAgICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQz
Ml90PihpdC0+Z2V0KCkpLCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6
ZWN4KTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChfXyBqbmUoKSk7CisgICAgICAgIAor
ICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2
OjplY3gsIFg4Njo6ZWN4KTsKKyAgICAgICAgX18gY21wbF9pMzJtKE9iamVjdFR5cGUsIEZJRUxE
X09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8pICsgRklFTERfT0ZGU0VUKFR5cGVJbmZvLCBt
X3R5cGUpLCBYODY6OmVjeCk7CisgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoX18gam5lKCkp
OworICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fcHJvdG90eXBl
KSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKKyAgICB9CisKKyAgICBmYWlsdXJlQ2FzZXMuYXBwZW5k
KF9fIGpuZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3VjY2Vzc0Nhc2VzLnNp
emUoKTsgKytpKQorICAgICAgICBfXyBsaW5rKHN1Y2Nlc3NDYXNlc1tpXSwgX18gbGFiZWwoKSk7
CisKKyAgICBKbXBTcmMgY2FsbFRhcmdldDsKKworICAgIC8vIGVtaXQgYSBjYWxsIG9ubHkgaWYg
c3RvcmFnZSByZWFsbG9jIGlzIG5lZWRlZAorICAgIGlmICh0cmFuc2l0aW9uV2lsbE5lZWRTdG9y
YWdlUmVhbGxvYyhvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSkpIHsKKyAgICAgICAgX18gcHVz
aGxfcihYODY6OmVkeCk7CisgICAgICAgIF9fIHB1c2hsX2kzMihuZXdTdHJ1Y3R1cmUtPnByb3Bl
cnR5U3RvcmFnZUNhcGFjaXR5KCkpOworICAgICAgICBfXyBwdXNobF9pMzIob2xkU3RydWN0dXJl
LT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpKTsKKyAgICAgICAgX18gcHVzaGxfcihYODY6OmVh
eCk7CisgICAgICAgIGNhbGxUYXJnZXQgPSBfXyBjYWxsKCk7CisgICAgICAgIF9fIGFkZGxfaTMy
cigzICogc2l6ZW9mKHZvaWQqKSwgWDg2Ojplc3ApOworICAgICAgICBfXyBwb3BsX3IoWDg2Ojpl
ZHgpOworICAgIH0KKworICAgIC8vIEFzc3VtZXMgbV9yZWZDb3VudCBjYW4gYmUgZGVjcmVtZW50
ZWQgZWFzaWx5LCByZWZjb3VudCBkZWNyZW1lbnQgaXMgc2FmZSBhcyAKKyAgICAvLyBjb2RlYmxv
Y2sgc2hvdWxkIGVuc3VyZSBvbGRTdHJ1Y3R1cmUtPm1fcmVmQ291bnQgPiAwCisgICAgX18gc3Vi
bF9pOG0oMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob2xkU3RydWN0dXJlKSk7CisgICAgX18g
YWRkbF9pOG0oMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obmV3U3RydWN0dXJlKSk7CisgICAg
X18gbW92bF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KG5ld1N0cnVjdHVyZSksIEZJ
RUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2OjplYXgpOworCisgICAgLy8gd3Jp
dGUgdGhlIHZhbHVlCisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNPYmplY3QsIG1fcHJv
cGVydHlTdG9yYWdlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICBfXyBtb3ZsX3JtKFg4Njo6
ZWR4LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVheCk7CisKKyAgICBf
XyByZXQoKTsKKyAgICAKKyAgICBKbXBTcmMgZmFpbHVyZUp1bXA7CisgICAgaWYgKGZhaWx1cmVD
YXNlcy5zaXplKCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZhaWx1cmVD
YXNlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIF9fIGxpbmsoZmFpbHVyZUNhc2VzW2ldLCBf
XyBsYWJlbCgpKTsKKyAgICAgICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJhbXBv
bGluZSgpOworICAgICAgICBmYWlsdXJlSnVtcCA9IF9fIGptcCgpOworICAgIH0KKworICAgIHZv
aWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weSgpOworCisgICAgaWYgKGZhaWx1cmVDYXNlcy5z
aXplKCkpCisgICAgICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlSnVtcCwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfaWRfZmFpbCkp
OworCisgICAgaWYgKHRyYW5zaXRpb25XaWxsTmVlZFN0b3JhZ2VSZWFsbG9jKG9sZFN0cnVjdHVy
ZSwgbmV3U3RydWN0dXJlKSkKKyAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGNhbGxU
YXJnZXQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlc2l6ZVByb3BlcnR5U3RvcmFnZSkpOwor
ICAgIAorICAgIG1fY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKS5zdHViUm91
dGluZSA9IGNvZGU7CisgICAgCisgICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0
dXJuQWRkcmVzcywgY29kZSk7Cit9CisKK3ZvaWQgSklUOjp1bmxpbmtDYWxsKENhbGxMaW5rSW5m
byogY2FsbExpbmtJbmZvKQoreworICAgIC8vIFdoZW4gdGhlIEpTRnVuY3Rpb24gaXMgZGVsZXRl
ZCB0aGUgcG9pbnRlciBlbWJlZGRlZCBpbiB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtIHdpbGwgbm8g
bG9uZ2VyIGJlIHZhbGlkCisgICAgLy8gKGFuZCwgaWYgYSBuZXcgSlNGdW5jdGlvbiBoYXBwZW5l
ZCB0byBiZSBjb25zdHJ1Y3RlZCBhdCB0aGUgc2FtZSBsb2NhdGlvbiwgd2UgY291bGQgZ2V0IGEg
ZmFsc2UgcG9zaXRpdmUKKyAgICAvLyBtYXRjaCkuICBSZXNldCB0aGUgY2hlY2sgc28gaXQgbm8g
bG9uZ2VyIG1hdGNoZXMuCisgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KGNhbGxMaW5rSW5m
by0+aG90UGF0aEJlZ2luKVstMV0gPSBhc1BvaW50ZXIoSlNJbW1lZGlhdGU6OmltcG9zc2libGVW
YWx1ZSgpKTsKK30KKwordm9pZCBKSVQ6OmxpbmtDYWxsKEpTRnVuY3Rpb24qIGNhbGxlZSwgQ29k
ZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIHZvaWQqIGN0aUNvZGUsIENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvLCBpbnQgY2FsbGVyQXJnQ291bnQpCit7CisgICAgLy8gQ3VycmVudGx5IHdlIG9u
bHkgbGluayBjYWxscyB3aXRoIHRoZSBleGFjdCBudW1iZXIgb2YgYXJndW1lbnRzLgorICAgIGlm
IChjYWxsZXJBcmdDb3VudCA9PSBjYWxsZWVDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMpIHsKKyAg
ICAgICAgQVNTRVJUKCFjYWxsTGlua0luZm8tPmlzTGlua2VkKCkpOworICAgIAorICAgICAgICBj
YWxsZWVDb2RlQmxvY2stPmFkZENhbGxlcihjYWxsTGlua0luZm8pOworICAgIAorICAgICAgICBy
ZWludGVycHJldF9jYXN0PHZvaWQqKj4oY2FsbExpbmtJbmZvLT5ob3RQYXRoQmVnaW4pWy0xXSA9
IGNhbGxlZTsKKyAgICAgICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY2FsbExpbmtJ
bmZvLT5ob3RQYXRoT3RoZXIsIGN0aUNvZGUpOworICAgIH0KKworICAgIC8vIHJlcGF0Y2ggdGhl
IGluc3RydWN0aW9uIHRoYXQganVtcHMgb3V0IHRvIHRoZSBjb2xkIHBhdGgsIHNvIHRoYXQgd2Ug
b25seSB0cnkgdG8gbGluayBvbmNlLgorICAgIHZvaWQqIHJlcGF0Y2hDaGVjayA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90PihjYWxsTGlua0luZm8t
PmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0T3BDYWxsQ2FsbCk7CisgICAgY3RpUmVwYXRj
aENhbGxCeVJldHVybkFkZHJlc3MocmVwYXRjaENoZWNrLCBjYWxsTGlua0luZm8tPmNvbGRQYXRo
T3RoZXIpOworfQorCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGlu
ZXMoKQoreworICAgIC8vICgxKSBUaGUgZmlyc3QgZnVuY3Rpb24gcHJvdmlkZXMgZmFzdCBwcm9w
ZXJ0eSBhY2Nlc3MgZm9yIGFycmF5IGxlbmd0aAorICAgIAorICAgIC8vIENoZWNrIGVheCBpcyBh
biBhcnJheQorICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4
KTsKKyAgICBKbXBTcmMgYXJyYXlfZmFpbHVyZUNhc2VzMSA9IF9fIGpuZSgpOworICAgIF9fIGNt
cGxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2ludGVycHJldGVyLT5tX2pzQXJy
YXlWcHRyKSwgWDg2OjplYXgpOworICAgIEptcFNyYyBhcnJheV9mYWlsdXJlQ2FzZXMyID0gX18g
am5lKCk7CisKKyAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0
aGUgc3RvcmFnZQorICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQXJyYXksIG1fc3RvcmFn
ZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoQXJy
YXlTdG9yYWdlLCBtX2xlbmd0aCksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisKKyAgICBfXyBjbXBs
X2kzMnIoSlNJbW1lZGlhdGU6Om1heEltbWVkaWF0ZUludCwgWDg2OjplYXgpOworICAgIEptcFNy
YyBhcnJheV9mYWlsdXJlQ2FzZXMzID0gX18gamEoKTsKKworICAgIF9fIGFkZGxfcnIoWDg2Ojpl
YXgsIFg4Njo6ZWF4KTsKKyAgICBfXyBhZGRsX2k4cigxLCBYODY6OmVheCk7CisgICAgCisgICAg
X18gcmV0KCk7CisKKyAgICAvLyAoMikgVGhlIHNlY29uZCBmdW5jdGlvbiBwcm92aWRlcyBmYXN0
IHByb3BlcnR5IGFjY2VzcyBmb3Igc3RyaW5nIGxlbmd0aAorICAgIAorICAgIEptcERzdCBzdHJp
bmdMZW5ndGhCZWdpbiA9IF9fIGFsaWduKDE2KTsKKworICAgIC8vIENoZWNrIGVheCBpcyBhIHN0
cmluZworICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4Njo6ZWF4KTsK
KyAgICBKbXBTcmMgc3RyaW5nX2ZhaWx1cmVDYXNlczEgPSBfXyBqbmUoKTsKKyAgICBfXyBjbXBs
X2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9pbnRlcnByZXRlci0+bV9qc1N0cmlu
Z1ZwdHIpLCBYODY6OmVheCk7CisgICAgSm1wU3JjIHN0cmluZ19mYWlsdXJlQ2FzZXMyID0gX18g
am5lKCk7CisKKyAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0
aGUgVXN0cmluZy4KKyAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU1N0cmluZywgbV92YWx1
ZSkgKyBGSUVMRF9PRkZTRVQoVVN0cmluZywgbV9yZXApLCBYODY6OmVheCwgWDg2OjplYXgpOwor
ICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKFVTdHJpbmc6OlJlcCwgbGVuKSwgWDg2OjplYXgs
IFg4Njo6ZWF4KTsKKworICAgIF9fIGNtcGxfaTMycihKU0ltbWVkaWF0ZTo6bWF4SW1tZWRpYXRl
SW50LCBYODY6OmVheCk7CisgICAgSm1wU3JjIHN0cmluZ19mYWlsdXJlQ2FzZXMzID0gX18gamEo
KTsKKworICAgIF9fIGFkZGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICBfXyBhZGRsX2k4
cigxLCBYODY6OmVheCk7CisgICAgCisgICAgX18gcmV0KCk7CisKKyAgICAvLyAoMykgVHJhbXBv
bGluZXMgZm9yIHRoZSBzbG93IGNhc2VzIG9mIG9wX2NhbGwgLyBvcF9jYWxsX2V2YWwgLyBvcF9j
b25zdHJ1Y3QuCisgICAgCisgICAgSm1wRHN0IHZpcnR1YWxDYWxsUHJlTGlua0JlZ2luID0gX18g
YWxpZ24oMTYpOworCisgICAgLy8gTG9hZCB0aGUgY2FsbGVlIENvZGVCbG9jayogaW50byBlYXgK
KyAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0Z1bmN0aW9uLCBtX2JvZHkpLCBYODY6OmVj
eCwgWDg2OjplYXgpOworICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEZ1bmN0aW9uQm9keU5v
ZGUsIG1fY29kZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisgICAgX18gdGVzdGxfcnIoWDg2Ojpl
YXgsIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgaGFzQ29kZUJsb2NrMSA9IF9fIGpuZSgpOworICAg
IF9fIHBvcGxfcihYODY6OmVieCk7CisgICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7
CisgICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOworICAg
IEptcFNyYyBjYWxsSlNGdW5jdGlvbjEgPSBfXyBjYWxsKCk7CisgICAgZW1pdEdldENUSUFyZygw
LCBYODY6OmVjeCk7CisgICAgZW1pdEdldENUSUFyZyg4LCBYODY6OmVkeCk7CisgICAgX18gcHVz
aGxfcihYODY6OmVieCk7CisgICAgX18gbGluayhoYXNDb2RlQmxvY2sxLCBfXyBsYWJlbCgpKTsK
KworICAgIC8vIENoZWNrIGFyZ0NvdW50IG1hdGNoZXMgY2FsbGVlIGFyaXR5LgorICAgIF9fIGNt
cGxfcm0oWDg2OjplZHgsIEZJRUxEX09GRlNFVChDb2RlQmxvY2ssIG51bVBhcmFtZXRlcnMpLCBY
ODY6OmVheCk7CisgICAgSm1wU3JjIGFyaXR5Q2hlY2tPa2F5MSA9IF9fIGplKCk7CisgICAgX18g
cG9wbF9yKFg4Njo6ZWJ4KTsKKyAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWJ4LCA0KTsKKyAgICBl
bWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAxMik7CisgICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJl
bmNlKCk7CisgICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUp
OworICAgIEptcFNyYyBjYWxsQXJpdHlDaGVjazEgPSBfXyBjYWxsKCk7CisgICAgX18gbW92bF9y
cihYODY6OmVkeCwgWDg2OjplZGkpOworICAgIGVtaXRHZXRDVElBcmcoMCwgWDg2OjplY3gpOwor
ICAgIGVtaXRHZXRDVElBcmcoOCwgWDg2OjplZHgpOworICAgIF9fIHB1c2hsX3IoWDg2OjplYngp
OworICAgIF9fIGxpbmsoYXJpdHlDaGVja09rYXkxLCBfXyBsYWJlbCgpKTsKKworICAgIGNvbXBp
bGVPcENhbGxJbml0aWFsaXplQ2FsbEZyYW1lKCk7CisKKyAgICBfXyBwb3BsX3IoWDg2OjplYngp
OworICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYngsIDQpOworICAgIF9fIHJlc3RvcmVBcmd1bWVu
dFJlZmVyZW5jZSgpOworICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJX0FSR1NfY2Fs
bEZyYW1lKTsKKyAgICBKbXBTcmMgY2FsbERvbnRMYXp5TGlua0NhbGwgPSBfXyBjYWxsKCk7Cisg
ICAgX18gcHVzaGxfcihYODY6OmVieCk7CisKKyAgICBfXyBqbXBfcihYODY6OmVheCk7CisKKyAg
ICBKbXBEc3QgdmlydHVhbENhbGxMaW5rQmVnaW4gPSBfXyBhbGlnbigxNik7CisKKyAgICAvLyBM
b2FkIHRoZSBjYWxsZWUgQ29kZUJsb2NrKiBpbnRvIGVheAorICAgIF9fIG1vdmxfbXIoRklFTERf
T0ZGU0VUKEpTRnVuY3Rpb24sIG1fYm9keSksIFg4Njo6ZWN4LCBYODY6OmVheCk7CisgICAgX18g
bW92bF9tcihGSUVMRF9PRkZTRVQoRnVuY3Rpb25Cb2R5Tm9kZSwgbV9jb2RlKSwgWDg2OjplYXgs
IFg4Njo6ZWF4KTsKKyAgICBfXyB0ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOworICAgIEpt
cFNyYyBoYXNDb2RlQmxvY2syID0gX18gam5lKCk7CisgICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsK
KyAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKKyAgICBlbWl0UHV0Q1RJUGFyYW0o
WDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7CisgICAgSm1wU3JjIGNhbGxKU0Z1bmN0aW9u
MiA9IF9fIGNhbGwoKTsKKyAgICBlbWl0R2V0Q1RJQXJnKDAsIFg4Njo6ZWN4KTsKKyAgICBlbWl0
R2V0Q1RJQXJnKDgsIFg4Njo6ZWR4KTsKKyAgICBfXyBwdXNobF9yKFg4Njo6ZWJ4KTsKKyAgICBf
XyBsaW5rKGhhc0NvZGVCbG9jazIsIF9fIGxhYmVsKCkpOworCisgICAgLy8gQ2hlY2sgYXJnQ291
bnQgbWF0Y2hlcyBjYWxsZWUgYXJpdHkuCisgICAgX18gY21wbF9ybShYODY6OmVkeCwgRklFTERf
T0ZGU0VUKENvZGVCbG9jaywgbnVtUGFyYW1ldGVycyksIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMg
YXJpdHlDaGVja09rYXkyID0gX18gamUoKTsKKyAgICBfXyBwb3BsX3IoWDg2OjplYngpOworICAg
IGVtaXRQdXRDVElBcmcoWDg2OjplYngsIDQpOworICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgs
IDEyKTsKKyAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKKyAgICBlbWl0UHV0Q1RJ
UGFyYW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7CisgICAgSm1wU3JjIGNhbGxBcml0
eUNoZWNrMiA9IF9fIGNhbGwoKTsKKyAgICBfXyBtb3ZsX3JyKFg4Njo6ZWR4LCBYODY6OmVkaSk7
CisgICAgZW1pdEdldENUSUFyZygwLCBYODY6OmVjeCk7CisgICAgZW1pdEdldENUSUFyZyg4LCBY
ODY6OmVkeCk7CisgICAgX18gcHVzaGxfcihYODY6OmVieCk7CisgICAgX18gbGluayhhcml0eUNo
ZWNrT2theTIsIF9fIGxhYmVsKCkpOworCisgICAgY29tcGlsZU9wQ2FsbEluaXRpYWxpemVDYWxs
RnJhbWUoKTsKKworICAgIF9fIHBvcGxfcihYODY6OmVieCk7CisgICAgZW1pdFB1dENUSUFyZyhY
ODY6OmVieCwgNCk7CisgICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CisgICAgZW1p
dFB1dENUSVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOworICAgIEptcFNyYyBj
YWxsTGF6eUxpbmtDYWxsID0gX18gY2FsbCgpOworICAgIF9fIHB1c2hsX3IoWDg2OjplYngpOwor
CisgICAgX18gam1wX3IoWDg2OjplYXgpOworCisgICAgSm1wRHN0IHZpcnR1YWxDYWxsQmVnaW4g
PSBfXyBhbGlnbigxNik7CisKKyAgICAvLyBMb2FkIHRoZSBjYWxsZWUgQ29kZUJsb2NrKiBpbnRv
IGVheAorICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTRnVuY3Rpb24sIG1fYm9keSksIFg4
Njo6ZWN4LCBYODY6OmVheCk7CisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoRnVuY3Rpb25C
b2R5Tm9kZSwgbV9jb2RlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKKyAgICBfXyB0ZXN0bF9ycihY
ODY6OmVheCwgWDg2OjplYXgpOworICAgIEptcFNyYyBoYXNDb2RlQmxvY2szID0gX18gam5lKCk7
CisgICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsKKyAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVu
Y2UoKTsKKyAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7
CisgICAgSm1wU3JjIGNhbGxKU0Z1bmN0aW9uMyA9IF9fIGNhbGwoKTsKKyAgICBlbWl0R2V0Q1RJ
QXJnKDAsIFg4Njo6ZWN4KTsKKyAgICBlbWl0R2V0Q1RJQXJnKDgsIFg4Njo6ZWR4KTsKKyAgICBf
XyBwdXNobF9yKFg4Njo6ZWJ4KTsKKyAgICBfXyBsaW5rKGhhc0NvZGVCbG9jazMsIF9fIGxhYmVs
KCkpOworCisgICAgLy8gQ2hlY2sgYXJnQ291bnQgbWF0Y2hlcyBjYWxsZWUgYXJpdHkuCisgICAg
X18gY21wbF9ybShYODY6OmVkeCwgRklFTERfT0ZGU0VUKENvZGVCbG9jaywgbnVtUGFyYW1ldGVy
cyksIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgYXJpdHlDaGVja09rYXkzID0gX18gamUoKTsKKyAg
ICBfXyBwb3BsX3IoWDg2OjplYngpOworICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYngsIDQpOwor
ICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDEyKTsKKyAgICBfXyByZXN0b3JlQXJndW1lbnRS
ZWZlcmVuY2UoKTsKKyAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxG
cmFtZSk7CisgICAgSm1wU3JjIGNhbGxBcml0eUNoZWNrMyA9IF9fIGNhbGwoKTsKKyAgICBfXyBt
b3ZsX3JyKFg4Njo6ZWR4LCBYODY6OmVkaSk7CisgICAgZW1pdEdldENUSUFyZygwLCBYODY6OmVj
eCk7CisgICAgZW1pdEdldENUSUFyZyg4LCBYODY6OmVkeCk7CisgICAgX18gcHVzaGxfcihYODY6
OmVieCk7CisgICAgX18gbGluayhhcml0eUNoZWNrT2theTMsIF9fIGxhYmVsKCkpOworCisgICAg
Y29tcGlsZU9wQ2FsbEluaXRpYWxpemVDYWxsRnJhbWUoKTsKKworICAgIC8vIGxvYWQgY3RpQ29k
ZSBmcm9tIHRoZSBuZXcgY29kZUJsb2NrLgorICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKENv
ZGVCbG9jaywgY3RpQ29kZSksIFg4Njo6ZWF4LCBYODY6OmVheCk7CisKKyAgICBfXyBqbXBfcihY
ODY6OmVheCk7CisKKyAgICAvLyBBbGwgdHJhbXBvbGluZXMgY29uc3RydWN0ZWQhIGNvcHkgdGhl
IGNvZGUsIGxpbmsgdXAgY2FsbHMsIGFuZCBzZXQgdGhlIHBvaW50ZXJzIG9uIHRoZSBNYWNoaW5l
IG9iamVjdC4KKworICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weSgpOworCisgICAg
WDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGFycmF5X2ZhaWx1cmVDYXNlczEsIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwpKTsK
KyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgYXJyYXlfZmFpbHVyZUNhc2VzMiwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFp
bCkpOworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBhcnJheV9mYWlsdXJlQ2FzZXMzLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9hcnJh
eV9mYWlsKSk7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIHN0cmluZ19mYWlsdXJlQ2Fz
ZXMxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9p
ZF9zdHJpbmdfZmFpbCkpOworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBzdHJpbmdfZmFp
bHVyZUNhc2VzMiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9n
ZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgc3Ry
aW5nX2ZhaWx1cmVDYXNlczMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpj
dGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNv
ZGUsIGNhbGxBcml0eUNoZWNrMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6
OmN0aV9vcF9jYWxsX2FyaXR5Q2hlY2spKTsKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwg
Y2FsbEFyaXR5Q2hlY2syLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3Rp
X29wX2NhbGxfYXJpdHlDaGVjaykpOworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBjYWxs
QXJpdHlDaGVjazMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3Bf
Y2FsbF9hcml0eUNoZWNrKSk7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGNhbGxKU0Z1
bmN0aW9uMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxs
X0pTRnVuY3Rpb24pKTsKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgY2FsbEpTRnVuY3Rp
b24yLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2NhbGxfSlNG
dW5jdGlvbikpOworICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBjYWxsSlNGdW5jdGlvbjMs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfY2FsbF9KU0Z1bmN0
aW9uKSk7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGNhbGxEb250TGF6eUxpbmtDYWxs
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX3ZtX2RvbnRMYXp5TGlu
a0NhbGwpKTsKKyAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgY2FsbExhenlMaW5rQ2FsbCwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV92bV9sYXp5TGlua0NhbGwp
KTsKKworICAgIG1faW50ZXJwcmV0ZXItPm1fY3RpQXJyYXlMZW5ndGhUcmFtcG9saW5lID0gY29k
ZTsKKyAgICBtX2ludGVycHJldGVyLT5tX2N0aVN0cmluZ0xlbmd0aFRyYW1wb2xpbmUgPSBYODZB
c3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgc3RyaW5nTGVuZ3RoQmVnaW4pOwor
ICAgIG1faW50ZXJwcmV0ZXItPm1fY3RpVmlydHVhbENhbGxQcmVMaW5rID0gWDg2QXNzZW1ibGVy
OjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIHZpcnR1YWxDYWxsUHJlTGlua0JlZ2luKTsKKyAg
ICBtX2ludGVycHJldGVyLT5tX2N0aVZpcnR1YWxDYWxsTGluayA9IFg4NkFzc2VtYmxlcjo6Z2V0
UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCB2aXJ0dWFsQ2FsbExpbmtCZWdpbik7CisgICAgbV9pbnRl
cnByZXRlci0+bV9jdGlWaXJ0dWFsQ2FsbCA9IFg4NkFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRk
cmVzcyhjb2RlLCB2aXJ0dWFsQ2FsbEJlZ2luKTsKK30KKwordm9pZCBKSVQ6OmZyZWVDVElNYWNo
aW5lVHJhbXBvbGluZXMoSW50ZXJwcmV0ZXIqIGludGVycHJldGVyKQoreworICAgIFdURjo6ZmFz
dEZyZWVFeGVjdXRhYmxlKGludGVycHJldGVyLT5tX2N0aUFycmF5TGVuZ3RoVHJhbXBvbGluZSk7
Cit9CisKK3ZvaWQgSklUOjpwYXRjaEdldEJ5SWRTZWxmKENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRk
cmVzcykKK3sKKyAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IGNvZGVCbG9jay0+Z2V0U3R1
YkluZm8ocmV0dXJuQWRkcmVzcyk7CisKKyAgICAvLyBXZSBkb24ndCB3YW50IHRvIHJlcGF0Y2gg
bW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX2dldF9ieV9pZF9nZW5lcmlj
LgorICAgIC8vIFNob3VsZCBwcm9iYWJseSBnbyB0byBJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9i
eV9pZF9mYWlsLCBidXQgdGhhdCBkb2Vzbid0IGRvIGFueXRoaW5nIGludGVyZXN0aW5nIHJpZ2h0
IG5vdy4KKyAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9zZWxm
X2ZhaWwpKTsKKworICAgIC8vIFJlcGF0Y2ggdGhlIG9mZnNldCBpbnRvIHRoZSBwcm9wb2VydHkg
bWFwIHRvIGxvYWQgZnJvbSwgdGhlbiByZXBhdGNoIHRoZSBTdHJ1Y3R1cmUgdG8gbG9vayBmb3Iu
CisgICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoRGlzcGxhY2VtZW50KHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVy
dHlNYXBPZmZzZXQsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKikpOworICAgIFg4NkFz
c2VtYmxlcjo6cmVwYXRjaEltbWVkaWF0ZShyZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmZv
LmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZFN0cnVjdHVyZSwgcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdD4oc3RydWN0dXJlKSk7Cit9CisKK3ZvaWQgSklUOjpwYXRjaFB1dEJ5
SWRSZXBsYWNlKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6
ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVzcykKK3sKKyAgICBTdHJ1Y3R1cmVT
dHViSW5mbyYgaW5mbyA9IGNvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcyk7Cisg
ICAgCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byByZXBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4g
ZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KKyAgICAvLyBTaG91bGQgcHJv
YmFibHkgZ28gdG8gSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfaWRfZmFpbCwgYnV0IHRoYXQg
ZG9lc24ndCBkbyBhbnl0aGluZyBpbnRlcmVzdGluZyByaWdodCBub3cuCisgICAgY3RpUmVwYXRj
aENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRkcmVzcywgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYykpOworCisgICAgLy8gUmVw
YXRjaCB0aGUgb2Zmc2V0IGludG8gdGhlIHByb3BvZXJ0eSBtYXAgdG8gbG9hZCBmcm9tLCB0aGVu
IHJlcGF0Y2ggdGhlIFN0cnVjdHVyZSB0byBsb29rIGZvci4KKyAgICBYODZBc3NlbWJsZXI6OnJl
cGF0Y2hEaXNwbGFjZW1lbnQocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQYXRo
QmVnaW4pICsgcmVwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCwgY2FjaGVkT2Zm
c2V0ICogc2l6ZW9mKEpTVmFsdWUqKSk7CisgICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoSW1tZWRp
YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2luKSArIHJlcGF0
Y2hPZmZzZXRQdXRCeUlkU3RydWN0dXJlLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90PihzdHJ1
Y3R1cmUpKTsKK30KKwordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0
aCh2b2lkKiByZXR1cm5BZGRyZXNzKQoreworICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZvID0g
bV9jb2RlQmxvY2stPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOworCisgICAgLy8gV2UgZG9u
J3Qgd2FudCB0byByZXBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9v
cF9wdXRfYnlfaWRfZ2VuZXJpYy4KKyAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhy
ZXR1cm5BZGRyZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29w
X2dldF9ieV9pZF9hcnJheV9mYWlsKSk7CisKKyAgICAvLyBDaGVjayBlYXggaXMgYW4gYXJyYXkK
KyAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9pbnRlcnByZXRl
ci0+bV9qc0FycmF5VnB0ciksIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMSA9
IF9fIGpuZSgpOworCisgICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZy
b20gdGhlIHN0b3JhZ2UKKyAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0FycmF5LCBtX3N0
b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplY3gpOworICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VU
KEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpLCBYODY6OmVjeCwgWDg2OjplY3gpOworCisgICAgX18g
Y21wbF9pMzJyKEpTSW1tZWRpYXRlOjptYXhJbW1lZGlhdGVJbnQsIFg4Njo6ZWN4KTsKKyAgICBK
bXBTcmMgZmFpbHVyZUNhc2VzMiA9IF9fIGphKCk7CisKKyAgICBfXyBhZGRsX3JyKFg4Njo6ZWN4
LCBYODY6OmVjeCk7CisgICAgX18gYWRkbF9pOHIoMSwgWDg2OjplY3gpOworICAgIF9fIG1vdmxf
cnIoWDg2OjplY3gsIFg4Njo6ZWF4KTsKKyAgICBKbXBTcmMgc3VjY2VzcyA9IF9fIGptcCgpOwor
CisgICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7CisKKyAgICAvLyBVc2UgdGhl
IHJlcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRo
ZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KKyAgICB2b2lkKiBzbG93Q2FzZUJlZ2luID0g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaW5mby5jYWxsUmV0dXJuTG9jYXRpb24pIC0gcmVwYXRj
aE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGw7CisgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUs
IGZhaWx1cmVDYXNlczEsIHNsb3dDYXNlQmVnaW4pOworICAgIFg4NkFzc2VtYmxlcjo6bGluayhj
b2RlLCBmYWlsdXJlQ2FzZXMyLCBzbG93Q2FzZUJlZ2luKTsKKworICAgIC8vIE9uIHN1Y2Nlc3Mg
cmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVy
Zm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCisgICAgaW50cHRyX3Qgc3VjY2Vzc0Rlc3Qg
PSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmZvLmhvdFBhdGhCZWdpbikgKyByZXBhdGNo
T2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0OworICAgIFg4NkFzc2VtYmxlcjo6bGluayhj
b2RlLCBzdWNjZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihzdWNjZXNzRGVzdCkpOworCisg
ICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBk
ZWxldGVkIGxhdGVyLgorICAgIG1fY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNz
KS5zdHViUm91dGluZSA9IGNvZGU7CisKKyAgICAvLyBGaW5hbGx5IHJlcGF0Y2ggdGhlIGp1bXAg
dG8gc293IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCisg
ICAgaW50cHRyX3Qgam1wTG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmZv
LmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2U7Cisg
ICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoQnJhbmNoT2Zmc2V0KGptcExvY2F0aW9uLCBjb2RlKTsK
K30KKwordm9pZCBKSVQ6OmVtaXRHZXRWYXJpYWJsZU9iamVjdFJlZ2lzdGVyKFJlZ2lzdGVySUQg
dmFyaWFibGVPYmplY3QsIGludCBpbmRleCwgUmVnaXN0ZXJJRCBkc3QpCit7CisgICAgX18gbW92
bF9tcihGSUVMRF9PRkZTRVQoSlNWYXJpYWJsZU9iamVjdCwgZCksIHZhcmlhYmxlT2JqZWN0LCBk
c3QpOworICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTVmFyaWFibGVPYmplY3Q6OkpTVmFy
aWFibGVPYmplY3REYXRhLCByZWdpc3RlcnMpLCBkc3QsIGRzdCk7CisgICAgX18gbW92bF9tcihp
bmRleCAqIHNpemVvZihSZWdpc3RlciksIGRzdCwgZHN0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRQ
dXRWYXJpYWJsZU9iamVjdFJlZ2lzdGVyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIHZhcmlh
YmxlT2JqZWN0LCBpbnQgaW5kZXgpCit7CisgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNW
YXJpYWJsZU9iamVjdCwgZCksIHZhcmlhYmxlT2JqZWN0LCB2YXJpYWJsZU9iamVjdCk7CisgICAg
X18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNWYXJpYWJsZU9iamVjdDo6SlNWYXJpYWJsZU9iamVj
dERhdGEsIHJlZ2lzdGVycyksIHZhcmlhYmxlT2JqZWN0LCB2YXJpYWJsZU9iamVjdCk7CisgICAg
X18gbW92bF9ybShzcmMsIGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSwgdmFyaWFibGVPYmplY3Qp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4
OiBqaXQvSklUSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGppdC9KSVRJbmxpbmVNZXRo
b2RzLmgJKHJldmlzaW9uIDM4OTI3KQorKysgaml0L0pJVElubGluZU1ldGhvZHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMsMjEgKzIzLDEyIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSklULmgiCisjaWZuZGVmIEpJVElubGluZU1ldGhv
ZHNfaAorI2RlZmluZSBKSVRJbmxpbmVNZXRob2RzX2gKIAotI2lmIEVOQUJMRShKSVQpCi0KLSNp
bmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJKU0FycmF5LmgiCi0jaW5jbHVkZSAiSlNG
dW5jdGlvbi5oIgotI2luY2x1ZGUgIkludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiUmVzdWx0VHlw
ZS5oIgotI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgogCi0jaWZuZGVmIE5ERUJVRwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jZW5kaWYKKyNpZiBFTkFC
TEUoSklUKQogCiAjZGVmaW5lIF9fIG1fYXNzZW1ibGVyLiAKIApAQCAtNTAsMTM2ICs0MSwxMCBA
QAogLy8gTlVMTCBjYW4gY2F1c2UgY29tcGlsZXIgcHJvYmxlbXMsIGVzcGVjaWFsbHkgaW4gY2Fz
ZXMgb2YgbXVsdGlwbGUgaW5oZXJpdGFuY2UuCiAjZGVmaW5lIEZJRUxEX09GRlNFVChjbGFzcywg
ZmllbGQpIChyZWludGVycHJldF9jYXN0PHB0cmRpZmZfdD4oJihyZWludGVycHJldF9jYXN0PGNs
YXNzKj4oMHg0MDAwKS0+ZmllbGQpKSAtIDB4NDAwMCkKIAotdXNpbmcgbmFtZXNwYWNlIHN0ZDsK
LQogbmFtZXNwYWNlIEpTQyB7CiAKIHR5cGVkZWYgWDg2QXNzZW1ibGVyOjpKbXBTcmMgSm1wU3Jj
OwogCi0jaWYgUExBVEZPUk0oTUFDKQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNTU0UyUHJlc2Vu
dCgpCi17Ci0gICAgcmV0dXJuIHRydWU7IC8vIEFsbCBYODYgTWFjcyBhcmUgZ3VhcmFudGVlZCB0
byBzdXBwb3J0IGF0IGxlYXN0IFNTRTIKLX0KLQotI2Vsc2UKLQotc3RhdGljIGJvb2wgaXNTU0Uy
UHJlc2VudCgpCi17Ci0gICAgc3RhdGljIGNvbnN0IGludCBTU0UyRmVhdHVyZUJpdCA9IDEgPDwg
MjY7Ci0gICAgc3RydWN0IFNTRTJDaGVjayB7Ci0gICAgICAgIFNTRTJDaGVjaygpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGludCBmbGFnczsKLSNpZiBDT01QSUxFUihNU1ZDKQotICAgICAgICAg
ICAgX2FzbSB7Ci0gICAgICAgICAgICAgICAgbW92IGVheCwgMSAvLyBjcHVpZCBmdW5jdGlvbiAx
IGdpdmVzIHVzIHRoZSBzdGFuZGFyZCBmZWF0dXJlIHNldAotICAgICAgICAgICAgICAgIGNwdWlk
OwotICAgICAgICAgICAgICAgIG1vdiBmbGFncywgZWR4OwotICAgICAgICAgICAgfQotI2Vsc2UK
LSAgICAgICAgICAgIGZsYWdzID0gMDsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgR0NDIGNv
ZGUgdG8gZG8gYWJvdmUgYXNtCi0jZW5kaWYKLSAgICAgICAgICAgIHByZXNlbnQgPSAoZmxhZ3Mg
JiBTU0UyRmVhdHVyZUJpdCkgIT0gMDsKLSAgICAgICAgfQotICAgICAgICBib29sIHByZXNlbnQ7
Ci0gICAgfTsKLSAgICBzdGF0aWMgU1NFMkNoZWNrIGNoZWNrOwotICAgIHJldHVybiBjaGVjay5w
cmVzZW50OwotfQotCi0jZW5kaWYKLQotQ09NUElMRV9BU1NFUlQoQ1RJX0FSR1NfY29kZSA9PSAw
eEMsIENUSV9BUkdTX2NvZGVfaXNfQyk7Ci1DT01QSUxFX0FTU0VSVChDVElfQVJHU19jYWxsRnJh
bWUgPT0gMHhFLCBDVElfQVJHU19jYWxsRnJhbWVfaXNfRSk7Ci0KLSNpZiBDT01QSUxFUihHQ0Mp
ICYmIFBMQVRGT1JNKFg4NikKLQotI2lmIFBMQVRGT1JNKERBUldJTikKLSNkZWZpbmUgU1lNQk9M
X1NUUklORyhuYW1lKSAiXyIgI25hbWUKLSNlbHNlCi0jZGVmaW5lIFNZTUJPTF9TVFJJTkcobmFt
ZSkgI25hbWUKLSNlbmRpZgotCi1hc20oCi0iLmdsb2JsICIgU1lNQk9MX1NUUklORyhjdGlUcmFt
cG9saW5lKSAiXG4iCi1TWU1CT0xfU1RSSU5HKGN0aVRyYW1wb2xpbmUpICI6IiAiXG4iCi0gICAg
InB1c2hsICVlc2kiICJcbiIKLSAgICAicHVzaGwgJWVkaSIgIlxuIgotICAgICJwdXNobCAlZWJ4
IiAiXG4iCi0gICAgInN1YmwgJDB4MjAsICVlc3AiICJcbiIKLSAgICAibW92bCAkNTEyLCAlZXNp
IiAiXG4iCi0gICAgIm1vdmwgMHgzOCglZXNwKSwgJWVkaSIgIlxuIiAvLyBPeDM4ID0gMHgwRSAq
IDQsIDB4MEUgPSBDVElfQVJHU19jYWxsRnJhbWUgKHNlZSBhc3NlcnRpb24gYWJvdmUpCi0gICAg
ImNhbGwgKjB4MzAoJWVzcCkiICJcbiIgLy8gT3gzMCA9IDB4MEMgKiA0LCAweDBDID0gQ1RJX0FS
R1NfY29kZSAoc2VlIGFzc2VydGlvbiBhYm92ZSkKLSAgICAiYWRkbCAkMHgyMCwgJWVzcCIgIlxu
IgotICAgICJwb3BsICVlYngiICJcbiIKLSAgICAicG9wbCAlZWRpIiAiXG4iCi0gICAgInBvcGwg
JWVzaSIgIlxuIgotICAgICJyZXQiICJcbiIKLSk7Ci0KLWFzbSgKLSIuZ2xvYmwgIiBTWU1CT0xf
U1RSSU5HKGN0aVZNVGhyb3dUcmFtcG9saW5lKSAiXG4iCi1TWU1CT0xfU1RSSU5HKGN0aVZNVGhy
b3dUcmFtcG9saW5lKSAiOiIgIlxuIgotI2lmIFVTRShDVElfQVJHVU1FTlQpCi0jaWYgVVNFKEZB
U1RfQ0FMTF9DVElfQVJHVU1FTlQpCi0gICAgIm1vdmwgJWVzcCwgJWVjeCIgIlxuIgotI2Vsc2UK
LSAgICAibW92bCAlZXNwLCAwKCVlc3ApIiAiXG4iCi0jZW5kaWYKLSAgICAiY2FsbCAiIFNZTUJP
TF9TVFJJTkcoX1pOM0pTQzExSW50ZXJwcmV0ZXIxMmN0aV92bV90aHJvd0VQUHYpICJcbiIKLSNl
bHNlCi0gICAgImNhbGwgIiBTWU1CT0xfU1RSSU5HKF9aTjNKU0MxMUludGVycHJldGVyMTJjdGlf
dm1fdGhyb3dFUHZ6KSAiXG4iCi0jZW5kaWYKLSAgICAiYWRkbCAkMHgyMCwgJWVzcCIgIlxuIgot
ICAgICJwb3BsICVlYngiICJcbiIKLSAgICAicG9wbCAlZWRpIiAiXG4iCi0gICAgInBvcGwgJWVz
aSIgIlxuIgotICAgICJyZXQiICJcbiIKLSk7Ci0gICAgCi0jZWxpZiBDT01QSUxFUihNU1ZDKQot
Ci1leHRlcm4gIkMiIHsKLSAgICAKLSAgICBfX2RlY2xzcGVjKG5ha2VkKSBKU1ZhbHVlKiBjdGlU
cmFtcG9saW5lKHZvaWQqIGNvZGUsIFJlZ2lzdGVyRmlsZSosIENhbGxGcmFtZSosIEpTVmFsdWUq
KiBleGNlcHRpb24sIFByb2ZpbGVyKiosIEpTR2xvYmFsRGF0YSopCi0gICAgewotICAgICAgICBf
X2FzbSB7Ci0gICAgICAgICAgICBwdXNoIGVzaTsKLSAgICAgICAgICAgIHB1c2ggZWRpOwotICAg
ICAgICAgICAgcHVzaCBlYng7Ci0gICAgICAgICAgICBzdWIgZXNwLCAweDIwOwotICAgICAgICAg
ICAgbW92IGVzaSwgNTEyOwotICAgICAgICAgICAgbW92IGVjeCwgZXNwOwotICAgICAgICAgICAg
bW92IGVkaSwgW2VzcCArIDB4MzhdOwotICAgICAgICAgICAgY2FsbCBbZXNwICsgMHgzMF07IC8v
IE94MzAgPSAweDBDICogNCwgMHgwQyA9IENUSV9BUkdTX2NvZGUgKHNlZSBhc3NlcnRpb24gYWJv
dmUpCi0gICAgICAgICAgICBhZGQgZXNwLCAweDIwOwotICAgICAgICAgICAgcG9wIGVieDsKLSAg
ICAgICAgICAgIHBvcCBlZGk7Ci0gICAgICAgICAgICBwb3AgZXNpOwotICAgICAgICAgICAgcmV0
OwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIF9fZGVjbHNwZWMobmFrZWQpIHZvaWQgY3Rp
Vk1UaHJvd1RyYW1wb2xpbmUoKQotICAgIHsKLSAgICAgICAgX19hc20gewotICAgICAgICAgICAg
bW92IGVjeCwgZXNwOwotICAgICAgICAgICAgY2FsbCBKU0M6OkludGVycHJldGVyOjpjdGlfdm1f
dGhyb3c7Ci0gICAgICAgICAgICBhZGQgZXNwLCAweDIwOwotICAgICAgICAgICAgcG9wIGVieDsK
LSAgICAgICAgICAgIHBvcCBlZGk7Ci0gICAgICAgICAgICBwb3AgZXNpOwotICAgICAgICAgICAg
cmV0OwotICAgICAgICB9Ci0gICAgfQotICAgIAotfQotCi0jZW5kaWYKLQogc3RhdGljIEFMV0FZ
U19JTkxJTkUgdWludHB0cl90IGFzSW50ZWdlcihKU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKTsKQEAgLTMxMyw1NCArMTc4LDYg
QEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdpc3RlcgogICAgIC8vIEZJWE1F
OiAjaWZuZGVmIE5ERUJVRywgV3JpdGUgdGhlIGNvcnJlY3QgbV90eXBlIHRvIHRoZSByZWdpc3Rl
ci4KIH0KIAotdm9pZCBjdGlTZXRSZXR1cm5BZGRyZXNzKHZvaWQqKiB3aGVyZSwgdm9pZCogd2hh
dCkKLXsKLSAgICAqd2hlcmUgPSB3aGF0OwotfQotCi12b2lkIGN0aVJlcGF0Y2hDYWxsQnlSZXR1
cm5BZGRyZXNzKHZvaWQqIHdoZXJlLCB2b2lkKiB3aGF0KQotewotICAgIChzdGF0aWNfY2FzdDx2
b2lkKio+KHdoZXJlKSlbLTFdID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KHdoYXQpIC0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHdoZXJl
KSk7Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi0KLXZvaWQgSklUOjpwcmludEJ5dGVjb2RlT3BlcmFu
ZFR5cGVzKHVuc2lnbmVkIHNyYzEsIHVuc2lnbmVkIHNyYzIpCi17Ci0gICAgY2hhciB3aGljaDEg
PSAnKic7Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMx
KSkgewotICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChz
cmMxKTsKLSAgICAgICAgd2hpY2gxID0gCi0gICAgICAgICAgICBKU0ltbWVkaWF0ZTo6aXNJbW1l
ZGlhdGUodmFsdWUpID8KLSAgICAgICAgICAgICAgICAoSlNJbW1lZGlhdGU6OmlzTnVtYmVyKHZh
bHVlKSA/ICdpJyA6Ci0gICAgICAgICAgICAgICAgSlNJbW1lZGlhdGU6OmlzQm9vbGVhbih2YWx1
ZSkgPyAnYicgOgotICAgICAgICAgICAgICAgIHZhbHVlLT5pc1VuZGVmaW5lZCgpID8gJ3UnIDoK
LSAgICAgICAgICAgICAgICB2YWx1ZS0+aXNOdWxsKCkgPyAnbicgOiAnPycpCi0gICAgICAgICAg
ICAgICAgOgotICAgICAgICAgICAgKHZhbHVlLT5pc1N0cmluZygpID8gJ3MnIDoKLSAgICAgICAg
ICAgIHZhbHVlLT5pc09iamVjdCgpID8gJ28nIDoKLSAgICAgICAgICAgICdrJyk7Ci0gICAgfQot
ICAgIGNoYXIgd2hpY2gyID0gJyonOwotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJl
Z2lzdGVySW5kZXgoc3JjMikpIHsKLSAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBtX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQoc3JjMik7Ci0gICAgICAgIHdoaWNoMiA9IAotICAgICAgICAgICAgSlNJ
bW1lZGlhdGU6OmlzSW1tZWRpYXRlKHZhbHVlKSA/Ci0gICAgICAgICAgICAgICAgKEpTSW1tZWRp
YXRlOjppc051bWJlcih2YWx1ZSkgPyAnaScgOgotICAgICAgICAgICAgICAgIEpTSW1tZWRpYXRl
Ojppc0Jvb2xlYW4odmFsdWUpID8gJ2InIDoKLSAgICAgICAgICAgICAgICB2YWx1ZS0+aXNVbmRl
ZmluZWQoKSA/ICd1JyA6Ci0gICAgICAgICAgICAgICAgdmFsdWUtPmlzTnVsbCgpID8gJ24nIDog
Jz8nKQotICAgICAgICAgICAgICAgIDoKLSAgICAgICAgICAgICh2YWx1ZS0+aXNTdHJpbmcoKSA/
ICdzJyA6Ci0gICAgICAgICAgICB2YWx1ZS0+aXNPYmplY3QoKSA/ICdvJyA6Ci0gICAgICAgICAg
ICAnaycpOwotICAgIH0KLSAgICBpZiAoKHdoaWNoMSAhPSAnKicpIHwgKHdoaWNoMiAhPSAnKicp
KQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlR5cGVzICVjICVjXG4iLCB3aGljaDEsIHdoaWNo
Mik7Ci19Ci0KLSNlbmRpZgotCiBBTFdBWVNfSU5MSU5FIEptcFNyYyBKSVQ6OmVtaXROYWtlZENh
bGwodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgWDg2OjpSZWdpc3RlcklEIHIpCiB7CiAgICAgSm1w
U3JjIGNhbGwgPSBfXyBjYWxsKHIpOwpAQCAtNDk1LDcgKzMxMiw3IEBAIEFMV0FZU19JTkxJTkUg
Sm1wU3JjIEpJVDo6ZW1pdENUSUNhbGwodW4KICAgICByZXR1cm4gY2FsbDsKIH0KIAotSm1wU3Jj
IEpJVDo6Y2hlY2tTdHJ1Y3R1cmUoUmVnaXN0ZXJJRCByZWcsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQorQUxXQVlTX0lOTElORSBKbXBTcmMgSklUOjpjaGVja1N0cnVjdHVyZShSZWdpc3RlcklEIHJl
ZywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3Q+KHN0cnVjdHVyZSksIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0
dXJlKSwgcmVnKTsKICAgICByZXR1cm4gX18gam5lKCk7CkBAIC01NjEsNyArMzc4LDcgQEAgQUxX
QVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEZhc3RBcml0aFJlVAogCiBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0RmFzdEFyaXRoUG90ZW50aWFsbHlSZVRhZ0ltbWVkaWF0ZShSZWdpc3RlcklE
IHJlZykKIHsKLSAgICBfXyBvcmxfaTMycihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIs
IHJlZyk7CisgICAgX18gb3JsX2k4cihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIHJl
Zyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRGYXN0QXJpdGhJbW1Ub0ludChS
ZWdpc3RlcklEIHJlZykKQEAgLTU4NSwzMTc3ICs0MDIsMTEgQEAgQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEZhc3RBcml0aEludAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFRhZ0Fz
Qm9vbEltbWVkaWF0ZShSZWdpc3RlcklEIHJlZykKIHsKICAgICBfXyBzaGxfaThyKEpTSW1tZWRp
YXRlOjpFeHRlbmRlZFBheWxvYWRTaGlmdCwgcmVnKTsKLSAgICBfXyBvcmxfaTMycihKU0ltbWVk
aWF0ZTo6RnVsbFRhZ1R5cGVCb29sLCByZWcpOwotfQotCi1KSVQ6OkpJVChKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrKQotICAgIDogbV9hc3NlbWJsZXIoZ2xv
YmFsRGF0YS0+aW50ZXJwcmV0ZXItPmFzc2VtYmxlckJ1ZmZlcigpKQotICAgICwgbV9pbnRlcnBy
ZXRlcihnbG9iYWxEYXRhLT5pbnRlcnByZXRlcikKLSAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxE
YXRhKQotICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAgICwgbV9sYWJlbHMoY29kZUJs
b2NrID8gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuc2l6ZSgpIDogMCkKLSAgICAsIG1fcHJvcGVy
dHlBY2Nlc3NDb21waWxhdGlvbkluZm8oY29kZUJsb2NrID8gY29kZUJsb2NrLT5wcm9wZXJ0eUFj
Y2Vzc0luc3RydWN0aW9ucy5zaXplKCkgOiAwKQotICAgICwgbV9jYWxsU3RydWN0dXJlU3R1YkNv
bXBpbGF0aW9uSW5mbyhjb2RlQmxvY2sgPyBjb2RlQmxvY2stPmNhbGxMaW5rSW5mb3Muc2l6ZSgp
IDogMCkKLSAgICAsIG1fbGFzdFJlc3VsdEJ5dGVjb2RlUmVnaXN0ZXIoc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKSkKLSAgICAsIG1fanVtcFRhcmdldHNQb3NpdGlvbigwKQotewotfQot
Ci0jZGVmaW5lIENUSV9DT01QSUxFX0JJTkFSWV9PUChuYW1lKSBcCi0gICAgY2FzZSBuYW1lOiB7
IFwKLSAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOyBcCi0gICAgICAgIGVtaXRQdXRDVElBcmdG
cm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDQsIFg4Njo6
ZWN4KTsgXAotICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpXyMjbmFtZSk7
IFwKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5v
cGVyYW5kKTsgXAotICAgICAgICBpICs9IDQ7IFwKLSAgICAgICAgYnJlYWs7IFwKLSAgICB9Ci0K
LSNkZWZpbmUgQ1RJX0NPTVBJTEVfVU5BUllfT1AobmFtZSkgXAotICAgIGNhc2UgbmFtZTogeyBc
Ci0gICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsgXAotICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJ
bnRlcnByZXRlcjo6Y3RpXyMjbmFtZSk7IFwKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsgXAotICAgICAgICBpICs9IDM7IFwKLSAg
ICAgICAgYnJlYWs7IFwKLSAgICB9Ci0KLXN0YXRpYyB2b2lkIHVucmVhY2hhYmxlKCkKLXsKLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBleGl0KDEpOwotfQotCi12b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbEluaXRpYWxpemVDYWxsRnJhbWUoKQotewotICAgIF9fIG1vdmxfcm0oWDg2Ojpl
ZHgsIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSksIFg4Njo6ZWRpKTsKLQotICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpT
RnVuY3Rpb24sIG1fc2NvcGVDaGFpbikgKyBGSUVMRF9PRkZTRVQoU2NvcGVDaGFpbiwgbV9ub2Rl
KSwgWDg2OjplY3gsIFg4Njo6ZWR4KTsgLy8gbmV3U2NvcGVDaGFpbgotCi0gICAgX18gbW92bF9p
MzJtKGFzSW50ZWdlcihub1ZhbHVlKCkpLCBSZWdpc3RlckZpbGU6Ok9wdGlvbmFsQ2FsbGVlQXJn
dW1lbnRzICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkpOwot
ICAgIF9fIG1vdmxfcm0oWDg2OjplY3gsIFJlZ2lzdGVyRmlsZTo6Q2FsbGVlICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkpOwotICAgIF9fIG1vdmxfcm0oWDg2
OjplZHgsIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbiAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9m
KFJlZ2lzdGVyKSksIFg4Njo6ZWRpKTsKLX0KLQotdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTZXR1
cEFyZ3MoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQotewotICAgIGludCBhcmdDb3VudCA9IGlu
c3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBpbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQ7Ci0KLSAgICAvLyBlY3ggaG9sZHMgZnVuYwotICAgIGVtaXRQdXRD
VElBcmcoWDg2OjplY3gsIDApOwotICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWdpc3Rlck9m
ZnNldCwgNCk7Ci0gICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KGFyZ0NvdW50LCA4KTsKLSAgICBl
bWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaW5zdHJ1Y3Rp
b24pLCAxMik7Ci19Ci0KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsRXZhbFNldHVwQXJncyhJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOwotICAgIGludCByZWdpc3Rlck9mZnNldCA9IGluc3RydWN0aW9uWzRdLnUu
b3BlcmFuZDsKLQotICAgIC8vIGVjeCBob2xkcyBmdW5jCi0gICAgZW1pdFB1dENUSUFyZyhYODY6
OmVjeCwgMCk7Ci0gICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlZ2lzdGVyT2Zmc2V0LCA0KTsK
LSAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoYXJnQ291bnQsIDgpOwotICAgIGVtaXRQdXRDVElB
cmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpbnN0cnVjdGlvbiksIDEyKTsK
LX0KLQotdm9pZCBKSVQ6OmNvbXBpbGVPcENvbnN0cnVjdFNldHVwQXJncyhJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOwotICAgIGludCByZWdpc3Rlck9mZnNldCA9IGluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsK
LSAgICBpbnQgcHJvdG8gPSBpbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7Ci0gICAgaW50IHRoaXNS
ZWdpc3RlciA9IGluc3RydWN0aW9uWzZdLnUub3BlcmFuZDsKLQotICAgIC8vIGVjeCBob2xkcyBm
dW5jCi0gICAgZW1pdFB1dENUSUFyZyhYODY6OmVjeCwgMCk7Ci0gICAgZW1pdFB1dENUSUFyZ0Nv
bnN0YW50KHJlZ2lzdGVyT2Zmc2V0LCA0KTsKLSAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoYXJn
Q291bnQsIDgpOwotICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHByb3RvLCAx
MiwgWDg2OjplYXgpOwotICAgIGVtaXRQdXRDVElBcmdDb25zdGFudCh0aGlzUmVnaXN0ZXIsIDE2
KTsKLSAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4o
aW5zdHJ1Y3Rpb24pLCAyMCk7Ci19Ci0KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlE
IG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGksIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4KQotewotICAgIGludCBkc3QgPSBpbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7Ci0gICAgaW50IGNhbGxlZSA9IGluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBp
bnQgYXJnQ291bnQgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHJlZ2lzdGVy
T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwotCi0gICAgLy8gSGFuZGxlIGV2YWwK
LSAgICBKbXBTcmMgd2FzRXZhbDsKLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKSB7
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBYODY6OmVjeCwgaSk7Ci0g
ICAgICAgIGNvbXBpbGVPcENhbGxFdmFsU2V0dXBBcmdzKGluc3RydWN0aW9uKTsKLQotICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2NhbGxfZXZhbCk7Ci0gICAgICAg
IF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6OmltcG9zc2libGVWYWx1ZSgpKSwg
WDg2OjplYXgpOwotICAgICAgICB3YXNFdmFsID0gX18gam5lKCk7Ci0gICAgfQotCi0gICAgLy8g
VGhpcyBwbGFudHMgYSBjaGVjayBmb3IgYSBjYWNoZWQgSlNGdW5jdGlvbiB2YWx1ZSwgc28gd2Ug
Y2FuIHBsYW50IGEgZmFzdCBsaW5rIHRvIHRoZSBjYWxsZWUuCi0gICAgLy8gVGhpcyBkZWxpYmVy
YXRlbHkgbGVhdmVzIHRoZSBjYWxsZWUgaW4gZWN4LCB1c2VkIHdoZW4gc2V0dGluZyB1cCB0aGUg
c3RhY2sgZnJhbWUgYmVsb3cKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgWDg2
OjplY3gsIGkpOwotICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoSlNJbW1lZGlhdGU6OmltcG9z
c2libGVWYWx1ZSgpKSwgWDg2OjplY3gpOwotICAgIEptcERzdCBhZGRyZXNzT2ZMaW5rZWRGdW5j
dGlvbkNoZWNrID0gX18gbGFiZWwoKTsKLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VF
bnRyeShfXyBqbmUoKSwgaSkpOwotICAgIEFTU0VSVChYODZBc3NlbWJsZXI6OmdldERpZmZlcmVu
Y2VCZXR3ZWVuTGFiZWxzKGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIF9fIGxhYmVsKCkp
ID09IHJlcGF0Y2hPZmZzZXRPcENhbGxDYWxsKTsKLSAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29t
cGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZM
aW5rZWRGdW5jdGlvbkNoZWNrOwotCi0gICAgLy8gVGhlIGZvbGxvd2luZyBpcyB0aGUgZmFzdCBj
YXNlLCBvbmx5IHVzZWQgd2hhbiBhIGNhbGxlZSBjYW4gYmUgbGlua2VkLgotCi0gICAgLy8gSW4g
dGhlIGNhc2Ugb2YgT3BDb25zdHJ1Y3QsIGNhbGwgb3V0IHRvIGEgY3RpXyBmdW5jdGlvbiB0byBj
cmVhdGUgdGhlIG5ldyBvYmplY3QuCi0gICAgaWYgKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCkg
ewotICAgICAgICBpbnQgcHJvdG8gPSBpbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7Ci0gICAgICAg
IGludCB0aGlzUmVnaXN0ZXIgPSBpbnN0cnVjdGlvbls2XS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAg
ZW1pdFB1dENUSUFyZyhYODY6OmVjeCwgMCk7Ci0gICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmly
dHVhbFJlZ2lzdGVyKHByb3RvLCAxMiwgWDg2OjplYXgpOwotICAgICAgICBlbWl0Q1RJQ2FsbChp
LCBJbnRlcnByZXRlcjo6Y3RpX29wX2NvbnN0cnVjdF9KU0NvbnN0cnVjdCk7Ci0gICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZ2lzdGVyKTsKLSAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihjYWxsZWUsIFg4Njo6ZWN4LCBpKTsKLSAgICB9Ci0KLSAgICAvLyBGYXN0IHZl
cnNpb24gb2Ygc3RhY2sgZnJhbWUgaW5pdGlhbGl6YXRpb24sIGRpcmVjdGx5IHJlbGF0aXZlIHRv
IGVkaS4KLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBvbWl0cyB0byBzZXQgdXAgUmVnaXN0ZXJGaWxl
OjpDb2RlQmxvY2ssIHdoaWNoIGlzIHNldCBpbiB0aGUgY2FsbGVlCi0gICAgX18gbW92bF9pMzJt
KGFzSW50ZWdlcihub1ZhbHVlKCkpLCAocmVnaXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZpbGU6Ok9w
dGlvbmFsQ2FsbGVlQXJndW1lbnRzKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVy
KSksIFg4Njo6ZWRpKTsKLSAgICBfXyBtb3ZsX3JtKFg4Njo6ZWN4LCAocmVnaXN0ZXJPZmZzZXQg
KyBSZWdpc3RlckZpbGU6OkNhbGxlZSkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rl
cikpLCBYODY6OmVkaSk7Ci0gICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNGdW5jdGlvbiwg
bV9zY29wZUNoYWluKSArIEZJRUxEX09GRlNFVChTY29wZUNoYWluLCBtX25vZGUpLCBYODY6OmVj
eCwgWDg2OjplZHgpOyAvLyBuZXdTY29wZUNoYWluCi0gICAgX18gbW92bF9pMzJtKGFyZ0NvdW50
LCAocmVnaXN0ZXJPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQpICogc3RhdGlj
X2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkpOwotICAgIF9fIG1vdmxfcm0o
WDg2OjplZGksIChyZWdpc3Rlck9mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUpICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkpOwotICAgIF9fIG1v
dmxfcm0oWDg2OjplZHgsIChyZWdpc3Rlck9mZnNldCArIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFp
bikgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBYODY6OmVkaSk7Ci0gICAg
X18gYWRkbF9pMzJyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSwgWDg2OjplZGkp
OwotCi0gICAgLy8gQ2FsbCB0byB0aGUgY2FsbGVlCi0gICAgbV9jYWxsU3RydWN0dXJlU3R1YkNv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5ha2Vk
Q2FsbChpLCByZWludGVycHJldF9jYXN0PHZvaWQqPih1bnJlYWNoYWJsZSkpOwotICAgIAotICAg
IGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpCi0gICAgICAgIF9fIGxpbmsod2FzRXZhbCwg
X18gbGFiZWwoKSk7Ci0KLSAgICAvLyBQdXQgdGhlIHJldHVybiB2YWx1ZSBpbiBkc3QuIEluIHRo
ZSBpbnRlcnByZXRlciwgb3BfcmV0IGRvZXMgdGhpcy4KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7Ci0KLSNpZiBFTkFCTEUoQ09ERUJMT0NLX1NBTVBMSU5HKQotICAgICAgICBfXyBt
b3ZsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obV9jb2RlQmxvY2spLCBtX2ludGVy
cHJldGVyLT5zYW1wbGVyKCktPmNvZGVCbG9ja1Nsb3QoKSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBK
SVQ6OmNvbXBpbGVPcFN0cmljdEVxKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQg
aSwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCi17Ci0gICAgYm9vbCBuZWdhdGVkID0gKHR5
cGUgPT0gT3BOU3RyaWN0RXEpOwotCi0gICAgdW5zaWduZWQgZHN0ID0gaW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHNyYzEgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
Ci0gICAgdW5zaWduZWQgc3JjMiA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIFg4Njo6ZWF4LCBzcmMyLCBYODY6OmVkeCwgaSk7
Ci0KLSAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7Ci0g
ICAgSm1wU3JjIGZpcnN0Tm90SW1tZWRpYXRlID0gX18gamUoKTsKLSAgICBfXyB0ZXN0bF9pMzJy
KEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVkeCk7Ci0gICAgSm1wU3JjIHNlY29uZE5vdElt
bWVkaWF0ZSA9IF9fIGplKCk7Ci0KLSAgICBfXyBjbXBsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7
Ci0gICAgaWYgKG5lZ2F0ZWQpCi0gICAgICAgIF9fIHNldG5lX3IoWDg2OjplYXgpOwotICAgIGVs
c2UKLSAgICAgICAgX18gc2V0ZV9yKFg4Njo6ZWF4KTsKLSAgICBfXyBtb3Z6YmxfcnIoWDg2Ojpl
YXgsIFg4Njo6ZWF4KTsKLSAgICBlbWl0VGFnQXNCb29sSW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAg
ICAgICAgICAgIAotICAgIEptcFNyYyBib3RoV2VyZUltbWVkaWF0ZXMgPSBfXyBqbXAoKTsKLQot
ICAgIF9fIGxpbmsoZmlyc3ROb3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwotCi0gICAgLy8gY2hl
Y2sgdGhhdCBlZHggaXMgaW1tZWRpYXRlIGJ1dCBub3QgdGhlIHplcm8gaW1tZWRpYXRlCi0gICAg
X18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplZHgpOwotICAgIF9fIHNl
dHpfcihYODY6OmVjeCk7Ci0gICAgX18gbW92emJsX3JyKFg4Njo6ZWN4LCBYODY6OmVjeCk7IC8v
IGVjeCBpcyBub3cgMSBpZiBlZHggd2FzIG5vbmltbWVkaWF0ZQotICAgIF9fIGNtcGxfaTMycihh
c0ludGVnZXIoSlNJbW1lZGlhdGU6Onplcm9JbW1lZGlhdGUoKSksIFg4Njo6ZWR4KTsKLSAgICBf
XyBzZXRlX3IoWDg2OjplZHgpOwotICAgIF9fIG1vdnpibF9ycihYODY6OmVkeCwgWDg2OjplZHgp
OyAvLyBlZHggaXMgbm93IDEgaWYgZWR4IHdhcyB0aGUgMCBpbW1lZGlhdGUKLSAgICBfXyBvcmxf
cnIoWDg2OjplY3gsIFg4Njo6ZWR4KTsKLQotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2Fz
ZUVudHJ5KF9fIGpueigpLCBpKSk7Ci0KLSAgICBfXyBtb3ZsX2kzMnIoYXNJbnRlZ2VyKGpzQm9v
bGVhbihuZWdhdGVkKSksIFg4Njo6ZWF4KTsKLQotICAgIEptcFNyYyBmaXJzdFdhc05vdEltbWVk
aWF0ZSA9IF9fIGptcCgpOwotCi0gICAgX18gbGluayhzZWNvbmROb3RJbW1lZGlhdGUsIF9fIGxh
YmVsKCkpOwotICAgIC8vIGNoZWNrIHRoYXQgZWF4IGlzIG5vdCB0aGUgemVybyBpbW1lZGlhdGUg
KHdlIGtub3cgaXQgbXVzdCBiZSBpbW1lZGlhdGUpCi0gICAgX18gY21wbF9pMzJyKGFzSW50ZWdl
cihKU0ltbWVkaWF0ZTo6emVyb0ltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOwotICAgIG1fc2xvd0Nh
c2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGplKCksIGkpKTsKLQotICAgIF9fIG1vdmxfaTMy
cihhc0ludGVnZXIoanNCb29sZWFuKG5lZ2F0ZWQpKSwgWDg2OjplYXgpOwotCi0gICAgX18gbGlu
ayhib3RoV2VyZUltbWVkaWF0ZXMsIF9fIGxhYmVsKCkpOwotICAgIF9fIGxpbmsoZmlyc3RXYXNO
b3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwotCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dTY3JpcHRDaGVjayh1bnNpZ25lZCBieXRlY29k
ZUluZGV4KQotewotICAgIF9fIHN1YmxfaThyKDEsIFg4Njo6ZXNpKTsKLSAgICBKbXBTcmMgc2tp
cFRpbWVvdXQgPSBfXyBqbmUoKTsKLSAgICBlbWl0Q1RJQ2FsbChieXRlY29kZUluZGV4LCBJbnRl
cnByZXRlcjo6Y3RpX3RpbWVvdXRfY2hlY2spOwotCi0gICAgZW1pdEdldENUSVBhcmFtKENUSV9B
UkdTX2dsb2JhbERhdGEsIFg4Njo6ZWN4KTsKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChK
U0dsb2JhbERhdGEsIGludGVycHJldGVyKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKLSAgICBfXyBt
b3ZsX21yKEZJRUxEX09GRlNFVChJbnRlcnByZXRlciwgbV90aWNrc1VudGlsTmV4dFRpbWVvdXRD
aGVjayksIFg4Njo6ZWN4LCBYODY6OmVzaSk7Ci0gICAgX18gbGluayhza2lwVGltZW91dCwgX18g
bGFiZWwoKSk7Ci0KLSAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Ci19Ci0KLS8qCi0gIFRo
aXMgaXMgcmVxdWlyZWQgc2luY2UgbnVtYmVyIHJlcHJlc2VudGF0aW9uIGlzIGNhbm9uaWNhbCAt
IHZhbHVlcyByZXByZXNlbnRhYmxlIGFzIGEgSlNJbW1lZGlhdGUgc2hvdWxkIG5vdCBiZSBzdG9y
ZWQgaW4gYSBKU051bWJlckNlbGwuCi0gIAotICBJbiB0aGUgY29tbW9uIGNhc2UsIHRoZSBkb3Vi
bGUgdmFsdWUgZnJvbSAneG1tU291cmNlJyBpcyB3cml0dGVuIHRvIHRoZSByZXVzYWJsZSBKU051
bWJlckNlbGwgcG9pbnRlZCB0byBieSAnanNOdW1iZXJDZWxsJywgdGhlbiAnanNOdW1iZXJDZWxs
JwotICBpcyB3cml0dGVuIHRvIHRoZSBvdXRwdXQgU0YgUmVnaXN0ZXIgJ2RzdCcsIGFuZCB0aGVu
IGEganVtcCBpcyBwbGFudGVkIChzdG9yZWQgaW50byAqd3JvdGVKU051bWJlckNlbGwpLgotICAK
LSAgSG93ZXZlciBpZiB0aGUgdmFsdWUgZnJvbSB4bW1Tb3VyY2UgaXMgcmVwcmVzZW50YWJsZSBh
cyBhIEpTSW1tZWRpYXRlLCB0aGVuIHRoZSBKU0ltbWVkaWF0ZSB2YWx1ZSB3aWxsIGJlIHdyaXR0
ZW4gdG8gdGhlIG91dHB1dCwgYW5kIGZsb3cKLSAgY29udHJvbCB3aWxsIGZhbGwgdGhyb3VnaCBm
cm9tIHRoZSBjb2RlIHBsYW50ZWQuCi0qLwotdm9pZCBKSVQ6OnB1dERvdWJsZVJlc3VsdFRvSlNO
dW1iZXJDZWxsT3JKU0ltbWVkaWF0ZShYODY6OlhNTVJlZ2lzdGVySUQgeG1tU291cmNlLCBYODY6
OlJlZ2lzdGVySUQganNOdW1iZXJDZWxsLCB1bnNpZ25lZCBkc3QsIEptcFNyYyogd3JvdGVKU051
bWJlckNlbGwsICBYODY6OlhNTVJlZ2lzdGVySUQgdGVtcFhtbSwgWDg2OjpSZWdpc3RlcklEIHRl
bXBSZWcxLCBYODY6OlJlZ2lzdGVySUQgdGVtcFJlZzIpCi17Ci0gICAgLy8gY29udmVydCAoZG91
YmxlIC0+IEpTSW1tZWRpYXRlIC0+IGRvdWJsZSksIGFuZCBjaGVjayBpZiB0aGUgdmFsdWUgaXMg
dW5jaGFuZ2VkIC0gaW4gd2hpY2ggY2FzZSB0aGUgdmFsdWUgaXMgcmVwcmVzZW50YWJsZSBhcyBh
IEpTSW1tZWRpYXRlLgotICAgIF9fIGN2dHRzZDJzaV9ycih4bW1Tb3VyY2UsIHRlbXBSZWcxKTsK
LSAgICBfXyBhZGRsX3JyKHRlbXBSZWcxLCB0ZW1wUmVnMSk7Ci0gICAgX18gc2FybF9pOHIoMSwg
dGVtcFJlZzEpOwotICAgIF9fIGN2dHNpMnNkX3JyKHRlbXBSZWcxLCB0ZW1wWG1tKTsKLSAgICAv
LyBDb21wYXJlICYgYnJhbmNoIGlmIGltbWVkaWF0ZS4gCi0gICAgX18gdWNvbWlzX3JyKHRlbXBY
bW0sIHhtbVNvdXJjZSk7Ci0gICAgSm1wU3JjIHJlc3VsdElzSW1tID0gX18gamUoKTsKLSAgICBK
bXBEc3QgcmVzdWx0TG9va2VkTGlrZUltbUJ1dEFjdHVhbGx5SXNudCA9IF9fIGxhYmVsKCk7Ci0g
ICAgCi0gICAgLy8gU3RvcmUgdGhlIHJlc3VsdCB0byB0aGUgSlNOdW1iZXJDZWxsIGFuZCBqdW1w
LgotICAgIF9fIG1vdnNkX3JtKHhtbVNvdXJjZSwgRklFTERfT0ZGU0VUKEpTTnVtYmVyQ2VsbCwg
bV92YWx1ZSksIGpzTnVtYmVyQ2VsbCk7Ci0gICAgaWYgKGpzTnVtYmVyQ2VsbCAhPSBYODY6OmVh
eCkKLSAgICAgICAgX18gbW92bF9ycihqc051bWJlckNlbGwsIFg4Njo6ZWF4KTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgKndyb3RlSlNOdW1iZXJDZWxsID0gX18gam1w
KCk7Ci0KLSAgICBfXyBsaW5rKHJlc3VsdElzSW1tLCBfXyBsYWJlbCgpKTsKLSAgICAvLyB2YWx1
ZSA9PSAoZG91YmxlKShKU0ltbWVkaWF0ZSl2YWx1ZS4uLiBvciBhdCBsZWFzdCwgaXQgbG9va3Mg
dGhhdCB3YXkuLi4KLSAgICAvLyB1Y29taSB3aWxsIHJlcG9ydCB0aGF0ICgwID09IC0wKSwgYW5k
IHdpbGwgcmVwb3J0IHRydWUgaWYgZWl0aGVyIGlucHV0IGluIE5hTiAocmVzdWx0IGlzIHVub3Jk
ZXJlZCkuCi0gICAgX18gbGluayhfXyBqcCgpLCByZXN1bHRMb29rZWRMaWtlSW1tQnV0QWN0dWFs
bHlJc250KTsgLy8gQWN0dWFsbHkgd2FzIGEgTmFOCi0gICAgX18gcGV4dHJ3X2lycigzLCB4bW1T
b3VyY2UsIHRlbXBSZWcyKTsKLSAgICBfXyBjbXBsX2kzMnIoMHg4MDAwLCB0ZW1wUmVnMik7Ci0g
ICAgX18gbGluayhfXyBqZSgpLCByZXN1bHRMb29rZWRMaWtlSW1tQnV0QWN0dWFsbHlJc250KTsg
Ly8gQWN0dWFsbHkgd2FzIC0wCi0gICAgLy8gWWVzIGl0IHJlYWxseSByZWFsbHkgcmVhbGx5IGlz
IHJlcHJlc2VudGFibGUgYXMgYSBKU0ltbWVkaWF0ZS4KLSAgICBlbWl0RmFzdEFyaXRoSW50VG9J
bW1Ob0NoZWNrKHRlbXBSZWcxKTsKLSAgICBpZiAodGVtcFJlZzEgIT0gWDg2OjplYXgpCi0gICAg
ICAgIF9fIG1vdmxfcnIodGVtcFJlZzEsIFg4Njo6ZWF4KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7Ci19Ci0KLXZvaWQgSklUOjpjb21waWxlQmluYXJ5QXJpdGhPcChPcGNvZGVJ
RCBvcGNvZGVJRCwgdW5zaWduZWQgZHN0LCB1bnNpZ25lZCBzcmMxLCB1bnNpZ25lZCBzcmMyLCBP
cGVyYW5kVHlwZXMgdHlwZXMsIHVuc2lnbmVkIGkpCi17Ci0gICAgU3RydWN0dXJlKiBudW1iZXJT
dHJ1Y3R1cmUgPSBtX2dsb2JhbERhdGEtPm51bWJlclN0cnVjdHVyZS5nZXQoKTsKLSAgICBKbXBT
cmMgd2FzSlNOdW1iZXJDZWxsMTsKLSAgICBKbXBTcmMgd2FzSlNOdW1iZXJDZWxsMWI7Ci0gICAg
Sm1wU3JjIHdhc0pTTnVtYmVyQ2VsbDI7Ci0gICAgSm1wU3JjIHdhc0pTTnVtYmVyQ2VsbDJiOwot
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgWDg2OjplYXgsIHNyYzIsIFg4Njo6
ZWR4LCBpKTsKLQotICAgIGlmICh0eXBlcy5zZWNvbmQoKS5pc1JldXNhYmxlKCkgJiYgaXNTU0Uy
UHJlc2VudCgpKSB7Ci0gICAgICAgIEFTU0VSVCh0eXBlcy5zZWNvbmQoKS5taWdodEJlTnVtYmVy
KCkpOwotCi0gICAgICAgIC8vIENoZWNrIG9wMiBpcyBhIG51bWJlcgotICAgICAgICBfXyB0ZXN0
bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgWDg2OjplZHgpOwotICAgICAg
ICBKbXBTcmMgb3AyaW1tID0gX18gam5lKCk7Ci0gICAgICAgIGlmICghdHlwZXMuc2Vjb25kKCku
ZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChYODY6OmVkeCwgaSwgc3JjMik7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMm0ocmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obnVtYmVyU3RydWN0dXJlKSwgRklFTERfT0ZGU0VUKEpT
Q2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5h
cHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gKDEpIEluIHRoaXMgY2FzZSBzcmMyIGlzIGEgcmV1c2FibGUgbnVtYmVyIGNlbGwuCi0gICAg
ICAgIC8vICAgICBTbG93IGNhc2UgaWYgc3JjMSBpcyBub3QgYSBudW1iZXIgdHlwZS4KLSAgICAg
ICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWF4
KTsKLSAgICAgICAgSm1wU3JjIG9wMWltbSA9IF9fIGpuZSgpOwotICAgICAgICBpZiAoIXR5cGVz
LmZpcnN0KCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVheCwgaSwgc3JjMSk7Ci0gICAgICAgICAgICBfXyBjbXBs
X2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4obnVtYmVyU3RydWN0dXJlKSwgRklFTERf
T0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX3Ns
b3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gKDFhKSBpZiB3ZSBnZXQgaGVyZSwgc3JjMSBpcyBhbHNvIGEgbnVtYmVyIGNl
bGwKLSAgICAgICAgX18gbW92c2RfbXIoRklFTERfT0ZGU0VUKEpTTnVtYmVyQ2VsbCwgbV92YWx1
ZSksIFg4Njo6ZWF4LCBYODY6OnhtbTApOwotICAgICAgICBKbXBTcmMgbG9hZGVkRG91YmxlID0g
X18gam1wKCk7Ci0gICAgICAgIC8vICgxYikgaWYgd2UgZ2V0IGhlcmUsIHNyYzEgaXMgYW4gaW1t
ZWRpYXRlCi0gICAgICAgIF9fIGxpbmsob3AxaW1tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgZW1p
dEZhc3RBcml0aEltbVRvSW50KFg4Njo6ZWF4KTsKLSAgICAgICAgX18gY3Z0c2kyc2RfcnIoWDg2
OjplYXgsIFg4Njo6eG1tMCk7Ci0gICAgICAgIC8vICgxYykgCi0gICAgICAgIF9fIGxpbmsobG9h
ZGVkRG91YmxlLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgaWYgKG9wY29kZUlEID09IG9wX2FkZCkK
LSAgICAgICAgICAgIF9fIGFkZHNkX21yKEZJRUxEX09GRlNFVChKU051bWJlckNlbGwsIG1fdmFs
dWUpLCBYODY6OmVkeCwgWDg2Ojp4bW0wKTsKLSAgICAgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0g
b3Bfc3ViKQotICAgICAgICAgICAgX18gc3Vic2RfbXIoRklFTERfT0ZGU0VUKEpTTnVtYmVyQ2Vs
bCwgbV92YWx1ZSksIFg4Njo6ZWR4LCBYODY6OnhtbTApOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9tdWwpOwotICAgICAgICAgICAgX18gbXVsc2Rf
bXIoRklFTERfT0ZGU0VUKEpTTnVtYmVyQ2VsbCwgbV92YWx1ZSksIFg4Njo6ZWR4LCBYODY6Onht
bTApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHV0RG91YmxlUmVzdWx0VG9KU051bWJlckNlbGxP
ckpTSW1tZWRpYXRlKFg4Njo6eG1tMCwgWDg2OjplZHgsIGRzdCwgJndhc0pTTnVtYmVyQ2VsbDIs
IFg4Njo6eG1tMSwgWDg2OjplY3gsIFg4Njo6ZWF4KTsKLSAgICAgICAgd2FzSlNOdW1iZXJDZWxs
MmIgPSBfXyBqbXAoKTsKLQotICAgICAgICAvLyAoMikgVGhpcyBoYW5kbGVzIGNhc2VzIHdoZXJl
IHNyYzIgaXMgYW4gaW1tZWRpYXRlIG51bWJlci4KLSAgICAgICAgLy8gICAgIFR3byBzbG93IGNh
c2VzIC0gZWl0aGVyIHNyYzEgaXNuJ3QgYW4gaW1tZWRpYXRlLCBvciB0aGUgc3VidHJhY3Qgb3Zl
cmZsb3dzLgotICAgICAgICBfXyBsaW5rKG9wMmltbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7Ci0gICAgfSBlbHNlIGlmICh0
eXBlcy5maXJzdCgpLmlzUmV1c2FibGUoKSAmJiBpc1NTRTJQcmVzZW50KCkpIHsKLSAgICAgICAg
QVNTRVJUKHR5cGVzLmZpcnN0KCkubWlnaHRCZU51bWJlcigpKTsKLQotICAgICAgICAvLyBDaGVj
ayBvcDEgaXMgYSBudW1iZXIKLSAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFn
Qml0VHlwZUludGVnZXIsIFg4Njo6ZWF4KTsKLSAgICAgICAgSm1wU3JjIG9wMWltbSA9IF9fIGpu
ZSgpOwotICAgICAgICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsK
LSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChYODY6OmVheCwgaSwgc3Jj
MSk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4o
bnVtYmVyU3RydWN0dXJlKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6
OmVheCk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBq
bmUoKSwgaSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gKDEpIEluIHRoaXMgY2FzZSBzcmMx
IGlzIGEgcmV1c2FibGUgbnVtYmVyIGNlbGwuCi0gICAgICAgIC8vICAgICBTbG93IGNhc2UgaWYg
c3JjMiBpcyBub3QgYSBudW1iZXIgdHlwZS4KLSAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVk
aWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWR4KTsKLSAgICAgICAgSm1wU3JjIG9wMmlt
bSA9IF9fIGpuZSgpOwotICAgICAgICBpZiAoIXR5cGVzLnNlY29uZCgpLmRlZmluaXRlbHlJc051
bWJlcigpKSB7Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoWDg2Ojpl
ZHgsIGksIHNyYzIpOwotICAgICAgICAgICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQ+KG51bWJlclN0cnVjdHVyZSksIEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0
dXJlKSwgWDg2OjplZHgpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoX18gam5lKCksIGkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vICgxYSkgaWYgd2Ug
Z2V0IGhlcmUsIHNyYzIgaXMgYWxzbyBhIG51bWJlciBjZWxsCi0gICAgICAgIF9fIG1vdnNkX21y
KEZJRUxEX09GRlNFVChKU051bWJlckNlbGwsIG1fdmFsdWUpLCBYODY6OmVkeCwgWDg2Ojp4bW0x
KTsKLSAgICAgICAgSm1wU3JjIGxvYWRlZERvdWJsZSA9IF9fIGptcCgpOwotICAgICAgICAvLyAo
MWIpIGlmIHdlIGdldCBoZXJlLCBzcmMyIGlzIGFuIGltbWVkaWF0ZQotICAgICAgICBfXyBsaW5r
KG9wMmltbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgIGVtaXRGYXN0QXJpdGhJbW1Ub0ludChYODY6
OmVkeCk7Ci0gICAgICAgIF9fIGN2dHNpMnNkX3JyKFg4Njo6ZWR4LCBYODY6OnhtbTEpOwotICAg
ICAgICAvLyAoMWMpIAotICAgICAgICBfXyBsaW5rKGxvYWRlZERvdWJsZSwgX18gbGFiZWwoKSk7
Ci0gICAgICAgIF9fIG1vdnNkX21yKEZJRUxEX09GRlNFVChKU051bWJlckNlbGwsIG1fdmFsdWUp
LCBYODY6OmVheCwgWDg2Ojp4bW0wKTsKLSAgICAgICAgaWYgKG9wY29kZUlEID09IG9wX2FkZCkK
LSAgICAgICAgICAgIF9fIGFkZHNkX3JyKFg4Njo6eG1tMSwgWDg2Ojp4bW0wKTsKLSAgICAgICAg
ZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3Bfc3ViKQotICAgICAgICAgICAgX18gc3Vic2RfcnIoWDg2
Ojp4bW0xLCBYODY6OnhtbTApOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChv
cGNvZGVJRCA9PSBvcF9tdWwpOwotICAgICAgICAgICAgX18gbXVsc2RfcnIoWDg2Ojp4bW0xLCBY
ODY6OnhtbTApOwotICAgICAgICB9Ci0gICAgICAgIF9fIG1vdnNkX3JtKFg4Njo6eG1tMCwgRklF
TERfT0ZGU0VUKEpTTnVtYmVyQ2VsbCwgbV92YWx1ZSksIFg4Njo6ZWF4KTsKLSAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCi0gICAgICAgIHB1dERvdWJsZVJlc3VsdFRvSlNO
dW1iZXJDZWxsT3JKU0ltbWVkaWF0ZShYODY6OnhtbTAsIFg4Njo6ZWF4LCBkc3QsICZ3YXNKU051
bWJlckNlbGwxLCBYODY6OnhtbTEsIFg4Njo6ZWN4LCBYODY6OmVkeCk7Ci0gICAgICAgIHdhc0pT
TnVtYmVyQ2VsbDFiID0gX18gam1wKCk7Ci0KLSAgICAgICAgLy8gKDIpIFRoaXMgaGFuZGxlcyBj
YXNlcyB3aGVyZSBzcmMxIGlzIGFuIGltbWVkaWF0ZSBudW1iZXIuCi0gICAgICAgIC8vICAgICBU
d28gc2xvdyBjYXNlcyAtIGVpdGhlciBzcmMyIGlzbid0IGFuIGltbWVkaWF0ZSwgb3IgdGhlIHN1
YnRyYWN0IG92ZXJmbG93cy4KLSAgICAgICAgX18gbGluayhvcDFpbW0sIF9fIGxhYmVsKCkpOwot
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplZHgsIGkpOwotICAgIH0g
ZWxzZQotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW1zKFg4Njo6ZWF4LCBYODY6
OmVkeCwgaSk7Ci0KLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfYWRkKSB7Ci0gICAgICAgIGVtaXRG
YXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZShYODY6OmVheCk7Ci0gICAgICAgIF9fIGFkZGxfcnIoWDg2
OjplZHgsIFg4Njo6ZWF4KTsKLSAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50
cnkoX18gam8oKSwgaSkpOwotICAgIH0gZWxzZSAgaWYgKG9wY29kZUlEID09IG9wX3N1Yikgewot
ICAgICAgICBfXyBzdWJsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0gICAgICAgIG1fc2xvd0Nh
c2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKLSAgICAgICAgZW1pdEZhc3RB
cml0aFJlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICB9IGVsc2UgewotICAgICAgICBBU1NF
UlQob3Bjb2RlSUQgPT0gb3BfbXVsKTsKLSAgICAgICAgLy8gY29udmVydCBlYXggJiBlZHggZnJv
bSBKU0ltbWVkaWF0ZXMgdG8gaW50cywgYW5kIGNoZWNrIGlmIGVpdGhlciBhcmUgemVybwotICAg
ICAgICBlbWl0RmFzdEFyaXRoSW1tVG9JbnQoWDg2OjplZHgpOwotICAgICAgICBKbXBTcmMgb3Ax
WmVybyA9IGVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZUp1bXBJZlplcm8oWDg2OjplYXgpOwot
ICAgICAgICBfXyB0ZXN0bF9ycihYODY6OmVkeCwgWDg2OjplZHgpOwotICAgICAgICBKbXBTcmMg
b3AyTm9uWmVybyA9IF9fIGpuZSgpOwotICAgICAgICBfXyBsaW5rKG9wMVplcm8sIF9fIGxhYmVs
KCkpOwotICAgICAgICAvLyBpZiBlaXRoZXIgaW5wdXQgaXMgemVybywgYWRkIHRoZSB0d28gdG9n
ZXRoZXIsIGFuZCBjaGVjayBpZiB0aGUgcmVzdWx0IGlzIDwgMC4KLSAgICAgICAgLy8gSWYgaXQg
aXMsIHdlIGhhdmUgYSBwcm9ibGVtIChOIDwgMCksIChOICogMCkgPT0gLTAsIG5vdCByZXByZXNl
bnRhdGJsZSBhcyBhIEpTSW1tZWRpYXRlLiAKLSAgICAgICAgX18gbW92bF9ycihYODY6OmVheCwg
WDg2OjplY3gpOwotICAgICAgICBfXyBhZGRsX3JyKFg4Njo6ZWR4LCBYODY6OmVjeCk7Ci0gICAg
ICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpzKCksIGkpKTsKLSAgICAg
ICAgLy8gU2tpcCB0aGUgYWJvdmUgY2hlY2sgaWYgbmVpdGhlciBpbnB1dCBpcyB6ZXJvCi0gICAg
ICAgIF9fIGxpbmsob3AyTm9uWmVybywgX18gbGFiZWwoKSk7Ci0gICAgICAgIF9fIGltdWxsX3Jy
KFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0gICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2Fz
ZUVudHJ5KF9fIGpvKCksIGkpKTsKLSAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRl
KFg4Njo6ZWF4KTsKLSAgICB9Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCi0g
ICAgaWYgKHR5cGVzLnNlY29uZCgpLmlzUmV1c2FibGUoKSAmJiBpc1NTRTJQcmVzZW50KCkpIHsK
LSAgICAgICAgX18gbGluayh3YXNKU051bWJlckNlbGwyLCBfXyBsYWJlbCgpKTsKLSAgICAgICAg
X18gbGluayh3YXNKU051bWJlckNlbGwyYiwgX18gbGFiZWwoKSk7Ci0gICAgfQotICAgIGVsc2Ug
aWYgKHR5cGVzLmZpcnN0KCkuaXNSZXVzYWJsZSgpICYmIGlzU1NFMlByZXNlbnQoKSkgewotICAg
ICAgICBfXyBsaW5rKHdhc0pTTnVtYmVyQ2VsbDEsIF9fIGxhYmVsKCkpOwotICAgICAgICBfXyBs
aW5rKHdhc0pTTnVtYmVyQ2VsbDFiLCBfXyBsYWJlbCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgSklU
Ojpjb21waWxlQmluYXJ5QXJpdGhPcFNsb3dDYXNlKE9wY29kZUlEIG9wY29kZUlELCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBkc3QsIHVuc2lnbmVkIHNy
YzEsIHVuc2lnbmVkIHNyYzIsIE9wZXJhbmRUeXBlcyB0eXBlcywgdW5zaWduZWQgaSkKLXsKLSAg
ICBKbXBEc3QgaGVyZSA9IF9fIGxhYmVsKCk7Ci0gICAgX18gbGluayhpdGVyLT5mcm9tLCBoZXJl
KTsKLSAgICBpZiAodHlwZXMuc2Vjb25kKCkuaXNSZXVzYWJsZSgpICYmIGlzU1NFMlByZXNlbnQo
KSkgewotICAgICAgICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpIHsK
LSAgICAgICAgICAgIGlmIChsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbCgrK2l0ZXIsIHNyYzEpKQot
ICAgICAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwg
aGVyZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF0eXBlcy5zZWNvbmQoKS5kZWZpbml0ZWx5
SXNOdW1iZXIoKSkgewotICAgICAgICAgICAgaWYgKGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKCsr
aXRlciwgc3JjMikpCi0gICAgICAgICAgICAgICAgKytpdGVyOwotICAgICAgICAgICAgX18gbGlu
ayhpdGVyLT5mcm9tLCBoZXJlKTsKLSAgICAgICAgfQotICAgICAgICBfXyBsaW5rKCgrK2l0ZXIp
LT5mcm9tLCBoZXJlKTsKLSAgICB9IGVsc2UgaWYgKHR5cGVzLmZpcnN0KCkuaXNSZXVzYWJsZSgp
ICYmIGlzU1NFMlByZXNlbnQoKSkgewotICAgICAgICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5p
dGVseUlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIGlmIChsaW5rU2xvd0Nhc2VJZk5vdEpTQ2Vs
bCgrK2l0ZXIsIHNyYzEpKQotICAgICAgICAgICAgICAgICsraXRlcjsKLSAgICAgICAgICAgIF9f
IGxpbmsoaXRlci0+ZnJvbSwgaGVyZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF0eXBlcy5z
ZWNvbmQoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkgewotICAgICAgICAgICAgaWYgKGxpbmtTbG93
Q2FzZUlmTm90SlNDZWxsKCsraXRlciwgc3JjMikpCi0gICAgICAgICAgICAgICAgKytpdGVyOwot
ICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBoZXJlKTsKLSAgICAgICAgfQotICAgICAg
ICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBoZXJlKTsKLSAgICB9IGVsc2UKLSAgICAgICAgX18g
bGluaygoKytpdGVyKS0+ZnJvbSwgaGVyZSk7Ci0KLSAgICAvLyBhZGRpdGlvbmFsIGVudHJ5IHBv
aW50IHRvIGhhbmRsZSAtMCBjYXNlcy4KLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbXVsKQotICAg
ICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBoZXJlKTsKLQotICAgIGVtaXRQdXRDVElBcmdG
cm9tVmlydHVhbFJlZ2lzdGVyKHNyYzEsIDAsIFg4Njo6ZWN4KTsKLSAgICBlbWl0UHV0Q1RJQXJn
RnJvbVZpcnR1YWxSZWdpc3RlcihzcmMyLCA0LCBYODY6OmVjeCk7Ci0gICAgaWYgKG9wY29kZUlE
ID09IG9wX2FkZCkKLSAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9h
ZGQpOwotICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX3N1YikKLSAgICAgICAgZW1pdENUSUNh
bGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9zdWIpOwotICAgIGVsc2UgewotICAgICAgICBBU1NF
UlQob3Bjb2RlSUQgPT0gb3BfbXVsKTsKLSAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0
ZXI6OmN0aV9vcF9tdWwpOwotICAgIH0KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CisgICAgX18gb3JsX2k4cihKU0ltbWVkaWF0ZTo6RnVsbFRhZ1R5cGVCb29sLCByZWcpOwogfQog
Ci12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCi17Ci0gICAgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpOwotICAgIHVu
c2lnbmVkIGluc3RydWN0aW9uQ291bnQgPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLnNpemUo
KTsKLQotICAgIHVuc2lnbmVkIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCA9IDA7Ci0g
ICAgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXggPSAwOwotCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGluc3RydWN0aW9uQ291bnQ7ICkgewotICAgICAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKG1faW50ZXJwcmV0ZXItPmlzT3Bjb2RlKGluc3RydWN0aW9uW2ldLnUub3Bjb2RlKSwgInBy
aXZhdGVDb21waWxlTWFpblBhc3MgZ29uZSBiYWQgQCAlZCIsIGkpOwotCi0jaWYgRU5BQkxFKE9Q
Q09ERV9TQU1QTElORykKLSAgICAgICAgaWYgKGkgPiAwKSAvLyBBdm9pZCB0aGUgb3ZlcmhlYWQg
b2Ygc2FtcGxpbmcgb3BfZW50ZXIgdHdpY2UuCi0gICAgICAgICAgICBfXyBtb3ZsX2kzMm0obV9p
bnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUoaW5zdHJ1Y3Rpb24gKyBpKSwgbV9p
bnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpOwotI2VuZGlmCi0KLSAgICAgICAg
bV9sYWJlbHNbaV0gPSBfXyBsYWJlbCgpOwotICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IG1f
aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uW2ldLnUub3Bjb2RlKTsKLSAgICAg
ICAgc3dpdGNoIChvcGNvZGVJRCkgewotICAgICAgICBjYXNlIG9wX21vdjogewotICAgICAgICAg
ICAgdW5zaWduZWQgc3JjID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAg
ICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkKLSAgICAg
ICAgICAgICAgICBfXyBtb3ZsX2kzMnIoYXNJbnRlZ2VyKG1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChzcmMpKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAg
ICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBvcF9hZGQ6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRzdCA9IGluc3RydWN0aW9uW2kgKyAx
XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMxID0gaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYzIgPSBpbnN0cnVjdGlvbltp
ICsgM10udS5vcGVyYW5kOwotCi0gICAgICAgICAgICBpZiAoSlNWYWx1ZSogdmFsdWUgPSBnZXRD
b25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMSkpIHsKLSAgICAgICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgICAg
IF9fIGFkZGxfaTMycihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKHZhbHVlKSwgWDg2Ojpl
YXgpOwotICAgICAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9f
IGpvKCksIGkpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKEpTVmFsdWUqIHZhbHVlID0gZ2V0Q29uc3RhbnRJbW1l
ZGlhdGVOdW1lcmljQXJnKHNyYzIpKSB7Ci0gICAgICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMxLCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgICAgICBfXyBhZGRsX2kz
MnIoZ2V0RGVUYWdnZWRDb25zdGFudEltbWVkaWF0ZSh2YWx1ZSksIFg4Njo6ZWF4KTsKLSAgICAg
ICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbygpLCBpKSk7
Ci0gICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBPcGVyYW5kVHlwZXMgdHlwZXMgPSBPcGVyYW5k
VHlwZXM6OmZyb21JbnQoaW5zdHJ1Y3Rpb25baSArIDRdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHR5cGVzLmZpcnN0KCkubWlnaHRCZU51bWJlcigpICYmIHR5cGVzLnNlY29uZCgp
Lm1pZ2h0QmVOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgY29tcGlsZUJpbmFyeUFyaXRo
T3Aob3BfYWRkLCBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCBpbnN0cnVjdGlvbltpICsg
Ml0udS5vcGVyYW5kLCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBPcGVyYW5kVHlwZXM6
OmZyb21JbnQoaW5zdHJ1Y3Rpb25baSArIDRdLnUub3BlcmFuZCksIGkpOwotICAgICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxS
ZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgICAgICAgICAg
ZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9hZGQpOwotICAgICAgICAgICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaSArPSA1
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9lbmQ6IHsK
LSAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbikKLSAgICAg
ICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2VuZCk7Ci0gICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIF9fIHB1c2hsX20oUmVnaXN0ZXJGaWxlOjpS
ZXR1cm5QQyAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSksIFg4Njo6ZWRpKTsK
LSAgICAgICAgICAgIF9fIHJldCgpOwotICAgICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qbXA6IHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbXAoKSwgaSArIDEgKyB0YXJnZXQpKTsK
LSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2Ugb3BfcHJlX2luYzogewotICAgICAgICAgICAgaW50IHNyY0RzdCA9IGluc3RydWN0
aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyY0RzdCwgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIF9fIGFkZGxfaThyKGdldERlVGFnZ2Vk
Q29uc3RhbnRJbW1lZGlhdGUoSlNJbW1lZGlhdGU6Om9uZUltbWVkaWF0ZSgpKSwgWDg2OjplYXgp
OwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam8oKSwg
aSkpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOwotICAgICAg
ICAgICAgaSArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBvcF9sb29wOiB7Ci0gICAgICAgICAgICBlbWl0U2xvd1NjcmlwdENoZWNrKGkpOwotCi0gICAg
ICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwot
ICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18gam1wKCksIGkgKyAxICsg
dGFyZ2V0KSk7Ci0gICAgICAgICAgICBpICs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIG9wX2xvb3BfaWZfbGVzczogewotICAgICAgICAgICAgZW1pdFNs
b3dTY3JpcHRDaGVjayhpKTsKLQotICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1
Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIEpTVmFsdWUqIHNyYzJpbW0gPSBn
ZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFu
ZCk7Ci0gICAgICAgICAgICBpZiAoc3JjMmltbSkgewotICAgICAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkp
OwotICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVkeCwg
aSk7Ci0gICAgICAgICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihzcmMyaW1tKSwgWDg2
OjplZHgpOwotICAgICAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGps
KCksIGkgKyAzICsgdGFyZ2V0KSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQs
IFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7Ci0g
ICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsK
LSAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplZHgsIGkp
OwotICAgICAgICAgICAgICAgIF9fIGNtcGxfcnIoWDg2OjplZHgsIFg4Njo6ZWF4KTsKLSAgICAg
ICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbCgpLCBpICsgMyArIHRh
cmdldCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9sb29wX2lmX2xlc3NlcTogewotICAg
ICAgICAgICAgZW1pdFNsb3dTY3JpcHRDaGVjayhpKTsKLQotICAgICAgICAgICAgdW5zaWduZWQg
dGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIEpTVmFs
dWUqIHNyYzJpbW0gPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoaW5zdHJ1Y3Rpb25b
aSArIDJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpZiAoc3JjMmltbSkgewotICAgICAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFu
ZCwgWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElt
bU51bShYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdl
cihzcmMyaW1tKSwgWDg2OjplZHgpOwotICAgICAgICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5k
KEptcFRhYmxlKF9fIGpsZSgpLCBpICsgMyArIHRhcmdldCkpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltp
ICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwg
WDg2OjplZHgsIGkpOwotICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51
bShYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1t
TnVtKFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgICAgICBfXyBjbXBsX3JyKFg4Njo6ZWR4LCBY
ODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUoX18g
amxlKCksIGkgKyAzICsgdGFyZ2V0KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpICs9
IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25ld19v
YmplY3Q6IHsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bf
bmV3X29iamVjdCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWQ6IHsKLSAgICAgICAg
ICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcmVwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUs
IGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCi0gICAgICAgICAg
ICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJl
Z2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKLSAgICAgICAgICAg
IC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNh
bWUgZGlzdGFuY2UgZnJvbSB0aGlzLgotCi0gICAgICAgICAgICBpbnQgYmFzZVZSZWcgPSBpbnN0
cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMoYmFzZVZSZWcsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBY
ODY6OmVkeCwgaSk7Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+cHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbnNbcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5ieXRlY29k
ZUluZGV4ID09IGkpOwotCi0gICAgICAgICAgICAvLyBKdW1wIHRvIGEgc2xvdyBjYXNlIGlmIGVp
dGhlciB0aGUgYmFzZSBvYmplY3QgaXMgYW4gaW1tZWRpYXRlLCBvciBpZiB0aGUgU3RydWN0dXJl
IGRvZXMgbm90IG1hdGNoLgotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KFg4Njo6ZWF4LCBpLCBiYXNlVlJlZyk7Ci0KLSAgICAgICAgICAgIEptcERzdCBob3RQYXRoQmVn
aW4gPSBfXyBsYWJlbCgpOwotICAgICAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9u
SW5mb1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhdLmhvdFBhdGhCZWdpbiA9IGhvdFBh
dGhCZWdpbjsKLSAgICAgICAgICAgICsrcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4Owot
Ci0gICAgICAgICAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgZm9sbG93aW5nIGluc3Ry
dWN0aW9uIHBsYW50cyBhIDMyYml0IGltbWVkaWF0ZSwgaW4gb3JkZXIgdGhhdCBpdCBjYW4gYmUg
cGF0Y2hlZCBvdmVyLgotICAgICAgICAgICAgX18gY21wbF9pMzJtKHJlcGF0Y2hHZXRCeUlkRGVm
YXVsdFN0cnVjdHVyZSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVh
eCk7Ci0gICAgICAgICAgICBBU1NFUlQoWDg2QXNzZW1ibGVyOjpnZXREaWZmZXJlbmNlQmV0d2Vl
bkxhYmVscyhob3RQYXRoQmVnaW4sIF9fIGxhYmVsKCkpID09IHJlcGF0Y2hPZmZzZXRQdXRCeUlk
U3RydWN0dXJlKTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5
KF9fIGpuZSgpLCBpKSk7Ci0KLSAgICAgICAgICAgIC8vIFBsYW50IGEgbG9hZCBmcm9tIGEgYm9n
dXMgb2ZzZXQgaW4gdGhlIG9iamVjdCdzIHByb3BlcnR5IG1hcDsgd2Ugd2lsbCBwYXRjaCB0aGlz
IGxhdGVyLCBpZiBpdCBpcyB0byBiZSB1c2VkLgotICAgICAgICAgICAgX18gbW92bF9tcihGSUVM
RF9PRkZTRVQoSlNPYmplY3QsIG1fcHJvcGVydHlTdG9yYWdlKSwgWDg2OjplYXgsIFg4Njo6ZWF4
KTsKLSAgICAgICAgICAgIF9fIG1vdmxfcm0oWDg2OjplZHgsIHJlcGF0Y2hHZXRCeUlkRGVmYXVs
dE9mZnNldCwgWDg2OjplYXgpOwotICAgICAgICAgICAgQVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0
RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoaG90UGF0aEJlZ2luLCBfXyBsYWJlbCgpKSA9PSByZXBh
dGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0KTsKLQotICAgICAgICAgICAgaSArPSA4
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfYnlf
aWQ6IHsKLSAgICAgICAgICAgIC8vIEFzIGZvciBwdXRfYnlfaWQsIGdldF9ieV9pZCByZXF1aXJl
cyB0aGUgb2Zmc2V0IG9mIHRoZSBTdHJ1Y3R1cmUgYW5kIHRoZSBvZmZzZXQgb2YgdGhlIGFjY2Vz
cyB0byBiZSByZXBhdGNoZWQuCi0gICAgICAgICAgICAvLyBBZGRpdGlvbmFsbHksIGZvciBnZXRf
YnlfaWQgd2UgbmVlZCByZXBhdGNoIHRoZSBvZmZzZXQgb2YgdGhlIGJyYW5jaCB0byB0aGUgc2xv
dyBjYXNlICh3ZSByZXBhdGNoIHRoaXMgdG8ganVtcAotICAgICAgICAgICAgLy8gdG8gYXJyYXkt
bGVuZ3RoIC8gcHJvdG90eXBlIGFjY2VzcyB0cmFucG9saW5lcywgYW5kIGZpbmFsbHkgd2UgYWxz
byB0aGUgdGhlIHByb3BlcnR5LW1hcCBhY2Nlc3Mgb2Zmc2V0IGFzIGEgbGFiZWwKLSAgICAgICAg
ICAgIC8vIHRvIGp1bXAgYmFjayB0byBpZiBvbmUgb2YgdGhlc2UgdHJhbXBvbGllcyBmaW5kcyBh
IG1hdGNoLgotCi0gICAgICAgICAgICBpbnQgYmFzZVZSZWcgPSBpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywg
WDg2OjplYXgsIGkpOwotCi0gICAgICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPnByb3BlcnR5
QWNjZXNzSW5zdHJ1Y3Rpb25zW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uYnl0ZWNv
ZGVJbmRleCA9PSBpKTsKLQotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KFg4Njo6ZWF4LCBpLCBiYXNlVlJlZyk7Ci0KLSAgICAgICAgICAgIEptcERzdCBob3RQYXRoQmVn
aW4gPSBfXyBsYWJlbCgpOwotICAgICAgICAgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9u
SW5mb1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhdLmhvdFBhdGhCZWdpbiA9IGhvdFBh
dGhCZWdpbjsKLSAgICAgICAgICAgICsrcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4Owot
Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMm0ocmVwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJl
LCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4KTsKLSAgICAgICAg
ICAgIEFTU0VSVChYODZBc3NlbWJsZXI6OmdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKGhvdFBh
dGhCZWdpbiwgX18gbGFiZWwoKSkgPT0gcmVwYXRjaE9mZnNldEdldEJ5SWRTdHJ1Y3R1cmUpOwot
ICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkp
KTsKLSAgICAgICAgICAgIEFTU0VSVChYODZBc3NlbWJsZXI6OmdldERpZmZlcmVuY2VCZXR3ZWVu
TGFiZWxzKGhvdFBhdGhCZWdpbiwgX18gbGFiZWwoKSkgPT0gcmVwYXRjaE9mZnNldEdldEJ5SWRC
cmFuY2hUb1Nsb3dDYXNlKTsKLQotICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQo
SlNPYmplY3QsIG1fcHJvcGVydHlTdG9yYWdlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAg
ICAgICAgIF9fIG1vdmxfbXIocmVwYXRjaEdldEJ5SWREZWZhdWx0T2Zmc2V0LCBYODY6OmVheCwg
WDg2OjplYXgpOwotICAgICAgICAgICAgQVNTRVJUKFg4NkFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5j
ZUJldHdlZW5MYWJlbHMoaG90UGF0aEJlZ2luLCBfXyBsYWJlbCgpKSA9PSByZXBhdGNoT2Zmc2V0
R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0KLSAgICAgICAgICAgIGkgKz0g
ODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfaW5zdGFu
Y2VvZjogewotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltp
ICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7IC8vIHZhbHVlCi0gICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWN4
LCBpKTsgLy8gYmFzZVZhbAotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0
cnVjdGlvbltpICsgNF0udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7IC8vIHByb3RvCi0KLSAgICAg
ICAgICAgIC8vIGNoZWNrIGlmIGFueSBhcmUgaW1tZWRpYXRlcwotICAgICAgICAgICAgX18gb3Js
X3JyKFg4Njo6ZWF4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBvcmxfcnIoWDg2OjplZHgs
IFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01h
c2ssIFg4Njo6ZWN4KTsKLQotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNl
RW50cnkoX18gam56KCksIGkpKTsKLQotICAgICAgICAgICAgLy8gY2hlY2sgdGhhdCBhbGwgYXJl
IG9iamVjdCB0eXBlIC0gdGhpcyBpcyBhIGJpdCBvZiBhIGJpdGhhY2sgdG8gYXZvaWQgZXhjZXNz
IGJyYW5jaGluZzsKLSAgICAgICAgICAgIC8vIHdlIGNoZWNrIHRoYXQgdGhlIHN1bSBvZiB0aGUg
dGhyZWUgdHlwZSBjb2RlcyBmcm9tIFN0cnVjdHVyZXMgaXMgZXhhY3RseSAzICogT2JqZWN0VHlw
ZSwKLSAgICAgICAgICAgIC8vIHRoaXMgd29ya3MgYmVjYXVzZSBOdW1iZXJUeXBlIGFuZCBTdHJp
bmdUeXBlIGFyZSBzbWFsbGVyCi0gICAgICAgICAgICBfXyBtb3ZsX2kzMnIoMyAqIE9iamVjdFR5
cGUsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2Vs
bCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgX18gbW92
bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWR4LCBYODY6OmVk
eCk7Ci0gICAgICAgICAgICBfXyBzdWJsX21yKEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlw
ZUluZm8ubV90eXBlKSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIHN1Ymxf
bXIoRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX3R5cGUpLCBYODY6OmVkeCwg
WDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgM10udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7IC8vIHJlbG9hZCBiYXNlVmFsCi0gICAg
ICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2
OjplZHgsIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIF9fIGNtcGxfcm0oWDg2OjplY3gsIEZJRUxE
X09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV90eXBlKSwgWDg2OjplZHgpOwotCi0gICAg
ICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwot
Ci0gICAgICAgICAgICAvLyBjaGVjayB0aGF0IGJhc2VWYWwncyBmbGFncyBpbmNsdWRlIEltcGxl
bWVudHNIYXNJbnN0YW5jZSBidXQgbm90IE92ZXJyaWRlc0hhc0luc3RhbmNlCi0gICAgICAgICAg
ICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV9mbGFncyks
IFg4Njo6ZWR4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBhbmRsX2kzMnIoSW1wbGVtZW50
c0hhc0luc3RhbmNlIHwgT3ZlcnJpZGVzSGFzSW5zdGFuY2UsIFg4Njo6ZWN4KTsKLSAgICAgICAg
ICAgIF9fIGNtcGxfaTMycihJbXBsZW1lbnRzSGFzSW5zdGFuY2UsIFg4Njo6ZWN4KTsKLQotICAg
ICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsK
LQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kLCBYODY6OmVjeCwgaSk7IC8vIHJlbG9hZCB2YWx1ZQotICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgNF0udS5vcGVyYW5kLCBYODY6OmVk
eCwgaSk7IC8vIHJlbG9hZCBwcm90bwotCi0gICAgICAgICAgICAvLyBvcHRpbWlzdGljYWxseSBs
b2FkIHRydWUgcmVzdWx0Ci0gICAgICAgICAgICBfXyBtb3ZsX2kzMnIoYXNJbnRlZ2VyKGpzQm9v
bGVhbih0cnVlKSksIFg4Njo6ZWF4KTsKLQotICAgICAgICAgICAgSm1wRHN0IGxvb3AgPSBfXyBs
YWJlbCgpOwotCi0gICAgICAgICAgICAvLyBsb2FkIHZhbHVlJ3MgcHJvdG90eXBlCi0gICAgICAg
ICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwgWDg2Ojpl
Y3gsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKFN0cnVj
dHVyZSwgbV9wcm90b3R5cGUpLCBYODY6OmVjeCwgWDg2OjplY3gpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBfXyBjbXBsX3JyKFg4Njo6ZWN4LCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBK
bXBTcmMgZXhpdCA9IF9fIGplKCk7Ci0KLSAgICAgICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVn
ZXIoanNOdWxsKCkpLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBKbXBTcmMgZ29Ub0xvb3AgPSBf
XyBqbmUoKTsKLSAgICAgICAgICAgIF9fIGxpbmsoZ29Ub0xvb3AsIGxvb3ApOwotCi0gICAgICAg
ICAgICBfXyBtb3ZsX2kzMnIoYXNJbnRlZ2VyKGpzQm9vbGVhbihmYWxzZSkpLCBYODY6OmVheCk7
Ci0KLSAgICAgICAgICAgIF9fIGxpbmsoZXhpdCwgX18gbGFiZWwoKSk7Ci0KLSAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0K
LSAgICAgICAgICAgIGkgKz0gNTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2Ugb3BfZGVsX2J5X2lkOiB7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7
Ci0gICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXJzW2luc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmRdKTsKLSAgICAgICAgICAgIGVtaXRQdXRD
VElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDQpOwotICAg
ICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9kZWxfYnlfaWQpOwot
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5v
cGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfbXVsOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkc3QgPSBp
bnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgdW5zaWduZWQgc3JjMSA9
IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMy
ID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZDsKLQotICAgICAgICAgICAgLy8gRm9yIG5v
dywgb25seSBwbGFudCBhIGZhc3QgaW50IGNhc2UgaWYgdGhlIGNvbnN0YW50IG9wZXJhbmQgaXMg
Z3JlYXRlciB0aGFuIHplcm8uCi0gICAgICAgICAgICBKU1ZhbHVlKiBzcmMxVmFsdWUgPSBnZXRD
b25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMSk7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBz
cmMyVmFsdWUgPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMik7Ci0gICAgICAg
ICAgICBpbnQzMl90IHZhbHVlOwotICAgICAgICAgICAgaWYgKHNyYzFWYWx1ZSAmJiAoKHZhbHVl
ID0gSlNJbW1lZGlhdGU6OmludFZhbHVlKHNyYzFWYWx1ZSkpID4gMCkpIHsKLSAgICAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzIsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOwotICAgICAg
ICAgICAgICAgIGVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZShYODY6OmVheCk7Ci0gICAgICAg
ICAgICAgICAgX18gaW11bGxfaTMycihYODY6OmVheCwgdmFsdWUsIFg4Njo6ZWF4KTsKLSAgICAg
ICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbygpLCBpKSk7
Ci0gICAgICAgICAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsK
LSAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKHNyYzJWYWx1ZSAmJiAoKHZhbHVlID0gSlNJbW1lZGlhdGU6OmludFZhbHVl
KHNyYzJWYWx1ZSkpID4gMCkpIHsKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyYzEsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhE
ZVRhZ0ltbWVkaWF0ZShYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgX18gaW11bGxfaTMycihY
ODY6OmVheCwgdmFsdWUsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBtX3Nsb3dDYXNlcy5h
cHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbygpLCBpKSk7Ci0gICAgICAgICAgICAgICAgZW1pdEZh
c3RBcml0aFJlVGFnSW1tZWRpYXRlKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICBjb21waWxlQmluYXJ5QXJpdGhPcChvcF9tdWwsIGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJh
bmQsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9w
ZXJhbmQsIE9wZXJhbmRUeXBlczo6ZnJvbUludChpbnN0cnVjdGlvbltpICsgNF0udS5vcGVyYW5k
KSwgaSk7Ci0KLSAgICAgICAgICAgIGkgKz0gNTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmM6IHsKLSAgICAgICAgICAgIEZ1bmNEZWNsTm9k
ZSogZnVuYyA9IChtX2NvZGVCbG9jay0+ZnVuY3Rpb25zW2luc3RydWN0aW9uW2kgKyAyXS51Lm9w
ZXJhbmRdKS5nZXQoKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkPihmdW5jKSwgMCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChp
LCBJbnRlcnByZXRlcjo6Y3RpX29wX25ld19mdW5jKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBp
ICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2Nh
bGw6Ci0gICAgICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgotICAgICAgICBjYXNlIG9wX2NvbnN0cnVj
dDogewotICAgICAgICAgICAgY29tcGlsZU9wQ2FsbChvcGNvZGVJRCwgaW5zdHJ1Y3Rpb24gKyBp
LCBpLCBjYWxsTGlua0luZm9JbmRleCsrKTsKLSAgICAgICAgICAgIGkgKz0gKG9wY29kZUlEID09
IG9wX2NvbnN0cnVjdCA/IDcgOiA1KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfZ2V0X2dsb2JhbF92YXI6IHsKLSAgICAgICAgICAgIEpTVmFyaWFibGVP
YmplY3QqIGdsb2JhbE9iamVjdCA9IHN0YXRpY19jYXN0PEpTVmFyaWFibGVPYmplY3QqPihpbnN0
cnVjdGlvbltpICsgMl0udS5qc0NlbGwpOwotICAgICAgICAgICAgX18gbW92bF9pMzJyKGFzSW50
ZWdlcihnbG9iYWxPYmplY3QpLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0R2V0VmFyaWFi
bGVPYmplY3RSZWdpc3RlcihYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwg
WDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHV0X2dsb2JhbF92YXI6IHsKLSAgICAg
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFu
ZCwgWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgSlNWYXJpYWJsZU9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KGluc3RydWN0aW9uW2kgKyAxXS51
LmpzQ2VsbCk7Ci0gICAgICAgICAgICBfXyBtb3ZsX2kzMnIoYXNJbnRlZ2VyKGdsb2JhbE9iamVj
dCksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWYXJpYWJsZU9iamVjdFJlZ2lzdGVy
KFg4Njo6ZWR4LCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX2dldF9zY29wZWRfdmFyOiB7Ci0gICAgICAgICAgICBpbnQgc2tpcCA9IGluc3RydWN0
aW9uW2kgKyAzXS51Lm9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbjsK
LQotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihSZWdpc3RlckZpbGU6OlNjb3Bl
Q2hhaW4sIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIHdoaWxlIChza2lwLS0pCi0gICAgICAg
ICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoU2NvcGVDaGFpbk5vZGUsIG5leHQpLCBY
ODY6OmVheCwgWDg2OjplYXgpOwotCi0gICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNF
VChTY29wZUNoYWluTm9kZSwgb2JqZWN0KSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAg
ICAgIGVtaXRHZXRWYXJpYWJsZU9iamVjdFJlZ2lzdGVyKFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltp
ICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXRfc2Nv
cGVkX3ZhcjogewotICAgICAgICAgICAgaW50IHNraXAgPSBpbnN0cnVjdGlvbltpICsgMl0udS5v
cGVyYW5kICsgbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW47Ci0KLSAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluLCBYODY6OmVk
eCwgaSk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIHdoaWxlIChza2lwLS0p
Ci0gICAgICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoU2NvcGVDaGFpbk5vZGUs
IG5leHQpLCBYODY6OmVkeCwgWDg2OjplZHgpOwotCi0gICAgICAgICAgICBfXyBtb3ZsX21yKEZJ
RUxEX09GRlNFVChTY29wZUNoYWluTm9kZSwgb2JqZWN0KSwgWDg2OjplZHgsIFg4Njo6ZWR4KTsK
LSAgICAgICAgICAgIGVtaXRQdXRWYXJpYWJsZU9iamVjdFJlZ2lzdGVyKFg4Njo6ZWF4LCBYODY6
OmVkeCwgaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3RlYXJfb2Zm
X2FjdGl2YXRpb246IHsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAg
ICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfdGVhcl9vZmZfYWN0aXZhdGlv
bik7Ci0gICAgICAgICAgICBpICs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX3RlYXJfb2ZmX2FyZ3VtZW50czogewotICAgICAgICAgICAgZW1pdENU
SUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF90ZWFyX29mZl9hcmd1bWVudHMpOwotICAgICAg
ICAgICAgaSArPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBvcF9yZXQ6IHsKLSAgICAgICAgICAgIC8vIFdlIGNvdWxkIEpJVCBnZW5lcmF0ZSB0aGUgZGVy
ZWYsIG9ubHkgY2FsbGluZyBvdXQgdG8gQyB3aGVuIHRoZSByZWZjb3VudCBoaXRzIHplcm8uCi0g
ICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4pCi0gICAgICAg
ICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXRfc2NvcGVDaGFp
bik7Ci0KLSAgICAgICAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXguCi0gICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQs
IFg4Njo6ZWF4LCBpKTsKLQotICAgICAgICAgICAgLy8gR3JhYiB0aGUgcmV0dXJuIGFkZHJlc3Mu
Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFJlZ2lzdGVyRmlsZTo6UmV0dXJu
UEMsIFg4Njo6ZWR4LCBpKTsKLQotICAgICAgICAgICAgLy8gUmVzdG9yZSBvdXIgY2FsbGVyJ3Mg
InIiLgotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihSZWdpc3RlckZpbGU6OkNh
bGxlckZyYW1lLCBYODY6OmVkaSwgaSk7Ci0KLSAgICAgICAgICAgIC8vIFJldHVybi4KLSAgICAg
ICAgICAgIF9fIHB1c2hsX3IoWDg2OjplZHgpOwotICAgICAgICAgICAgX18gcmV0KCk7Ci0KLSAg
ICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3BfbmV3X2FycmF5OiB7Ci0gICAgICAgICAgICBfXyBsZWFsX21yKHNpemVvZihSZWdp
c3RlcikgKiBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVkaSwgWDg2OjplZHgp
OwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgMCk7Ci0gICAgICAgICAgICBl
bWl0UHV0Q1RJQXJnQ29uc3RhbnQoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgNCk7Ci0g
ICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX25ld19hcnJheSk7
Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51
Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9yZXNvbHZlOiB7Ci0gICAgICAgICAgICBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAyXS51
Lm9wZXJhbmRdKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDApOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwg
SW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9
IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2NvbnN0
cnVjdF92ZXJpZnk6IHsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOwotCi0gICAgICAgICAgICBfXyB0
ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBK
bXBTcmMgaXNJbW1lZGlhdGUgPSBfXyBqbmUoKTsKLSAgICAgICAgICAgIF9fIG1vdmxfbXIoRklF
TERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwgWDg2OjplY3gpOwotICAg
ICAgICAgICAgX18gY21wbF9pMzJtKE9iamVjdFR5cGUsIEZJRUxEX09GRlNFVChTdHJ1Y3R1cmUs
IG1fdHlwZUluZm8pICsgRklFTERfT0ZGU0VUKFR5cGVJbmZvLCBtX3R5cGUpLCBYODY6OmVjeCk7
Ci0gICAgICAgICAgICBKbXBTcmMgaXNPYmplY3QgPSBfXyBqZSgpOwotCi0gICAgICAgICAgICBf
XyBsaW5rKGlzSW1tZWRpYXRlLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOwot
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5v
cGVyYW5kKTsKLSAgICAgICAgICAgIF9fIGxpbmsoaXNPYmplY3QsIF9fIGxhYmVsKCkpOwotCi0g
ICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX2dldF9ieV92YWw6IHsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltp
ICsgM10udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbW1OdW0oWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgZW1pdEZhc3RBcml0aElt
bVRvSW50KFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6
OlRhZ01hc2ssIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93
Q2FzZUVudHJ5KF9fIGpuZSgpLCBpKSk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMm0ocmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZD4obV9pbnRlcnByZXRlci0+bV9qc0FycmF5VnB0ciksIFg4Njo6
ZWF4KTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpu
ZSgpLCBpKSk7Ci0KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gYXJyYXk7IGdldCB0aGUgbV9z
dG9yYWdlIHBvaW50ZXIgaW50byBlY3gsIHRoZW4gY2hlY2sgaWYgdGhlIGluZGV4IGlzIGJlbG93
IHRoZSBmYXN0IGN1dG9mZgotICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNB
cnJheSwgbV9zdG9yYWdlKSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIGNt
cGxfcm0oWDg2OjplZHgsIEZJRUxEX09GRlNFVChKU0FycmF5LCBtX2Zhc3RBY2Nlc3NDdXRvZmYp
LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRy
eShfXyBqYmUoKSwgaSkpOwotCi0gICAgICAgICAgICAvLyBHZXQgdGhlIHZhbHVlIGZyb20gdGhl
IHZlY3RvcgotICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoQXJyYXlTdG9yYWdl
LCBtX3ZlY3RvclswXSksIFg4Njo6ZWN4LCBYODY6OmVkeCwgc2l6ZW9mKEpTVmFsdWUqKSwgWDg2
OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltp
ICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9mdW5jOiB7Ci0gICAgICAgICAg
ICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0
aW9uW2kgKyAzXS51Lm9wZXJhbmRdKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFu
dChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDApOwotICAgICAgICAgICAgZW1p
dENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlX2Z1bmMpOwotICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBY
ODY6OmVkeCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9zdWI6IHsKLSAgICAgICAgICAgIGNvbXBp
bGVCaW5hcnlBcml0aE9wKG9wX3N1YiwgaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwg
T3BlcmFuZFR5cGVzOjpmcm9tSW50KGluc3RydWN0aW9uW2kgKyA0XS51Lm9wZXJhbmQpLCBpKTsK
LSAgICAgICAgICAgIGkgKz0gNTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDogewotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplYXgsIGluc3RydWN0aW9u
W2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEltbU51bShYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICBlbWl0RmFzdEFyaXRo
SW1tVG9JbnQoWDg2OjplZHgpOwotICAgICAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0
ZTo6VGFnTWFzaywgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNs
b3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMybShyZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2ludGVycHJldGVyLT5tX2pzQXJyYXlWcHRyKSwgWDg2
OjplYXgpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18g
am5lKCksIGkpKTsKLQotICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBhcnJheTsgZ2V0IHRoZSBt
X3N0b3JhZ2UgcG9pbnRlciBpbnRvIGVjeCwgdGhlbiBjaGVjayBpZiB0aGUgaW5kZXggaXMgYmVs
b3cgdGhlIGZhc3QgY3V0b2ZmCi0gICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChK
U0FycmF5LCBtX3N0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18g
Y21wbF9ybShYODY6OmVkeCwgRklFTERfT0ZGU0VUKEpTQXJyYXksIG1fZmFzdEFjY2Vzc0N1dG9m
ZiksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEptcFNyYyBpbkZhc3RWZWN0b3IgPSBfXyBqYSgp
OwotICAgICAgICAgICAgLy8gTm87IG9oIHdlbGwsIGNoZWNrIGlmIHRoZSBhY2Nlc3MgaWYgd2l0
aGluIHRoZSB2ZWN0b3IgLSBpZiBzbywgd2UgbWF5IHN0aWxsIGJlIG9rYXkuCi0gICAgICAgICAg
ICBfXyBjbXBsX3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rv
ckxlbmd0aCksIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93
Q2FzZUVudHJ5KF9fIGpiZSgpLCBpKSk7Ci0KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB3cml0
ZSB0byB0aGUgc2xvdyBwYXJ0IG9mIHRoZSB2ZWN0b3I7IGZpcnN0LCB3ZSBoYXZlIHRvIGNoZWNr
IGlmIHRoaXMgd291bGQgYmUgdGhlIGZpcnN0IHdyaXRlIHRvIHRoaXMgbG9jYXRpb24uCi0gICAg
ICAgICAgICAvLyBGSVhNRTogc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGluaXRpYWwgd3JpdGUg
dG8gYXJyYXk7IGluY3JlbWVudCB0aGUgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgYXJyYXks
IGFuZCBwb3RlbnRpYWxseSB1cGRhdGUgZmFzdCBhY2Nlc3MgY3V0b2ZmLiAKLSAgICAgICAgICAg
IF9fIGNtcGxfaThtKDAsIEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSwg
WDg2OjplY3gsIFg4Njo6ZWR4LCBzaXplb2YoSlNWYWx1ZSopKTsKLSAgICAgICAgICAgIG1fc2xv
d0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGplKCksIGkpKTsKLQotICAgICAgICAgICAg
Ly8gQWxsIGdvb2QgLSBwdXQgdGhlIHZhbHVlIGludG8gdGhlIGFycmF5LgotICAgICAgICAgICAg
X18gbGluayhpbkZhc3RWZWN0b3IsIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVheCwgaSk7
Ci0gICAgICAgICAgICBfXyBtb3ZsX3JtKFg4Njo6ZWF4LCBGSUVMRF9PRkZTRVQoQXJyYXlTdG9y
YWdlLCBtX3ZlY3RvclswXSksIFg4Njo6ZWN4LCBYODY6OmVkeCwgc2l6ZW9mKEpTVmFsdWUqKSk7
Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBDVElfQ09NUElMRV9CSU5BUllfT1Aob3BfbGVzc2VxKQotICAgICAgICBjYXNlIG9wX2xv
b3BfaWZfdHJ1ZTogewotICAgICAgICAgICAgZW1pdFNsb3dTY3JpcHRDaGVjayhpKTsKLQotICAg
ICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsK
LSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCwgWDg2OjplYXgsIGkpOwotCi0gICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRl
Z2VyKEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkpLCBYODY6OmVheCk7Ci0gICAgICAgICAg
ICBKbXBTcmMgaXNaZXJvID0gX18gamUoKTsKLSAgICAgICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJ
bW1lZGlhdGU6OlRhZ0JpdFR5cGVJbnRlZ2VyLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBtX2pt
cFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbmUoKSwgaSArIDIgKyB0YXJnZXQpKTsKLQotICAg
ICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6dHJ1ZUltbWVkaWF0
ZSgpKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFibGUo
X18gamUoKSwgaSArIDIgKyB0YXJnZXQpKTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMycihhc0lu
dGVnZXIoSlNJbW1lZGlhdGU6OmZhbHNlSW1tZWRpYXRlKCkpLCBYODY6OmVheCk7Ci0gICAgICAg
ICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwotCi0g
ICAgICAgICAgICBfXyBsaW5rKGlzWmVybywgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBpICs9
IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfTsKLSAgICAgICAgY2FzZSBvcF9yZXNv
bHZlX2Jhc2U6IHsKLSAgICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZF0pOwotICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50
KSwgMCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3Jl
c29sdmVfYmFzZSk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9uZWdhdGU6IHsKLSAgICAgICAgICAg
IGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAyXS51Lm9w
ZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJl
dGVyOjpjdGlfb3BfbmVnYXRlKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
aW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Jlc29sdmVfc2tpcDog
ewotICAgICAgICAgICAgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXSk7Ci0gICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaWRlbnQpLCAwKTsKLSAg
ICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChpbnN0cnVjdGlvbltpICsgM10udS5vcGVy
YW5kICsgbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4sIDQpOwotICAgICAgICAgICAg
ZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZlX3NraXApOwotICAgICAg
ICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9nbG9iYWw6IHsKLSAgICAgICAgICAgIC8vIEZhc3QgY2Fz
ZQotICAgICAgICAgICAgdW5zaWduZWQgZ2xvYmFsT2JqZWN0ID0gYXNJbnRlZ2VyKGluc3RydWN0
aW9uW2kgKyAyXS51LmpzQ2VsbCk7Ci0gICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmRdKTsK
LSAgICAgICAgICAgIHZvaWQqIHN0cnVjdHVyZUFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHZv
aWQqPihpbnN0cnVjdGlvbiArIGkgKyA0KTsKLSAgICAgICAgICAgIHZvaWQqIG9mZnNldEFkZHIg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihpbnN0cnVjdGlvbiArIGkgKyA1KTsKLQotICAgICAg
ICAgICAgLy8gQ2hlY2sgU3RydWN0dXJlIG9mIGdsb2JhbCBvYmplY3QKLSAgICAgICAgICAgIF9f
IG1vdmxfaTMycihnbG9iYWxPYmplY3QsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIF9fIG1vdmxf
bXIoc3RydWN0dXJlQWRkcmVzcywgWDg2OjplZHgpOwotICAgICAgICAgICAgX18gY21wbF9ybShY
ODY6OmVkeCwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCk7Ci0g
ICAgICAgICAgICBKbXBTcmMgbm9NYXRjaCA9IF9fIGpuZSgpOyAvLyBTdHJ1Y3R1cmVzIGRvbid0
IG1hdGNoCi0KLSAgICAgICAgICAgIC8vIExvYWQgY2FjaGVkIHByb3BlcnR5Ci0gICAgICAgICAg
ICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0dsb2JhbE9iamVjdCwgbV9wcm9wZXJ0eVN0b3Jh
Z2UpLCBYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgX18gbW92bF9tcihvZmZzZXRB
ZGRyLCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBfXyBtb3ZsX21yKDAsIFg4Njo6ZWF4LCBYODY6
OmVkeCwgc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAg
IEptcFNyYyBlbmQgPSBfXyBqbXAoKTsKLQotICAgICAgICAgICAgLy8gU2xvdyBjYXNlCi0gICAg
ICAgICAgICBfXyBsaW5rKG5vTWF0Y2gsIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdFB1
dENUSUFyZ0NvbnN0YW50KGdsb2JhbE9iamVjdCwgMCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJ
QXJnQ29uc3RhbnQocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4oaWRlbnQpLCA0KTsKLSAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihp
bnN0cnVjdGlvbiArIGkpLCA4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJl
dGVyOjpjdGlfb3BfcmVzb2x2ZV9nbG9iYWwpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIF9fIGxp
bmsoZW5kLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGkgKz0gNjsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIENUSV9DT01QSUxFX0JJTkFSWV9PUChvcF9kaXYpCi0g
ICAgICAgIGNhc2Ugb3BfcHJlX2RlYzogewotICAgICAgICAgICAgaW50IHNyY0RzdCA9IGluc3Ry
dWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNyY0RzdCwgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIF9fIHN1YmxfaThyKGdldERlVGFn
Z2VkQ29uc3RhbnRJbW1lZGlhdGUoSlNJbW1lZGlhdGU6Om9uZUltbWVkaWF0ZSgpKSwgWDg2Ojpl
YXgpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam8o
KSwgaSkpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOwotICAg
ICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9qbmxlc3M6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0
aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBzcmMyaW1tID0gZ2V0
Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQp
OwotICAgICAgICAgICAgaWYgKHNyYzJpbW0pIHsKLSAgICAgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsK
LSAgICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplZHgsIGkp
OwotICAgICAgICAgICAgICAgIF9fIGNtcGxfaTMycihhc0ludGVnZXIoc3JjMmltbSksIFg4Njo6
ZWR4KTsKLSAgICAgICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqZ2Uo
KSwgaSArIDMgKyB0YXJnZXQpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwg
WDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKLSAg
ICAgICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOwot
ICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVkeCwgaSk7
Ci0gICAgICAgICAgICAgICAgX18gY21wbF9ycihYODY6OmVkeCwgWDg2OjplYXgpOwotICAgICAg
ICAgICAgICAgIG1fam1wVGFibGUuYXBwZW5kKEptcFRhYmxlKF9fIGpnZSgpLCBpICsgMyArIHRh
cmdldCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9ub3Q6IHsKLSAgICAgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2Ojpl
YXgsIGkpOwotICAgICAgICAgICAgX18geG9ybF9pOHIoSlNJbW1lZGlhdGU6OkZ1bGxUYWdUeXBl
Qm9vbCwgWDg2OjplYXgpOwotICAgICAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6
RnVsbFRhZ1R5cGVNYXNrLCBYODY6OmVheCk7IC8vIGk4PwotICAgICAgICAgICAgbV9zbG93Q2Fz
ZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoX18gam5lKCksIGkpKTsKLSAgICAgICAgICAgIF9fIHhv
cmxfaThyKChKU0ltbWVkaWF0ZTo6RnVsbFRhZ1R5cGVCb29sIHwgSlNJbW1lZGlhdGU6OkV4dGVu
ZGVkUGF5bG9hZEJpdEJvb2xWYWx1ZSksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAg
ICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X2pmYWxzZTogewotICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOwotCi0gICAgICAgICAgICBfXyBj
bXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkpLCBYODY6OmVh
eCk7Ci0gICAgICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqZSgpLCBpICsg
MiArIHRhcmdldCkpOwotICAgICAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFn
Qml0VHlwZUludGVnZXIsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEptcFNyYyBpc05vblplcm8g
PSBfXyBqbmUoKTsKLQotICAgICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihKU0ltbWVk
aWF0ZTo6ZmFsc2VJbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIG1fam1wVGFi
bGUuYXBwZW5kKEptcFRhYmxlKF9fIGplKCksIGkgKyAyICsgdGFyZ2V0KSk7Ci0gICAgICAgICAg
ICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKEpTSW1tZWRpYXRlOjp0cnVlSW1tZWRpYXRlKCkpLCBY
ODY6OmVheCk7Ci0gICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShf
XyBqbmUoKSwgaSkpOwotCi0gICAgICAgICAgICBfXyBsaW5rKGlzTm9uWmVybywgX18gbGFiZWwo
KSk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfTsK
LSAgICAgICAgY2FzZSBvcF9qZXFfbnVsbDogewotICAgICAgICAgICAgdW5zaWduZWQgc3JjID0g
aW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBfXyB0ZXN0bF9p
MzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBKbXBTcmMg
aXNJbW1lZGlhdGUgPSBfXyBqbnooKTsKLQotICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9P
RkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7Ci0gICAgICAg
ICAgICBfXyB0ZXN0bF9pMzJtKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIEZJRUxEX09GRlNFVChT
dHJ1Y3R1cmUsIG1fdHlwZUluZm8ubV9mbGFncyksIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9f
IHNldG56X3IoWDg2OjplYXgpOwotCi0gICAgICAgICAgICBKbXBTcmMgd2FzTm90SW1tZWRpYXRl
ID0gX18gam1wKCk7Ci0KLSAgICAgICAgICAgIF9fIGxpbmsoaXNJbW1lZGlhdGUsIF9fIGxhYmVs
KCkpOwotCi0gICAgICAgICAgICBfXyBtb3ZsX2kzMnIofkpTSW1tZWRpYXRlOjpFeHRlbmRlZFRh
Z0JpdFVuZGVmaW5lZCwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gYW5kbF9ycihYODY6OmVh
eCwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gY21wbF9pMzJyKEpTSW1tZWRpYXRlOjpGdWxs
VGFnVHlwZU51bGwsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIHNldGVfcihYODY6OmVheCk7
Ci0KLSAgICAgICAgICAgIF9fIGxpbmsod2FzTm90SW1tZWRpYXRlLCBfXyBsYWJlbCgpKTsKLQot
ICAgICAgICAgICAgX18gbW92emJsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAg
ICBfXyBjbXBsX2kzMnIoMCwgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBl
bmQoSm1wVGFibGUoX18gam56KCksIGkgKyAyICsgdGFyZ2V0KSk7ICAgICAgICAgICAgCi0KLSAg
ICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9OwotICAgICAg
ICBjYXNlIG9wX2puZXFfbnVsbDogewotICAgICAgICAgICAgdW5zaWduZWQgc3JjID0gaW5zdHJ1
Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGlu
c3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0KLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc3JjLCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpT
SW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBKbXBTcmMgaXNJbW1l
ZGlhdGUgPSBfXyBqbnooKTsKLQotICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQo
SlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBf
XyB0ZXN0bF9pMzJtKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIEZJRUxEX09GRlNFVChTdHJ1Y3R1
cmUsIG1fdHlwZUluZm8ubV9mbGFncyksIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIHNldHpf
cihYODY6OmVheCk7Ci0KLSAgICAgICAgICAgIEptcFNyYyB3YXNOb3RJbW1lZGlhdGUgPSBfXyBq
bXAoKTsKLQotICAgICAgICAgICAgX18gbGluayhpc0ltbWVkaWF0ZSwgX18gbGFiZWwoKSk7Ci0K
LSAgICAgICAgICAgIF9fIG1vdmxfaTMycih+SlNJbW1lZGlhdGU6OkV4dGVuZGVkVGFnQml0VW5k
ZWZpbmVkLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBhbmRsX3JyKFg4Njo6ZWF4LCBYODY6
OmVjeCk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMnIoSlNJbW1lZGlhdGU6OkZ1bGxUYWdUeXBl
TnVsbCwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gc2V0bmVfcihYODY6OmVheCk7Ci0KLSAg
ICAgICAgICAgIF9fIGxpbmsod2FzTm90SW1tZWRpYXRlLCBfXyBsYWJlbCgpKTsKLQotICAgICAg
ICAgICAgX18gbW92emJsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBfXyBj
bXBsX2kzMnIoMCwgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1w
VGFibGUoX18gam56KCksIGkgKyAyICsgdGFyZ2V0KSk7ICAgICAgICAgICAgCi0KLSAgICAgICAg
ICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
b3BfcG9zdF9pbmM6IHsKLSAgICAgICAgICAgIGludCBzcmNEc3QgPSBpbnN0cnVjdGlvbltpICsg
Ml0udS5vcGVyYW5kOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3Qs
IFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIF9fIG1vdmxfcnIoWDg2OjplYXgsIFg4Njo6ZWR4
KTsKLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7
Ci0gICAgICAgICAgICBfXyBhZGRsX2k4cihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKEpT
SW1tZWRpYXRlOjpvbmVJbW1lZGlhdGUoKSksIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIG1fc2xv
d0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpvKCksIGkpKTsKLSAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCBYODY6OmVkeCk7Ci0gICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAg
ICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBvcF91bmV4cGVjdGVkX2xvYWQ6IHsKLSAgICAgICAgICAgIEpTVmFsdWUqIHYgPSBtX2NvZGVC
bG9jay0+dW5leHBlY3RlZENvbnN0YW50c1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXTsK
LSAgICAgICAgICAgIF9fIG1vdmxfaTMycihhc0ludGVnZXIodiksIFg4Njo6ZWF4KTsKLSAgICAg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFu
ZCk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX2pzcjogewotICAgICAgICAgICAgaW50IHJldEFkZHJEc3QgPSBpbnN0
cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHRhcmdldCA9IGluc3Ry
dWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBfXyBtb3ZsX2kzMm0oMCwgc2l6
ZW9mKFJlZ2lzdGVyKSAqIHJldEFkZHJEc3QsIFg4Njo6ZWRpKTsKLSAgICAgICAgICAgIEptcERz
dCBhZGRyUG9zaXRpb24gPSBfXyBsYWJlbCgpOwotICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBl
bmQoSm1wVGFibGUoX18gam1wKCksIGkgKyAyICsgdGFyZ2V0KSk7Ci0gICAgICAgICAgICBKbXBE
c3Qgc3JldFRhcmdldCA9IF9fIGxhYmVsKCk7Ci0gICAgICAgICAgICBtX2pzclNpdGVzLmFwcGVu
ZChKU1JJbmZvKGFkZHJQb3NpdGlvbiwgc3JldFRhcmdldCkpOwotICAgICAgICAgICAgaSArPSAz
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9zcmV0OiB7
Ci0gICAgICAgICAgICBfXyBqbXBfbShzaXplb2YoUmVnaXN0ZXIpICogaW5zdHJ1Y3Rpb25baSAr
IDFdLnUub3BlcmFuZCwgWDg2OjplZGkpOwotICAgICAgICAgICAgaSArPSAyOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9lcTogewotICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2
OjplYXgsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKLSAgICAg
ICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bXMoWDg2OjplYXgsIFg4Njo6ZWR4LCBp
KTsKLSAgICAgICAgICAgIF9fIGNtcGxfcnIoWDg2OjplZHgsIFg4Njo6ZWF4KTsKLSAgICAgICAg
ICAgIF9fIHNldGVfcihYODY6OmVheCk7Ci0gICAgICAgICAgICBfXyBtb3Z6YmxfcnIoWDg2Ojpl
YXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUoWDg2Ojpl
YXgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbHNoaWZ0OiB7Ci0gICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCwg
aW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplY3gsIGkpOwotICAgICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVjeCwgaSk7Ci0gICAgICAgICAgICBlbWl0
RmFzdEFyaXRoSW1tVG9JbnQoWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdEZhc3RBcml0aElt
bVRvSW50KFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIHNobGxfQ0xyKFg4Njo6ZWF4KTsKLSAg
ICAgICAgICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU9yU2xvd0Nhc2UoWDg2OjplYXgsIGkpOwot
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5v
cGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfYml0YW5kOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmMx
ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNy
YzIgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOwotICAgICAgICAgICAgdW5zaWduZWQg
ZHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIGlmIChKU1Zh
bHVlKiB2YWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMxKSkgewotICAg
ICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMiwgWDg2OjplYXgsIGkpOwot
ICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7
Ci0gICAgICAgICAgICAgICAgX18gYW5kbF9pMzJyKGFzSW50ZWdlcih2YWx1ZSksIFg4Njo6ZWF4
KTsgLy8gRklYTUU6IG1ha2UgaXQgbW9yZSBvYnZpb3VzIHRoaXMgaXMgcmVseWluZyBvbiB0aGUg
Zm9ybWF0IG9mIEpTSW1tZWRpYXRlCi0gICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChKU1ZhbHVlKiB2YWx1ZSA9IGdldENv
bnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMyKSkgewotICAgICAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICAgICAg
X18gYW5kbF9pMzJyKGFzSW50ZWdlcih2YWx1ZSksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIFg4Njo6ZWF4LCBzcmMy
LCBYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICAgICAgX18gYW5kbF9ycihYODY6OmVkeCwgWDg2
OjplYXgpOwotICAgICAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6
OmVheCwgaSk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaSArPSA1OwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9yc2hpZnQ6IHsKLSAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBp
bnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVjeCwgaSk7Ci0gICAgICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWN4LCBpKTsKLSAgICAgICAgICAgIGVtaXRG
YXN0QXJpdGhJbW1Ub0ludChYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBzYXJsX0NMcihYODY6
OmVheCk7Ci0gICAgICAgICAgICBlbWl0RmFzdEFyaXRoUG90ZW50aWFsbHlSZVRhZ0ltbWVkaWF0
ZShYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9iaXRub3Q6IHsKLSAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2
OjplYXgsIGkpOwotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6
ZWF4LCBpKTsKLSAgICAgICAgICAgIF9fIHhvcmxfaThyKH5KU0ltbWVkaWF0ZTo6VGFnQml0VHlw
ZUludGVnZXIsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
aW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Jlc29sdmVfd2l0aF9i
YXNlOiB7Ci0gICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmRdKTsKLSAgICAgICAgICAgIGVt
aXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDAp
OwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9yZXNvbHZl
X3dpdGhfYmFzZSk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBp
ICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25l
d19mdW5jX2V4cDogewotICAgICAgICAgICAgRnVuY0V4cHJOb2RlKiBmdW5jID0gKG1fY29kZUJs
b2NrLT5mdW5jdGlvbkV4cHJlc3Npb25zW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKS5n
ZXQoKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0
PHVuc2lnbmVkPihmdW5jKSwgMCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnBy
ZXRlcjo6Y3RpX29wX25ld19mdW5jX2V4cCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAz
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9tb2Q6IHsK
LSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAyXS51
Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVj
eCwgaSk7Ci0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplYXgs
IGkpOwotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWN4LCBp
KTsKLSAgICAgICAgICAgIGVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZShYODY6OmVheCk7Ci0g
ICAgICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShlbWl0RmFzdEFyaXRo
RGVUYWdJbW1lZGlhdGVKdW1wSWZaZXJvKFg4Njo6ZWN4KSwgaSkpOwotICAgICAgICAgICAgX18g
Y2RxKCk7Ci0gICAgICAgICAgICBfXyBpZGl2bF9yKFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVt
aXRGYXN0QXJpdGhSZVRhZ0ltbWVkaWF0ZShYODY6OmVkeCk7Ci0gICAgICAgICAgICBfXyBtb3Zs
X3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA0Owot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qdHJ1ZTogewot
ICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFd
LnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOwotCi0gICAgICAgICAgICBfXyBjbXBsX2kzMnIoYXNJ
bnRlZ2VyKEpTSW1tZWRpYXRlOjp6ZXJvSW1tZWRpYXRlKCkpLCBYODY6OmVheCk7Ci0gICAgICAg
ICAgICBKbXBTcmMgaXNaZXJvID0gX18gamUoKTsKLSAgICAgICAgICAgIF9fIHRlc3RsX2kzMnIo
SlNJbW1lZGlhdGU6OlRhZ0JpdFR5cGVJbnRlZ2VyLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBt
X2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbmUoKSwgaSArIDIgKyB0YXJnZXQpKTsKLQot
ICAgICAgICAgICAgX18gY21wbF9pMzJyKGFzSW50ZWdlcihKU0ltbWVkaWF0ZTo6dHJ1ZUltbWVk
aWF0ZSgpKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgbV9qbXBUYWJsZS5hcHBlbmQoSm1wVGFi
bGUoX18gamUoKSwgaSArIDIgKyB0YXJnZXQpKTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMycihh
c0ludGVnZXIoSlNJbW1lZGlhdGU6OmZhbHNlSW1tZWRpYXRlKCkpLCBYODY6OmVheCk7Ci0gICAg
ICAgICAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBqbmUoKSwgaSkpOwot
Ci0gICAgICAgICAgICBfXyBsaW5rKGlzWmVybywgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBp
ICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBDVElfQ09NUElM
RV9CSU5BUllfT1Aob3BfbGVzcykKLSAgICAgICAgY2FzZSBvcF9uZXE6IHsKLSAgICAgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4
Njo6ZWF4LCBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7Ci0gICAg
ICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW1zKFg4Njo6ZWF4LCBYODY6OmVkeCwg
aSk7Ci0gICAgICAgICAgICBfXyBjbXBsX3JyKFg4Njo6ZWF4LCBYODY6OmVkeCk7Ci0KLSAgICAg
ICAgICAgIF9fIHNldG5lX3IoWDg2OjplYXgpOwotICAgICAgICAgICAgX18gbW92emJsX3JyKFg4
Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0VGFnQXNCb29sSW1tZWRpYXRlKFg4
Njo6ZWF4KTsKLQotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kKTsKLQotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wb3N0X2RlYzogewotICAgICAgICAg
ICAgaW50IHNyY0RzdCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgWDg2OjplYXgsIGkpOwotICAgICAgICAg
ICAgX18gbW92bF9ycihYODY6OmVheCwgWDg2OjplZHgpOwotICAgICAgICAgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW1tTnVtKFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIF9fIHN1YmxfaThy
KGdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlhdGUoSlNJbW1lZGlhdGU6Om9uZUltbWVkaWF0ZSgp
KSwgWDg2OjplZHgpOwotICAgICAgICAgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50
cnkoX18gam8oKSwgaSkpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNE
c3QsIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBDVElfQ09NUElMRV9CSU5BUllfT1Aob3BfdXJz
aGlmdCkKLSAgICAgICAgY2FzZSBvcF9iaXR4b3I6IHsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIFg4Njo6ZWF4LCBpbnN0
cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCBYODY6OmVkeCwgaSk7Ci0gICAgICAgICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW1zKFg4Njo6ZWF4LCBYODY6OmVkeCwgaSk7Ci0gICAgICAg
ICAgICBfXyB4b3JsX3JyKFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0RmFz
dEFyaXRoUmVUYWdJbW1lZGlhdGUoWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkg
Kz0gNTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3
X3JlZ2V4cDogewotICAgICAgICAgICAgUmVnRXhwKiByZWdFeHAgPSBtX2NvZGVCbG9jay0+cmVn
ZXhwc1tpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kXS5nZXQoKTsKLSAgICAgICAgICAgIGVt
aXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihyZWdFeHApLCAw
KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfbmV3X3Jl
Z2V4cCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9iaXRvcjogewotICAgICAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgWDg2OjplYXgs
IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsKLSAgICAgICAgICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bXMoWDg2OjplYXgsIFg4Njo6ZWR4LCBpKTsKLSAg
ICAgICAgICAgIF9fIG9ybF9ycihYODY6OmVkeCwgWDg2OjplYXgpOwotICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAg
ICAgICAgIGkgKz0gNTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfdGhyb3c6IHsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lz
dGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAg
ICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfdGhyb3cpOwotICAgICAgICAg
ICAgX18gYWRkbF9pOHIoMHgyMCwgWDg2Ojplc3ApOwotICAgICAgICAgICAgX18gcG9wbF9yKFg4
Njo6ZWJ4KTsKLSAgICAgICAgICAgIF9fIHBvcGxfcihYODY6OmVkaSk7Ci0gICAgICAgICAgICBf
XyBwb3BsX3IoWDg2Ojplc2kpOwotICAgICAgICAgICAgX18gcmV0KCk7Ci0gICAgICAgICAgICBp
ICs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dl
dF9wbmFtZXM6IHsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVy
KGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAg
IGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X3BuYW1lcyk7Ci0gICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQp
OwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBvcF9uZXh0X3BuYW1lOiB7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJv
bVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCAwLCBYODY6OmVj
eCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgM10udS5v
cGVyYW5kOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9u
ZXh0X3BuYW1lKTsKLSAgICAgICAgICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7
Ci0gICAgICAgICAgICBKbXBTcmMgZW5kT2ZJdGVyID0gX18gamUoKTsKLSAgICAgICAgICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAg
ICAgICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbXAoKSwgaSArIDMgKyB0YXJn
ZXQpKTsKLSAgICAgICAgICAgIF9fIGxpbmsoZW5kT2ZJdGVyLCBfXyBsYWJlbCgpKTsKLSAgICAg
ICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfcHVzaF9zY29wZTogewotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFs
UmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOwotICAg
ICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXNoX3Njb3BlKTsK
LSAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2Ugb3BfcG9wX3Njb3BlOiB7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRl
cnByZXRlcjo6Y3RpX29wX3BvcF9zY29wZSk7Ci0gICAgICAgICAgICBpICs9IDE7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBDVElfQ09NUElMRV9VTkFSWV9PUChvcF90
eXBlb2YpCi0gICAgICAgIENUSV9DT01QSUxFX1VOQVJZX09QKG9wX2lzX3VuZGVmaW5lZCkKLSAg
ICAgICAgQ1RJX0NPTVBJTEVfVU5BUllfT1Aob3BfaXNfYm9vbGVhbikKLSAgICAgICAgQ1RJX0NP
TVBJTEVfVU5BUllfT1Aob3BfaXNfbnVtYmVyKQotICAgICAgICBDVElfQ09NUElMRV9VTkFSWV9P
UChvcF9pc19zdHJpbmcpCi0gICAgICAgIENUSV9DT01QSUxFX1VOQVJZX09QKG9wX2lzX29iamVj
dCkKLSAgICAgICAgQ1RJX0NPTVBJTEVfVU5BUllfT1Aob3BfaXNfZnVuY3Rpb24pCi0gICAgICAg
IGNhc2Ugb3Bfc3RyaWN0ZXE6IHsKLSAgICAgICAgICAgIGNvbXBpbGVPcFN0cmljdEVxKGluc3Ry
dWN0aW9uICsgaSwgaSwgT3BTdHJpY3RFcSk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX25zdHJpY3RlcTogewotICAg
ICAgICAgICAgY29tcGlsZU9wU3RyaWN0RXEoaW5zdHJ1Y3Rpb24gKyBpLCBpLCBPcE5TdHJpY3RF
cSk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIG9wX3RvX2pzbnVtYmVyOiB7Ci0gICAgICAgICAgICBpbnQgc3JjVlJlZyA9
IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyY1ZSZWcsIFg4Njo6ZWF4LCBpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIFg4Njo6ZWF4
KTsKLSAgICAgICAgICAgIEptcFNyYyB3YXNJbW1lZGlhdGUgPSBfXyBqbnooKTsKLQotICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFg4Njo6ZWF4LCBpLCBzcmNWUmVnKTsK
LQotICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVy
ZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBfXyBjbXBsX2kzMm0oTnVtYmVy
VHlwZSwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX3R5cGUpLCBYODY6OmVj
eCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2Fz
ZUVudHJ5KF9fIGpuZSgpLCBpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIF9fIGxpbmso
d2FzSW1tZWRpYXRlLCBfXyBsYWJlbCgpKTsKLQotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0g
MzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfaW46IHsK
LSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAyXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElB
cmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIDQsIFg4
Njo6ZWN4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3Bf
aW4pOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHVzaF9uZXdfc2NvcGU6IHsKLSAgICAgICAgICAg
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rp
b25baSArIDJdLnUub3BlcmFuZF0pOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50
KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgMCk7Ci0gICAgICAgICAgICBlbWl0
UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5k
LCA0LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6
Y3RpX29wX3B1c2hfbmV3X3Njb3BlKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2NhdGNoOiB7Ci0g
ICAgICAgICAgICBlbWl0R2V0Q1RJUGFyYW0oQ1RJX0FSR1NfY2FsbEZyYW1lLCBYODY6OmVkaSk7
IC8vIGVkaSA6PSByCi0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0
aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9qbXBfc2NvcGVzOiB7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBjb3VudCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoY291bnQsIDApOwotICAgICAgICAgICAgZW1p
dENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9qbXBfc2NvcGVzKTsKLSAgICAgICAgICAg
IHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBtX2ptcFRhYmxlLmFwcGVuZChKbXBUYWJsZShfXyBqbXAoKSwgaSArIDIgKyB0YXJnZXQp
KTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3BfcHV0X2J5X2luZGV4OiB7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJn
RnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAwLCBYODY6
OmVjeCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZCwgNCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxS
ZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA4LCBYODY6OmVjeCk7Ci0gICAg
ICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV9pbmRleCk7
Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIG9wX3N3aXRjaF9pbW06IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRhYmxlSW5k
ZXggPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgdW5zaWduZWQg
ZGVmYXVsdE9mZnNldCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBzY3J1dGluZWUgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOwotCi0g
ICAgICAgICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywg
dHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxl
KiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPmltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXNbdGFi
bGVJbmRleF07Ci0gICAgICAgICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVt
cFRhYmxlLCBpLCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwotICAg
ICAgICAgICAganVtcFRhYmxlLT5jdGlPZmZzZXRzLmdyb3coanVtcFRhYmxlLT5icmFuY2hPZmZz
ZXRzLnNpemUoKSk7Ci0KLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lz
dGVyKHNjcnV0aW5lZSwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Nv
bnN0YW50KHRhYmxlSW5kZXgsIDQpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJw
cmV0ZXI6OmN0aV9vcF9zd2l0Y2hfaW1tKTsKLSAgICAgICAgICAgIF9fIGptcF9yKFg4Njo6ZWF4
KTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRhYmxl
SW5kZXggPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgdW5zaWdu
ZWQgZGVmYXVsdE9mZnNldCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOwot
Ci0gICAgICAgICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9u
cywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgICAgICAgICAgU2ltcGxlSnVtcFRh
YmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPmNoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXNb
dGFibGVJbmRleF07Ci0gICAgICAgICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQo
anVtcFRhYmxlLCBpLCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwot
ICAgICAgICAgICAganVtcFRhYmxlLT5jdGlPZmZzZXRzLmdyb3coanVtcFRhYmxlLT5icmFuY2hP
ZmZzZXRzLnNpemUoKSk7Ci0KLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJl
Z2lzdGVyKHNjcnV0aW5lZSwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFy
Z0NvbnN0YW50KHRhYmxlSW5kZXgsIDQpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50
ZXJwcmV0ZXI6OmN0aV9vcF9zd2l0Y2hfY2hhcik7Ci0gICAgICAgICAgICBfXyBqbXBfcihYODY6
OmVheCk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6IHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IHRhYmxlSW5kZXggPSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAg
dW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVy
YW5kOwotCi0gICAgICAgICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3Rp
bmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgICAgICAgICAgU3RyaW5n
SnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJs
ZXNbdGFibGVJbmRleF07Ci0gICAgICAgICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNv
cmQoanVtcFRhYmxlLCBpLCBkZWZhdWx0T2Zmc2V0KSk7Ci0KLSAgICAgICAgICAgIGVtaXRQdXRD
VElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgMCwgWDg2OjplY3gpOwotICAgICAg
ICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHRhYmxlSW5kZXgsIDQpOwotICAgICAgICAgICAg
ZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9zd2l0Y2hfc3RyaW5nKTsKLSAgICAg
ICAgICAgIF9fIGptcF9yKFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDogewotICAg
ICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSAr
IDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zy
b21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgNCwgWDg2Ojpl
Y3gpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9kZWxf
YnlfdmFsKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25b
aSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3B1dF9nZXR0ZXI6IHsKLSAgICAgICAgICAg
IGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9w
ZXJhbmQsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZF0pOwot
ICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0NvbnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQ+KGlkZW50KSwgNCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdp
c3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA4LCBYODY6OmVjeCk7Ci0gICAgICAg
ICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9nZXR0ZXIpOwotICAg
ICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBvcF9wdXRfc2V0dGVyOiB7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kLCAwLCBYODY6OmVjeCk7Ci0g
ICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXJz
W2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElB
cmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihpZGVudCksIDQpOwotICAgICAg
ICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDNd
LnUub3BlcmFuZCwgOCwgWDg2OjplY3gpOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50
ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfc2V0dGVyKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmV3X2Vycm9yOiB7Ci0g
ICAgICAgICAgICBKU1ZhbHVlKiBtZXNzYWdlID0gbV9jb2RlQmxvY2stPnVuZXhwZWN0ZWRDb25z
dGFudHNbaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZF07Ci0gICAgICAgICAgICBlbWl0UHV0
Q1RJQXJnQ29uc3RhbnQoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCk7Ci0gICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoYXNJbnRlZ2VyKG1lc3NhZ2UpLCA0KTsKLSAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChtX2NvZGVCbG9jay0+bGluZU51bWJlckZvclZQ
QygmaW5zdHJ1Y3Rpb25baV0pLCA4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVy
cHJldGVyOjpjdGlfb3BfbmV3X2Vycm9yKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2RlYnVnOiB7
Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCwgMCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3RhbnQoaW5zdHJ1Y3Rp
b25baSArIDJdLnUub3BlcmFuZCwgNCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnQ29uc3Rh
bnQoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgOCk7Ci0gICAgICAgICAgICBlbWl0Q1RJ
Q2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2RlYnVnKTsKLSAgICAgICAgICAgIGkgKz0gNDsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfZXFfbnVsbDog
ewotICAgICAgICAgICAgdW5zaWduZWQgZHN0ID0gaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFu
ZDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYzEgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVy
YW5kOwotCi0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIFg4Njo6ZWF4
LCBpKTsKLSAgICAgICAgICAgIF9fIHRlc3RsX2kzMnIoSlNJbW1lZGlhdGU6OlRhZ01hc2ssIFg4
Njo6ZWF4KTsKLSAgICAgICAgICAgIEptcFNyYyBpc0ltbWVkaWF0ZSA9IF9fIGpueigpOwotCi0g
ICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSwg
WDg2OjplYXgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIHRlc3RsX2kzMm0oTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX2ZsYWdz
KSwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gc2V0bnpfcihYODY6OmVheCk7Ci0KLSAgICAg
ICAgICAgIEptcFNyYyB3YXNOb3RJbW1lZGlhdGUgPSBfXyBqbXAoKTsKLQotICAgICAgICAgICAg
X18gbGluayhpc0ltbWVkaWF0ZSwgX18gbGFiZWwoKSk7Ci0KLSAgICAgICAgICAgIF9fIG1vdmxf
aTMycih+SlNJbW1lZGlhdGU6OkV4dGVuZGVkVGFnQml0VW5kZWZpbmVkLCBYODY6OmVjeCk7Ci0g
ICAgICAgICAgICBfXyBhbmRsX3JyKFg4Njo6ZWF4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBf
XyBjbXBsX2kzMnIoSlNJbW1lZGlhdGU6OkZ1bGxUYWdUeXBlTnVsbCwgWDg2OjplY3gpOwotICAg
ICAgICAgICAgX18gc2V0ZV9yKFg4Njo6ZWF4KTsKLQotICAgICAgICAgICAgX18gbGluayh3YXNO
b3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwotCi0gICAgICAgICAgICBfXyBtb3Z6YmxfcnIoWDg2
OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUoWDg2
OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCi0gICAg
ICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX25lcV9udWxsOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkc3QgPSBpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgdW5zaWduZWQgc3JjMSA9IGluc3RydWN0
aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Cit9IC8vIG5hbWVzcGFjZSBKU0MKIAotICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCBYODY6OmVheCwgaSk7Ci0gICAgICAgICAgICBf
XyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6OmVheCk7Ci0gICAgICAgICAg
ICBKbXBTcmMgaXNJbW1lZGlhdGUgPSBfXyBqbnooKTsKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQog
Ci0gICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJl
KSwgWDg2OjplYXgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIHRlc3RsX2kzMm0oTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mby5tX2Zs
YWdzKSwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gc2V0el9yKFg4Njo6ZWF4KTsKLQotICAg
ICAgICAgICAgSm1wU3JjIHdhc05vdEltbWVkaWF0ZSA9IF9fIGptcCgpOwotCi0gICAgICAgICAg
ICBfXyBsaW5rKGlzSW1tZWRpYXRlLCBfXyBsYWJlbCgpKTsKLQotICAgICAgICAgICAgX18gbW92
bF9pMzJyKH5KU0ltbWVkaWF0ZTo6RXh0ZW5kZWRUYWdCaXRVbmRlZmluZWQsIFg4Njo6ZWN4KTsK
LSAgICAgICAgICAgIF9fIGFuZGxfcnIoWDg2OjplYXgsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAg
IF9fIGNtcGxfaTMycihKU0ltbWVkaWF0ZTo6RnVsbFRhZ1R5cGVOdWxsLCBYODY6OmVjeCk7Ci0g
ICAgICAgICAgICBfXyBzZXRuZV9yKFg4Njo6ZWF4KTsKLQotICAgICAgICAgICAgX18gbGluayh3
YXNOb3RJbW1lZGlhdGUsIF9fIGxhYmVsKCkpOwotCi0gICAgICAgICAgICBfXyBtb3Z6YmxfcnIo
WDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUo
WDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCi0g
ICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIG9wX2VudGVyOiB7Ci0gICAgICAgICAgICAvLyBFdmVuIHRob3VnaCBDVEkgZG9lc24n
dCB1c2UgdGhlbSwgd2UgaW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKLSAgICAgICAgICAgIC8vIHJl
Z2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJv
bG9uZ2luZwotICAgICAgICAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdD
IHByZXNzdXJlLgotICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0gbV9jb2RlQmxvY2stPm51bVZh
cnMgKyBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwotICAgICAgICAgICAg
Zm9yIChzaXplX3QgaiA9IDA7IGogPCBjb3VudDsgKytqKQotICAgICAgICAgICAgICAgIGVtaXRJ
bml0UmVnaXN0ZXIoaik7Ci0KLSAgICAgICAgICAgIGkrPSAxOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9lbnRlcl93aXRoX2FjdGl2YXRpb246IHsKLSAg
ICAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFs
aXplIG91ciBjb25zdGFudAotICAgICAgICAgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBw
b2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCi0gICAgICAgICAgICAv
LyBvYmplY3QgbGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCi0gICAgICAgICAg
ICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bnVtVmFycyArIG1fY29kZUJsb2NrLT5jb25z
dGFudFJlZ2lzdGVycy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8
IGNvdW50OyArK2opCi0gICAgICAgICAgICAgICAgZW1pdEluaXRSZWdpc3RlcihqKTsKLQotICAg
ICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXNoX2FjdGl2YXRp
b24pOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kKTsKLQotICAgICAgICAgICAgaSs9IDI7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6IHsKLSAgICAgICAg
ICAgIGVtaXRDVElDYWxsKGksIChtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycyA9PSAxKSA/IElu
dGVycHJldGVyOjpjdGlfb3BfY3JlYXRlX2FyZ3VtZW50c19ub19wYXJhbXMgOiBJbnRlcnByZXRl
cjo6Y3RpX29wX2NyZWF0ZV9hcmd1bWVudHMpOwotICAgICAgICAgICAgaSArPSAxOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jb252ZXJ0X3RoaXM6IHsK
LSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUu
b3BlcmFuZCwgWDg2OjplYXgsIGkpOwotCi0gICAgICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoWDg2OjplYXgsIGkpOwotICAgICAgICAgICAgX18gbW92bF9tcihGSUVMRF9PRkZT
RVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4LCBYODY6OmVkeCk7Ci0gICAgICAgICAg
ICBfXyB0ZXN0bF9pMzJtKE5lZWRzVGhpc0NvbnZlcnNpb24sIEZJRUxEX09GRlNFVChTdHJ1Y3R1
cmUsIG1fdHlwZUluZm8ubV9mbGFncyksIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIG1fc2xvd0Nh
c2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpueigpLCBpKSk7Ci0KLSAgICAgICAgICAgIGkg
Kz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcHJv
ZmlsZV93aWxsX2NhbGw6IHsKLSAgICAgICAgICAgIGVtaXRHZXRDVElQYXJhbShDVElfQVJHU19w
cm9maWxlclJlZmVyZW5jZSwgWDg2OjplYXgpOwotICAgICAgICAgICAgX18gY21wbF9pMzJtKDAs
IFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIEptcFNyYyBub1Byb2ZpbGVyID0gX18gamUoKTsKLSAg
ICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kg
KyAxXS51Lm9wZXJhbmQsIDAsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGks
IEludGVycHJldGVyOjpjdGlfb3BfcHJvZmlsZV93aWxsX2NhbGwpOwotICAgICAgICAgICAgX18g
bGluayhub1Byb2ZpbGVyLCBfXyBsYWJlbCgpKTsKLQotICAgICAgICAgICAgaSArPSAyOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9wcm9maWxlX2RpZF9j
YWxsOiB7Ci0gICAgICAgICAgICBlbWl0R2V0Q1RJUGFyYW0oQ1RJX0FSR1NfcHJvZmlsZXJSZWZl
cmVuY2UsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMybSgwLCBYODY6OmVheCk7
Ci0gICAgICAgICAgICBKbXBTcmMgbm9Qcm9maWxlciA9IF9fIGplKCk7Ci0gICAgICAgICAgICBl
bWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kLCAwLCBYODY6OmVheCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRl
cjo6Y3RpX29wX3Byb2ZpbGVfZGlkX2NhbGwpOwotICAgICAgICAgICAgX18gbGluayhub1Byb2Zp
bGVyLCBfXyBsYWJlbCgpKTsKLQotICAgICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOgotICAgICAg
ICBjYXNlIG9wX2dldF9ieV9pZF9jaGFpbjoKLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2Vu
ZXJpYzoKLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG86Ci0gICAgICAgIGNhc2Ugb3Bf
Z2V0X2J5X2lkX3Byb3RvX2xpc3Q6Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3NlbGY6Ci0g
ICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3NlbGZfbGlzdDoKLSAgICAgICAgY2FzZSBvcF9nZXRf
c3RyaW5nX2xlbmd0aDoKLSAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRfZ2VuZXJpYzoKLSAgICAg
ICAgY2FzZSBvcF9wdXRfYnlfaWRfcmVwbGFjZToKLSAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWRf
dHJhbnNpdGlvbjoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgQVNTRVJUKHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCA9PSBt
X2NvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnMuc2l6ZSgpKTsKLSAgICBBU1NF
UlQoY2FsbExpbmtJbmZvSW5kZXggPT0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5mb3Muc2l6ZSgp
KTsKLX0KLQotCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpCi17Ci0gICAgdW5z
aWduZWQgam1wVGFibGVDb3VudCA9IG1fam1wVGFibGUuc2l6ZSgpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBqbXBUYWJsZUNvdW50OyArK2kpCi0gICAgICAgIF9fIGxpbmsobV9qbXBU
YWJsZVtpXS5mcm9tLCBtX2xhYmVsc1ttX2ptcFRhYmxlW2ldLnRvXSk7Ci0gICAgbV9qbXBUYWJs
ZS5jbGVhcigpOwotfQotCi0jZGVmaW5lIENUSV9DT01QSUxFX0JJTkFSWV9PUF9TTE9XX0NBU0Uo
bmFtZSkgXAotICAgIGNhc2UgbmFtZTogeyBcCi0gICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwg
X18gbGFiZWwoKSk7IFwKLSAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIo
aW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gpOyBcCi0gICAgICAgIGVt
aXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJh
bmQsIDQsIFg4Njo6ZWN4KTsgXAotICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6
Y3RpXyMjbmFtZSk7IFwKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kKTsgXAotICAgICAgICBpICs9IDQ7IFwKLSAgICAgICAgYnJlYWs7
IFwKLSAgICB9Ci0KLSNkZWZpbmUgQ1RJX0NPTVBJTEVfQklOQVJZX09QX1NMT1dfQ0FTRV9ET1VC
TEVfRU5UUlkobmFtZSkgXAotICAgIGNhc2UgbmFtZTogeyBcCi0gICAgICAgIF9fIGxpbmsoaXRl
ci0+ZnJvbSwgX18gbGFiZWwoKSk7IFwKLSAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwg
X18gbGFiZWwoKSk7ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21W
aXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgMCwgWDg2OjplY3gp
OyBcCi0gICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAzXS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsgXAotICAgICAgICBlbWl0Q1RJQ2FsbChp
LCBJbnRlcnByZXRlcjo6Y3RpXyMjbmFtZSk7IFwKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsgXAotICAgICAgICBpICs9IDQ7IFwK
LSAgICAgICAgYnJlYWs7IFwKLSAgICB9Ci0gICAgCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQotewotICAgIHVuc2lnbmVkIHByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRl
eCA9IDA7Ci0gICAgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXggPSAwOwotCi0gICAgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpOwot
ICAgIGZvciAoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciBpdGVyID0gbV9zbG93Q2Fz
ZXMuYmVnaW4oKTsgaXRlciAhPSBtX3Nsb3dDYXNlcy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAg
IC8vIEZJWE1FOiBlbmFibGUgcGVlcGhvbGUgb3B0aW1pemF0aW9ucyBmb3Igc2xvdyBjYXNlcyB3
aGVuIGFwcGxpY2FibGUKLSAgICAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwotCi0gICAg
ICAgIHVuc2lnbmVkIGkgPSBpdGVyLT50bzsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIHVuc2ln
bmVkIGZpcnN0VG8gPSBpOwotI2VuZGlmCi0KLSAgICAgICAgc3dpdGNoIChPcGNvZGVJRCBvcGNv
ZGVJRCA9IG1faW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uW2ldLnUub3Bjb2Rl
KSkgewotICAgICAgICBjYXNlIG9wX2NvbnZlcnRfdGhpczogewotICAgICAgICAgICAgX18gbGlu
ayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlcikt
PmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwg
MCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2NvbnZl
cnRfdGhpcyk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
W2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSAyOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9hZGQ6IHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGRzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBzcmMxID0gaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIHVu
c2lnbmVkIHNyYzIgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOwotICAgICAgICAgICAg
aWYgKEpTVmFsdWUqIHZhbHVlID0gZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHNyYzEp
KSB7Ci0gICAgICAgICAgICAgICAgSm1wU3JjIG5vdEltbSA9IGl0ZXItPmZyb207Ci0gICAgICAg
ICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAg
ICAgICAgX18gc3VibF9pMzJyKGdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlhdGUodmFsdWUpLCBY
ODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgX18gbGluayhub3RJbW0sIF9fIGxhYmVsKCkpOwot
ICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzEsIDAs
IFg4Njo6ZWN4KTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCA0KTsK
LSAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2FkZCk7
Ci0gICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAg
ICAgfSBlbHNlIGlmIChKU1ZhbHVlKiB2YWx1ZSA9IGdldENvbnN0YW50SW1tZWRpYXRlTnVtZXJp
Y0FyZyhzcmMyKSkgewotICAgICAgICAgICAgICAgIEptcFNyYyBub3RJbW0gPSBpdGVyLT5mcm9t
OwotICAgICAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwot
ICAgICAgICAgICAgICAgIF9fIHN1YmxfaTMycihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRl
KHZhbHVlKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgICAgIF9fIGxpbmsobm90SW1tLCBfXyBs
YWJlbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAg
ICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihzcmMyLCA0LCBY
ODY6OmVjeCk7Ci0gICAgICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0
aV9vcF9hZGQpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgT3BlcmFuZFR5cGVzIHR5cGVz
ID0gT3BlcmFuZFR5cGVzOjpmcm9tSW50KGluc3RydWN0aW9uW2kgKyA0XS51Lm9wZXJhbmQpOwot
ICAgICAgICAgICAgICAgIGlmICh0eXBlcy5maXJzdCgpLm1pZ2h0QmVOdW1iZXIoKSAmJiB0eXBl
cy5zZWNvbmQoKS5taWdodEJlTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbXBpbGVC
aW5hcnlBcml0aE9wU2xvd0Nhc2Uob3BfYWRkLCBpdGVyLCBkc3QsIHNyYzEsIHNyYzIsIHR5cGVz
LCBpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpICs9IDU7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2dldF9ieV92YWw6IHsK
LSAgICAgICAgICAgIC8vIFRoZSBzbG93IGNhc2UgdGhhdCBoYW5kbGVzIGFjY2Vzc2VzIHRvIGFy
cmF5cyAoYmVsb3cpIG1heSBqdW1wIGJhY2sgdXAgdG8gaGVyZS4gCi0gICAgICAgICAgICBKbXBE
c3QgYmVnaW5HZXRCeVZhbFNsb3cgPSBfXyBsYWJlbCgpOwotCi0gICAgICAgICAgICBKbXBTcmMg
bm90SW1tID0gaXRlci0+ZnJvbTsKLSAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20s
IF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFi
ZWwoKSk7Ci0gICAgICAgICAgICBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKFg4Njo6ZWR4
KTsKLSAgICAgICAgICAgIF9fIGxpbmsobm90SW1tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAg
IGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhY
ODY6OmVkeCwgNCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3Rp
X29wX2dldF9ieV92YWwpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0
cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIF9fIGxpbmsoX18gam1wKCks
IG1fbGFiZWxzW2kgKyA0XSk7Ci0KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgc2xvdyBjYXNlIHRo
YXQgaGFuZGxlcyBhY2Nlc3NlcyB0byBhcnJheXMgYWJvdmUgdGhlIGZhc3QgY3V0LW9mZi4KLSAg
ICAgICAgICAgIC8vIEZpcnN0LCBjaGVjayBpZiB0aGlzIGlzIGFuIGFjY2VzcyB0byB0aGUgdmVj
dG9yCi0gICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAg
ICAgICAgICAgIF9fIGNtcGxfcm0oWDg2OjplZHgsIEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2Us
IG1fdmVjdG9yTGVuZ3RoKSwgWDg2OjplY3gpOwotICAgICAgICAgICAgX18gbGluayhfXyBqYmUo
KSwgYmVnaW5HZXRCeVZhbFNsb3cpOwotCi0gICAgICAgICAgICAvLyBva2F5LCBtaXNzZWQgdGhl
IGZhc3QgcmVnaW9uLCBidXQgaXQgaXMgc3RpbGwgaW4gdGhlIHZlY3Rvci4gIEdldCB0aGUgdmFs
dWUuCi0gICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2UsIG1f
dmVjdG9yWzBdKSwgWDg2OjplY3gsIFg4Njo6ZWR4LCBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVj
eCk7Ci0gICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSB2YWx1ZSBsb2FkZWQgaXMgemVy
bzsgaWYgc28gd2UgbmVlZCB0byByZXR1cm4gdW5kZWZpbmVkLgotICAgICAgICAgICAgX18gdGVz
dGxfcnIoWDg2OjplY3gsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIGxpbmsoX18gamUoKSwg
YmVnaW5HZXRCeVZhbFNsb3cpOwotICAgICAgICAgICAgX18gbW92bF9ycihYODY6OmVjeCwgWDg2
OjplYXgpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltp
ICsgMV0udS5vcGVyYW5kLCBYODY6OmVheCk7Ci0KLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfc3ViOiB7Ci0gICAgICAg
ICAgICBjb21waWxlQmluYXJ5QXJpdGhPcFNsb3dDYXNlKG9wX3N1YiwgaXRlciwgaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZCwgaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCwgaW5zdHJ1
Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgT3BlcmFuZFR5cGVzOjpmcm9tSW50KGluc3RydWN0aW9u
W2kgKyA0XS51Lm9wZXJhbmQpLCBpKTsKLSAgICAgICAgICAgIGkgKz0gNTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcnNoaWZ0OiB7Ci0gICAgICAgICAg
ICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgX18gbGluaygo
KytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4
Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplY3gsIDQpOwotICAg
ICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9yc2hpZnQpOwotICAg
ICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVy
YW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2Ugb3BfbHNoaWZ0OiB7Ci0gICAgICAgICAgICBKbXBTcmMgbm90SW1tMSA9
IGl0ZXItPmZyb207Ci0gICAgICAgICAgICBKbXBTcmMgbm90SW1tMiA9ICgrK2l0ZXIpLT5mcm9t
OwotICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVy
YW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplY3gsIGkp
OwotICAgICAgICAgICAgX18gbGluayhub3RJbW0xLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAg
IF9fIGxpbmsobm90SW1tMiwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJn
KFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplY3gsIDQpOwot
ICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9sc2hpZnQpOwot
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5v
cGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9sZXNzOiB7Ci0gICAgICAgICAgICBlbWl0U2xv
d1NjcmlwdENoZWNrKGkpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVj
dGlvbltpICsgM10udS5vcGVyYW5kOwotICAgICAgICAgICAgSlNWYWx1ZSogc3JjMmltbSA9IGdl
dENvbnN0YW50SW1tZWRpYXRlTnVtZXJpY0FyZyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIGlmIChzcmMyaW1tKSB7Ci0gICAgICAgICAgICAgICAgX18gbGluayhp
dGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4
Njo6ZWR4LCAwKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdp
c3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCA0LCBYODY6OmVjeCk7Ci0gICAgICAg
ICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9sb29wX2lmX2xlc3Mp
OwotICAgICAgICAgICAgICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAg
ICAgICAgICAgICAgX18gbGluayhfXyBqbmUoKSwgbV9sYWJlbHNbaSArIDMgKyB0YXJnZXRdKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9t
LCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBf
XyBsYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsK
LSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA0KTsKLSAgICAgICAgICAg
ICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2xvb3BfaWZfbGVzcyk7Ci0g
ICAgICAgICAgICAgICAgX18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAg
ICAgICAgICBfXyBsaW5rKF9fIGpuZSgpLCBtX2xhYmVsc1tpICsgMyArIHRhcmdldF0pOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9wdXRfYnlfaWQ6IHsKLSAgICAgICAgICAgIGlmIChsaW5r
U2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKSkK
LSAgICAgICAgICAgICAgICArK2l0ZXI7Ci0gICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20s
IF9fIGxhYmVsKCkpOwotCi0gICAgICAgICAgICBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2Rl
QmxvY2stPmlkZW50aWZpZXJzW2luc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmRdKTsKLSAgICAg
ICAgICAgIGVtaXRQdXRDVElBcmdDb25zdGFudChyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihp
ZGVudCksIDQpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAg
ICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA4KTsKLSAgICAgICAgICAgIEptcFNyYyBj
YWxsID0gZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfaWQpOwotCi0g
ICAgICAgICAgICAvLyBUcmFjayB0aGUgbG9jYXRpb24gb2YgdGhlIGNhbGw7IHRoaXMgd2lsbCBi
ZSB1c2VkIHRvIHJlY292ZXIgcmVwYXRjaCBpbmZvcm1hdGlvbi4KLSAgICAgICAgICAgIEFTU0VS
VChtX2NvZGVCbG9jay0+cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbnNbcHJvcGVydHlBY2Nlc3NJ
bnN0cnVjdGlvbkluZGV4XS5ieXRlY29kZUluZGV4ID09IGkpOwotICAgICAgICAgICAgbV9wcm9w
ZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhd
LmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGw7Ci0gICAgICAgICAgICArK3Byb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25JbmRleDsKLQotICAgICAgICAgICAgaSArPSA4OwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWQ6IHsKLSAgICAgICAgICAg
IC8vIEFzIGZvciB0aGUgaG90IHBhdGggb2YgZ2V0X2J5X2lkLCBhYm92ZSwgd2UgZW5zdXJlIHRo
YXQgd2UgY2FuIHVzZSBhbiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgb2Zmc2V0Ci0gICAgICAgICAg
ICAvLyBzbyB0aGF0IHdlIG9ubHkgbmVlZCB0cmFjayBvbmUgcG9pbnRlciBpbnRvIHRoZSBzbG93
IGNhc2UgY29kZSAtIHdlIHRyYWNrIGEgcG9pbnRlciB0byB0aGUgbG9jYXRpb24KLSAgICAgICAg
ICAgIC8vIG9mIHRoZSBjYWxsICh3aGljaCB3ZSBjYW4gdXNlIHRvIGxvb2sgdXAgdGhlIHJlcGF0
Y2ggaW5mb3JtYXRpb24pLCBidXQgc2hvdWxkIGEgYXJyYXktbGVuZ3RoIG9yCi0gICAgICAgICAg
ICAvLyBwcm90b3R5cGUgYWNjZXNzIHRyYW1wb2xpbmUgZmFpbCB3ZSB3YW50IHRvIGJhaWwgb3V0
IGJhY2sgdG8gaGVyZS4gIFRvIGRvIHNvIHdlIGNhbiBzdWJ0cmFjdCBiYWNrCi0gICAgICAgICAg
ICAvLyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgY2FsbCB0byB0aGUgaGVhZCBvZiB0aGUgc2xvdyBj
YXNlLgotCi0gICAgICAgICAgICBpZiAobGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgaW5z
dHJ1Y3Rpb25baSArIDJdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICAgICAgKytpdGVyOwotICAg
ICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLQotI2lmbmRlZiBOREVC
VUcKLSAgICAgICAgICAgIEptcERzdCBjb2xkUGF0aEJlZ2luID0gX18gbGFiZWwoKTsKLSNlbmRp
ZiAgICAgICAgCi0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAg
ICAgICAgIElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcnNbaW5z
dHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZF0pOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Nv
bnN0YW50KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KGlkZW50KSwgNCk7Ci0gICAgICAgICAg
ICBKbXBTcmMgY2FsbCA9IGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5
X2lkKTsKLSAgICAgICAgICAgIEFTU0VSVChYODZBc3NlbWJsZXI6OmdldERpZmZlcmVuY2VCZXR3
ZWVuTGFiZWxzKGNvbGRQYXRoQmVnaW4sIGNhbGwpID09IHJlcGF0Y2hPZmZzZXRHZXRCeUlkU2xv
d0Nhc2VDYWxsKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZCk7Ci0KLSAgICAgICAgICAgIC8vIFRyYWNrIHRoZSBsb2NhdGlv
biBvZiB0aGUgY2FsbDsgdGhpcyB3aWxsIGJlIHVzZWQgdG8gcmVjb3ZlciByZXBhdGNoIGluZm9y
bWF0aW9uLgotICAgICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5wcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uc1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhdLmJ5dGVjb2RlSW5kZXgg
PT0gaSk7Ci0gICAgICAgICAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW3Byb3Bl
cnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gY2FsbDsKLSAg
ICAgICAgICAgICsrcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4OwotCi0gICAgICAgICAg
ICBpICs9IDg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9w
X2xvb3BfaWZfbGVzc2VxOiB7Ci0gICAgICAgICAgICBlbWl0U2xvd1NjcmlwdENoZWNrKGkpOwot
Ci0gICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVy
YW5kOwotICAgICAgICAgICAgSlNWYWx1ZSogc3JjMmltbSA9IGdldENvbnN0YW50SW1tZWRpYXRl
TnVtZXJpY0FyZyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGlm
IChzcmMyaW1tKSB7Ci0gICAgICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJl
bCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCAwKTsKLSAgICAg
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltp
ICsgMl0udS5vcGVyYW5kLCA0LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICAgICAgZW1pdENUSUNh
bGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9sb29wX2lmX2xlc3NlcSk7Ci0gICAgICAgICAgICAg
ICAgX18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgICAgICBfXyBs
aW5rKF9fIGpuZSgpLCBtX2xhYmVsc1tpICsgMyArIHRhcmdldF0pOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwot
ICAgICAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAg
ICAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgICAg
IGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDQpOwotICAgICAgICAgICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3BfbG9vcF9pZl9sZXNzZXEpOwotICAgICAgICAgICAgICAg
IF9fIHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICAgICAgX18gbGlu
ayhfXyBqbmUoKSwgbV9sYWJlbHNbaSArIDMgKyB0YXJnZXRdKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGkgKz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3BfcHJlX2luYzogewotICAgICAgICAgICAgdW5zaWduZWQgc3JjRHN0ID0gaW5zdHJ1
Y3Rpb25baSArIDFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIEptcFNyYyBub3RJbW0gPSBpdGVy
LT5mcm9tOwotICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7
Ci0gICAgICAgICAgICBfXyBzdWJsX2k4cihnZXREZVRhZ2dlZENvbnN0YW50SW1tZWRpYXRlKEpT
SW1tZWRpYXRlOjpvbmVJbW1lZGlhdGUoKSksIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIF9fIGxp
bmsobm90SW1tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2Ojpl
YXgsIDApOwotICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9w
cmVfaW5jKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKLSAg
ICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3BfcHV0X2J5X3ZhbDogewotICAgICAgICAgICAgLy8gTm9ybWFsIHNsb3cgY2FzZXMg
LSBlaXRoZXIgaXMgbm90IGFuIGltbWVkaWF0ZSBpbW0sIG9yIGlzIGFuIGFycmF5LgotICAgICAg
ICAgICAgSm1wU3JjIG5vdEltbSA9IGl0ZXItPmZyb207Ci0gICAgICAgICAgICBfXyBsaW5rKCgr
K2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlcikt
PmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdEZhc3RBcml0aEludFRvSW1tTm9D
aGVjayhYODY6OmVkeCk7Ci0gICAgICAgICAgICBfXyBsaW5rKG5vdEltbSwgX18gbGFiZWwoKSk7
Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAzXS51
Lm9wZXJhbmQsIFg4Njo6ZWN4LCBpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2Ojpl
YXgsIDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgNCk7Ci0gICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWN4LCA4KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X3ZhbCk7Ci0gICAgICAgICAgICBfXyBsaW5r
KF9fIGptcCgpLCBtX2xhYmVsc1tpICsgNF0pOwotCi0gICAgICAgICAgICAvLyBzbG93IGNhc2Vz
IGZvciBpbW1lZGlhdGUgaW50IGFjY2Vzc2VzIHRvIGFycmF5cwotICAgICAgICAgICAgX18gbGlu
aygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBfXyBsaW5rKCgrK2l0
ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplY3gsIGkpOwotICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJn
KFg4Njo6ZWR4LCA0KTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplY3gsIDgpOwot
ICAgICAgICAgICAgZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wdXRfYnlfdmFs
X2FycmF5KTsKLQotICAgICAgICAgICAgaSArPSA0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBvcF9sb29wX2lmX3RydWU6IHsKLSAgICAgICAgICAgIGVtaXRT
bG93U2NyaXB0Q2hlY2soaSk7Ci0KLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18g
bGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAg
ICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfanRydWUpOwotICAgICAg
ICAgICAgX18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIHVuc2ln
bmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBf
XyBsaW5rKF9fIGpuZSgpLCBtX2xhYmVsc1tpICsgMiArIHRhcmdldF0pOwotICAgICAgICAgICAg
aSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9w
cmVfZGVjOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzcmNEc3QgPSBpbnN0cnVjdGlvbltpICsg
MV0udS5vcGVyYW5kOwotICAgICAgICAgICAgSm1wU3JjIG5vdEltbSA9IGl0ZXItPmZyb207Ci0g
ICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAg
ICAgIF9fIGFkZGxfaThyKGdldERlVGFnZ2VkQ29uc3RhbnRJbW1lZGlhdGUoSlNJbW1lZGlhdGU6
Om9uZUltbWVkaWF0ZSgpKSwgWDg2OjplYXgpOwotICAgICAgICAgICAgX18gbGluayhub3RJbW0s
IF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0g
ICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX3ByZV9kZWMpOwot
ICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOwotICAgICAgICAgICAg
aSArPSAyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9q
bmxlc3M6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IGluc3RydWN0aW9uW2kgKyAz
XS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBzcmMyaW1tID0gZ2V0Q29uc3RhbnRJ
bW1lZGlhdGVOdW1lcmljQXJnKGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQpOwotICAgICAg
ICAgICAgaWYgKHNyYzJpbW0pIHsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20s
IF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplZHgsIDAp
OwotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQsIDQsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgICAgICBl
bWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2psZXNzKTsKLSAgICAgICAgICAgICAg
ICBfXyB0ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgICAgIF9fIGxp
bmsoX18gamUoKSwgbV9sYWJlbHNbaSArIDMgKyB0YXJnZXRdKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAg
ICAgICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAg
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgICAgICBl
bWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA0KTsKLSAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChp
LCBJbnRlcnByZXRlcjo6Y3RpX29wX2psZXNzKTsKLSAgICAgICAgICAgICAgICBfXyB0ZXN0bF9y
cihYODY6OmVheCwgWDg2OjplYXgpOwotICAgICAgICAgICAgICAgIF9fIGxpbmsoX18gamUoKSwg
bV9sYWJlbHNbaSArIDMgKyB0YXJnZXRdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGkg
Kz0gNDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bfbm90
OiB7Ci0gICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAg
ICAgICAgX18geG9ybF9pOHIoSlNJbW1lZGlhdGU6OkZ1bGxUYWdUeXBlQm9vbCwgWDg2OjplYXgp
OwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBl
bWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX25vdCk7Ci0gICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQpOwotICAgICAg
ICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBvcF9qZmFsc2U6IHsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwo
KSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAg
IGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpjdGlfb3BfanRydWUpOwotICAgICAgICAgICAg
X18gdGVzdGxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHRh
cmdldCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBfXyBsaW5r
KF9fIGplKCksIG1fbGFiZWxzW2kgKyAyICsgdGFyZ2V0XSk7IC8vIGludmVydGVkIQotICAgICAg
ICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBvcF9wb3N0X2luYzogewotICAgICAgICAgICAgdW5zaWduZWQgc3JjRHN0ID0gaW5zdHJ1Y3Rp
b25baSArIDJdLnUub3BlcmFuZDsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18g
bGFiZWwoKSk7Ci0gICAgICAgICAgICBfXyBsaW5rKCgrK2l0ZXIpLT5mcm9tLCBfXyBsYWJlbCgp
KTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAg
ZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9wb3N0X2luYyk7Ci0gICAgICAgICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgWDg2OjplZHgpOwotICAgICAgICAgICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAg
ICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2Ugb3BfYml0bm90OiB7Ci0gICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxh
YmVsKCkpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAg
ICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2JpdG5vdCk7Ci0gICAgICAg
ICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQp
OwotICAgICAgICAgICAgaSArPSAzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBvcF9iaXRhbmQ6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNyYzEgPSBpbnN0
cnVjdGlvbltpICsgMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgdW5zaWduZWQgc3JjMiA9IGlu
c3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkc3QgPSBp
bnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgaWYgKGdldENvbnN0YW50
SW1tZWRpYXRlTnVtZXJpY0FyZyhzcmMxKSkgewotICAgICAgICAgICAgICAgIF9fIGxpbmsoaXRl
ci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21W
aXJ0dWFsUmVnaXN0ZXIoc3JjMSwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgICAgIGVtaXRQ
dXRDVElBcmcoWDg2OjplYXgsIDQpOwotICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIElu
dGVycHJldGVyOjpjdGlfb3BfYml0YW5kKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGdldENvbnN0YW50SW1tZWRp
YXRlTnVtZXJpY0FyZyhzcmMyKSkgewotICAgICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJv
bSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwg
MCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIoc3Jj
MiwgNCwgWDg2OjplY3gpOwotICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJl
dGVyOjpjdGlfb3BfYml0YW5kKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIF9fIGxpbmso
aXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zy
b21WaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgICAgIGVt
aXRQdXRDVElBcmcoWDg2OjplZHgsIDQpOwotICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGks
IEludGVycHJldGVyOjpjdGlfb3BfYml0YW5kKTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpICs9IDU7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2p0cnVlOiB7Ci0g
ICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAg
ZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJ
bnRlcnByZXRlcjo6Y3RpX29wX2p0cnVlKTsKLSAgICAgICAgICAgIF9fIHRlc3RsX3JyKFg4Njo6
ZWF4LCBYODY6OmVheCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBpbnN0cnVjdGlv
bltpICsgMl0udS5vcGVyYW5kOwotICAgICAgICAgICAgX18gbGluayhfXyBqbmUoKSwgbV9sYWJl
bHNbaSArIDIgKyB0YXJnZXRdKTsKLSAgICAgICAgICAgIGkgKz0gMzsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfcG9zdF9kZWM6IHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIHNyY0RzdCA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAgICAgX18gbGlu
aygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJn
KFg4Njo6ZWF4LCAwKTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpj
dGlfb3BfcG9zdF9kZWMpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNE
c3QsIFg4Njo6ZWR4KTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX2JpdHhvcjogewotICAgICAgICAg
ICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRQdXRD
VElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwg
NCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2JpdHhv
cik7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAx
XS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgaSArPSA1OwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9iaXRvcjogewotICAgICAgICAgICAgX18gbGluayhp
dGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2Ojpl
YXgsIDApOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVkeCwgNCk7Ci0gICAgICAg
ICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2JpdG9yKTsKLSAgICAgICAg
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7
Ci0gICAgICAgICAgICBpICs9IDU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIG9wX2VxOiB7Ci0gICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxh
YmVsKCkpOwotICAgICAgICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAg
ICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWR4LCA0KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxs
KGksIEludGVycHJldGVyOjpjdGlfb3BfZXEpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIGkgKz0g
NDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfbmVxOiB7
Ci0gICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAgICAg
ICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJn
KFg4Njo6ZWR4LCA0KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVyOjpj
dGlfb3BfbmVxKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rp
b25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBDVElfQ09NUElMRV9CSU5BUllfT1BfU0xPV19DQVNF
X0RPVUJMRV9FTlRSWShvcF9zdHJpY3RlcSk7Ci0gICAgICAgIENUSV9DT01QSUxFX0JJTkFSWV9P
UF9TTE9XX0NBU0VfRE9VQkxFX0VOVFJZKG9wX25zdHJpY3RlcSk7Ci0gICAgICAgIGNhc2Ugb3Bf
aW5zdGFuY2VvZjogewotICAgICAgICAgICAgX18gbGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgp
KTsKLSAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAg
ICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAg
ICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMl0udS5v
cGVyYW5kLCAwLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1
YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kLCA0LCBYODY6OmVjeCk7Ci0g
ICAgICAgICAgICBlbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltp
ICsgNF0udS5vcGVyYW5kLCA4LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBlbWl0Q1RJQ2FsbChp
LCBJbnRlcnByZXRlcjo6Y3RpX29wX2luc3RhbmNlb2YpOwotICAgICAgICAgICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAg
IGkgKz0gNTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3Bf
bW9kOiB7Ci0gICAgICAgICAgICBKbXBTcmMgbm90SW1tMSA9IGl0ZXItPmZyb207Ci0gICAgICAg
ICAgICBKbXBTcmMgbm90SW1tMiA9ICgrK2l0ZXIpLT5mcm9tOwotICAgICAgICAgICAgX18gbGlu
aygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAgICAgICAgICBlbWl0RmFzdEFyaXRo
UmVUYWdJbW1lZGlhdGUoWDg2OjplYXgpOwotICAgICAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFn
SW1tZWRpYXRlKFg4Njo6ZWN4KTsKLSAgICAgICAgICAgIF9fIGxpbmsobm90SW1tMSwgX18gbGFi
ZWwoKSk7Ci0gICAgICAgICAgICBfXyBsaW5rKG5vdEltbTIsIF9fIGxhYmVsKCkpOwotICAgICAg
ICAgICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMCk7Ci0gICAgICAgICAgICBlbWl0UHV0Q1RJ
QXJnKFg4Njo6ZWN4LCA0KTsKLSAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJldGVy
OjpjdGlfb3BfbW9kKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1
Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIG9wX211bDogewotICAgICAgICAgICAg
aW50IGRzdCA9IGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQg
c3JjMSA9IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgc3Jj
MiA9IGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBKU1ZhbHVlKiBz
cmMxVmFsdWUgPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmcoc3JjMSk7Ci0gICAgICAg
ICAgICBKU1ZhbHVlKiBzcmMyVmFsdWUgPSBnZXRDb25zdGFudEltbWVkaWF0ZU51bWVyaWNBcmco
c3JjMik7Ci0gICAgICAgICAgICBpbnQzMl90IHZhbHVlOwotICAgICAgICAgICAgaWYgKHNyYzFW
YWx1ZSAmJiAoKHZhbHVlID0gSlNJbW1lZGlhdGU6OmludFZhbHVlKHNyYzFWYWx1ZSkpID4gMCkp
IHsKLSAgICAgICAgICAgICAgICBfXyBsaW5rKGl0ZXItPmZyb20sIF9fIGxhYmVsKCkpOwotICAg
ICAgICAgICAgICAgIF9fIGxpbmsoKCsraXRlciktPmZyb20sIF9fIGxhYmVsKCkpOwotICAgICAg
ICAgICAgICAgIC8vIFRoZXJlIGlzIGFuIGV4dHJhIHNsb3cgY2FzZSBmb3IgKG9wMSAqIC1OKSBv
ciAoLU4gKiBvcDIpLCB0byBjaGVjayBmb3IgMCBzaW5jZSB0aGlzIHNob3VsZCBwcm9kdWNlIGEg
cmVzdWx0IG9mIC0wLgotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElBcmdGcm9tVmlydHVhbFJl
Z2lzdGVyKHNyYzEsIDAsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgICAgICBlbWl0UHV0Q1RJQXJn
RnJvbVZpcnR1YWxSZWdpc3RlcihzcmMyLCA0LCBYODY6OmVjeCk7Ci0gICAgICAgICAgICAgICAg
ZW1pdENUSUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF9tdWwpOwotICAgICAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3Jj
MlZhbHVlICYmICgodmFsdWUgPSBKU0ltbWVkaWF0ZTo6aW50VmFsdWUoc3JjMlZhbHVlKSkgPiAw
KSkgewotICAgICAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0g
ICAgICAgICAgICAgICAgX18gbGluaygoKytpdGVyKS0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0gICAg
ICAgICAgICAgICAgLy8gVGhlcmUgaXMgYW4gZXh0cmEgc2xvdyBjYXNlIGZvciAob3AxICogLU4p
IG9yICgtTiAqIG9wMiksIHRvIGNoZWNrIGZvciAwIHNpbmNlIHRoaXMgc2hvdWxkIHByb2R1Y2Ug
YSByZXN1bHQgb2YgLTAuCi0gICAgICAgICAgICAgICAgZW1pdFB1dENUSUFyZ0Zyb21WaXJ0dWFs
UmVnaXN0ZXIoc3JjMSwgMCwgWDg2OjplY3gpOwotICAgICAgICAgICAgICAgIGVtaXRQdXRDVElB
cmdGcm9tVmlydHVhbFJlZ2lzdGVyKHNyYzIsIDQsIFg4Njo6ZWN4KTsKLSAgICAgICAgICAgICAg
ICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX211bCk7Ci0gICAgICAgICAgICAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgY29tcGlsZUJpbmFyeUFyaXRoT3BTbG93Q2FzZShvcF9tdWwsIGl0ZXIsIGRz
dCwgc3JjMSwgc3JjMiwgT3BlcmFuZFR5cGVzOjpmcm9tSW50KGluc3RydWN0aW9uW2kgKyA0XS51
Lm9wZXJhbmQpLCBpKTsKLSAgICAgICAgICAgIGkgKz0gNTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBvcF9jYWxsOgotICAgICAgICBjYXNlIG9wX2NhbGxf
ZXZhbDoKLSAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6IHsKLSAgICAgICAgICAgIGludCBkc3Qg
PSBpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IGNhbGxlZSA9
IGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgYXJnQ291bnQg
PSBpbnN0cnVjdGlvbltpICsgM10udS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHJlZ2lzdGVy
T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25baSArIDRdLnUub3BlcmFuZDsKLQotICAgICAgICAgICAgX18g
bGluayhpdGVyLT5mcm9tLCBfXyBsYWJlbCgpKTsKLQotICAgICAgICAgICAgLy8gVGhlIGFyZ3Vt
ZW50cyBoYXZlIGJlZW4gc2V0IHVwIG9uIHRoZSBob3QgcGF0aCBmb3Igb3BfY2FsbF9ldmFsCi0g
ICAgICAgICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbCkKLSAgICAgICAgICAgICAgICBjb21w
aWxlT3BDYWxsU2V0dXBBcmdzKGluc3RydWN0aW9uICsgaSk7Ci0gICAgICAgICAgICBlbHNlIGlm
IChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QpCi0gICAgICAgICAgICAgICAgY29tcGlsZU9wQ29u
c3RydWN0U2V0dXBBcmdzKGluc3RydWN0aW9uICsgaSk7Ci0KLSAgICAgICAgICAgIC8vIEZhc3Qg
Y2hlY2sgZm9yIEpTIGZ1bmN0aW9uLgotICAgICAgICAgICAgX18gdGVzdGxfaTMycihKU0ltbWVk
aWF0ZTo6VGFnTWFzaywgWDg2OjplY3gpOwotICAgICAgICAgICAgSm1wU3JjIGNhbGxMaW5rRmFp
bE5vdE9iamVjdCA9IF9fIGpuZSgpOwotICAgICAgICAgICAgX18gY21wbF9pMzJtKHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQ+KG1faW50ZXJwcmV0ZXItPm1fanNGdW5jdGlvblZwdHIpLCBYODY6
OmVjeCk7Ci0gICAgICAgICAgICBKbXBTcmMgY2FsbExpbmtGYWlsTm90SlNGdW5jdGlvbiA9IF9f
IGpuZSgpOwotCi0gICAgICAgICAgICAvLyBGaXJzdCwgaW4gdGhlIGNhc2Ugb2YgYSBjb25zdHJ1
Y3QsIGFsbG9jYXRlIHRoZSBuZXcgb2JqZWN0LgotICAgICAgICAgICAgaWYgKG9wY29kZUlEID09
IG9wX2NvbnN0cnVjdCkgewotICAgICAgICAgICAgICAgIGVtaXRDVElDYWxsKGksIEludGVycHJl
dGVyOjpjdGlfb3BfY29uc3RydWN0X0pTQ29uc3RydWN0KTsKLSAgICAgICAgICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0IC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJh
bWVIZWFkZXJTaXplIC0gYXJnQ291bnQpOwotICAgICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoY2FsbGVlLCBYODY6OmVjeCwgaSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIF9fIG1vdmxfaTMycihhcmdDb3VudCwgWDg2OjplZHgpOwotCi0gICAgICAgICAgICAvLyBT
cGVjdWxhdGl2ZWx5IHJvbGwgdGhlIGNhbGxmcmFtZSwgYXNzdW1pbmcgYXJnQ291bnQgd2lsbCBt
YXRjaCB0aGUgYXJpdHkuCi0gICAgICAgICAgICBfXyBtb3ZsX3JtKFg4Njo6ZWRpLCAoUmVnaXN0
ZXJGaWxlOjpDYWxsZXJGcmFtZSArIHJlZ2lzdGVyT2Zmc2V0KSAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSksIFg4Njo6ZWRpKTsKLSAgICAgICAgICAgIF9fIGFkZGxfaTMycihy
ZWdpc3Rlck9mZnNldCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSksIFg4Njo6
ZWRpKTsKLQotICAgICAgICAgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tj
YWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0KLSAgICAgICAgICAgICAgICBl
bWl0TmFrZWRDYWxsKGksIG1faW50ZXJwcmV0ZXItPm1fY3RpVmlydHVhbENhbGxQcmVMaW5rKTsK
LQotICAgICAgICAgICAgSm1wU3JjIHN0b3JlUmVzdWx0Rm9yRmlyc3RSdW4gPSBfXyBqbXAoKTsK
LQotICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgYWRkcmVzcyBmb3IgdGhlIGNvbGQgcGF0aCAq
YWZ0ZXIqIHRoZSBmaXJzdCBydW4gKHdoaWNoIHRyaWVzIHRvIGxpbmsgdGhlIGNhbGwpLgotICAg
ICAgICAgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9J
bmRleF0uY29sZFBhdGhPdGhlciA9IF9fIGxhYmVsKCk7Ci0KLSAgICAgICAgICAgIC8vIFRoZSBh
cmd1bWVudHMgaGF2ZSBiZWVuIHNldCB1cCBvbiB0aGUgaG90IHBhdGggZm9yIG9wX2NhbGxfZXZh
bAotICAgICAgICAgICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGwpCi0gICAgICAgICAgICAgICAg
Y29tcGlsZU9wQ2FsbFNldHVwQXJncyhpbnN0cnVjdGlvbiArIGkpOwotICAgICAgICAgICAgZWxz
ZSBpZiAob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0KQotICAgICAgICAgICAgICAgIGNvbXBpbGVP
cENvbnN0cnVjdFNldHVwQXJncyhpbnN0cnVjdGlvbiArIGkpOwotCi0gICAgICAgICAgICAvLyBD
aGVjayBmb3IgSlNGdW5jdGlvbnMuCi0gICAgICAgICAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRp
YXRlOjpUYWdNYXNrLCBYODY6OmVjeCk7Ci0gICAgICAgICAgICBKbXBTcmMgaXNOb3RPYmplY3Qg
PSBfXyBqbmUoKTsKLSAgICAgICAgICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVu
c2lnbmVkPihtX2ludGVycHJldGVyLT5tX2pzRnVuY3Rpb25WcHRyKSwgWDg2OjplY3gpOwotICAg
ICAgICAgICAgSm1wU3JjIGlzSlNGdW5jdGlvbiA9IF9fIGplKCk7Ci0KLSAgICAgICAgICAgIC8v
IFRoaXMgaGFuZGxlcyBob3N0IGZ1bmN0aW9ucwotICAgICAgICAgICAgSm1wRHN0IG5vdEpTRnVu
Y3Rpb25sYWJlbCA9IF9fIGxhYmVsKCk7Ci0gICAgICAgICAgICBfXyBsaW5rKGlzTm90T2JqZWN0
LCBub3RKU0Z1bmN0aW9ubGFiZWwpOwotICAgICAgICAgICAgX18gbGluayhjYWxsTGlua0ZhaWxO
b3RPYmplY3QsIG5vdEpTRnVuY3Rpb25sYWJlbCk7Ci0gICAgICAgICAgICBfXyBsaW5rKGNhbGxM
aW5rRmFpbE5vdEpTRnVuY3Rpb24sIG5vdEpTRnVuY3Rpb25sYWJlbCk7Ci0gICAgICAgICAgICBl
bWl0Q1RJQ2FsbChpLCAoKG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCkgPyBJbnRlcnByZXRlcjo6
Y3RpX29wX2NvbnN0cnVjdF9Ob3RKU0NvbnN0cnVjdCA6IEludGVycHJldGVyOjpjdGlfb3BfY2Fs
bF9Ob3RKU0Z1bmN0aW9uKSk7Ci0gICAgICAgICAgICBKbXBTcmMgd2FzTm90SlNGdW5jdGlvbiA9
IF9fIGptcCgpOwotCi0gICAgICAgICAgICAvLyBOZXh0LCBoYW5kbGUgSlNGdW5jdGlvbnMuLi4K
LSAgICAgICAgICAgIF9fIGxpbmsoaXNKU0Z1bmN0aW9uLCBfXyBsYWJlbCgpKTsKLQotICAgICAg
ICAgICAgLy8gRmlyc3QsIGluIHRoZSBjYXNlIG9mIGEgY29uc3RydWN0LCBhbGxvY2F0ZSB0aGUg
bmV3IG9iamVjdC4KLSAgICAgICAgICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QpIHsK
LSAgICAgICAgICAgICAgICBlbWl0Q1RJQ2FsbChpLCBJbnRlcnByZXRlcjo6Y3RpX29wX2NvbnN0
cnVjdF9KU0NvbnN0cnVjdCk7Ci0gICAgICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihyZWdpc3Rlck9mZnNldCAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIGFy
Z0NvdW50KTsKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwg
WDg2OjplY3gsIGkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBTcGVjdWxhdGl2
ZWx5IHJvbGwgdGhlIGNhbGxmcmFtZSwgYXNzdW1pbmcgYXJnQ291bnQgd2lsbCBtYXRjaCB0aGUg
YXJpdHkuCi0gICAgICAgICAgICBfXyBtb3ZsX3JtKFg4Njo6ZWRpLCAoUmVnaXN0ZXJGaWxlOjpD
YWxsZXJGcmFtZSArIHJlZ2lzdGVyT2Zmc2V0KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSksIFg4Njo6ZWRpKTsKLSAgICAgICAgICAgIF9fIGFkZGxfaTMycihyZWdpc3Rlck9m
ZnNldCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSksIFg4Njo6ZWRpKTsKLSAg
ICAgICAgICAgIF9fIG1vdmxfaTMycihhcmdDb3VudCwgWDg2OjplZHgpOwotCi0gICAgICAgICAg
ICBlbWl0TmFrZWRDYWxsKGksIG1faW50ZXJwcmV0ZXItPm1fY3RpVmlydHVhbENhbGwpOwotCi0g
ICAgICAgICAgICAvLyBQdXQgdGhlIHJldHVybiB2YWx1ZSBpbiBkc3QuIEluIHRoZSBpbnRlcnBy
ZXRlciwgb3BfcmV0IGRvZXMgdGhpcy4KLSAgICAgICAgICAgIEptcERzdCBzdG9yZVJlc3VsdCA9
IF9fIGxhYmVsKCk7Ci0gICAgICAgICAgICBfXyBsaW5rKHdhc05vdEpTRnVuY3Rpb24sIHN0b3Jl
UmVzdWx0KTsKLSAgICAgICAgICAgIF9fIGxpbmsoc3RvcmVSZXN1bHRGb3JGaXJzdFJ1biwgc3Rv
cmVSZXN1bHQpOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCi0j
aWYgRU5BQkxFKENPREVCTE9DS19TQU1QTElORykKLSAgICAgICAgICAgIF9fIG1vdmxfaTMybShy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jayksIG1faW50ZXJwcmV0ZXItPnNh
bXBsZXIoKS0+Y29kZUJsb2NrU2xvdCgpKTsKLSNlbmRpZgotICAgICAgICAgICAgKytjYWxsTGlu
a0luZm9JbmRleDsKLQotICAgICAgICAgICAgaSArPSAob3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0
ID8gNyA6IDUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBv
cF90b19qc251bWJlcjogewotICAgICAgICAgICAgaWYgKGxpbmtTbG93Q2FzZUlmTm90SlNDZWxs
KGl0ZXIsIGluc3RydWN0aW9uW2kgKyAyXS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgICAgICsr
aXRlcjsKLSAgICAgICAgICAgIF9fIGxpbmsoaXRlci0+ZnJvbSwgX18gbGFiZWwoKSk7Ci0KLSAg
ICAgICAgICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDApOwotICAgICAgICAgICAgZW1pdENU
SUNhbGwoaSwgSW50ZXJwcmV0ZXI6OmN0aV9vcF90b19qc251bWJlcik7Ci0KLSAgICAgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoaW5zdHJ1Y3Rpb25baSArIDFdLnUub3BlcmFuZCk7Ci0g
ICAgICAgICAgICBpICs9IDM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSgoaXRl
ciArIDEpID09IG1fc2xvd0Nhc2VzLmVuZCgpIHx8IGZpcnN0VG8gIT0gKGl0ZXIgKyAxKS0+dG8s
Ik5vdCBlbm91Z2gganVtcHMgbGlua2VkIGluIHNsb3cgY2FzZSBjb2RlZ2VuLiIpOwotICAgICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZpcnN0VG8gPT0gaXRlci0+dG8sICJUb28gbWFueSBqdW1w
cyBsaW5rZWQgaW4gc2xvdyBjYXNlIGNvZGVnZW4uIik7Ci0KLSAgICAgICAgX18gbGluayhfXyBq
bXAoKSwgbV9sYWJlbHNbaV0pOwotICAgIH0KLQotICAgIEFTU0VSVChwcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uSW5kZXggPT0gbV9jb2RlQmxvY2stPnByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25z
LnNpemUoKSk7Ci0gICAgQVNTRVJUKGNhbGxMaW5rSW5mb0luZGV4ID09IG1fY29kZUJsb2NrLT5j
YWxsTGlua0luZm9zLnNpemUoKSk7Ci19Ci0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZSgpCi17
Ci0jaWYgRU5BQkxFKENPREVCTE9DS19TQU1QTElORykKLSAgICAgICAgX18gbW92bF9pMzJtKHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG1fY29kZUJsb2NrKSwgbV9pbnRlcnByZXRlci0+c2Ft
cGxlcigpLT5jb2RlQmxvY2tTbG90KCkpOwotI2VuZGlmCi0jaWYgRU5BQkxFKE9QQ09ERV9TQU1Q
TElORykKLSAgICAgICAgX18gbW92bF9pMzJtKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5j
b2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSksIG1faW50ZXJwcmV0
ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKLSNlbmRpZgotCi0gICAgLy8gQ291bGQgdXNl
IGEgcG9wbF9tLCBidXQgd291bGQgbmVlZCB0byBvZmZzZXQgdGhlIGZvbGxvd2luZyBpbnN0cnVj
dGlvbiBpZiBzby4KLSAgICBfXyBwb3BsX3IoWDg2OjplY3gpOwotICAgIGVtaXRQdXRUb0NhbGxG
cmFtZUhlYWRlcihYODY6OmVjeCwgUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQyk7Ci0KLSAgICBKbXBT
cmMgc2xvd1JlZ2lzdGVyRmlsZUNoZWNrOwotICAgIEptcERzdCBhZnRlclJlZ2lzdGVyRmlsZUNo
ZWNrOwotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUgPT0gRnVuY3Rpb25Db2RlKSB7Ci0g
ICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgZmFzdCBsaW5rZWQgY2FsbCwgd2UgZG8gbm90IHNl
dCB0aGlzIHVwIGluIHRoZSBjYWxsZXIuCi0gICAgICAgIF9fIG1vdmxfaTMybShyZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkPihtX2NvZGVCbG9jayksIFJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrICog
c3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSwgWDg2OjplZGkpOwotCi0gICAgICAg
IGVtaXRHZXRDVElQYXJhbShDVElfQVJHU19yZWdpc3RlckZpbGUsIFg4Njo6ZWF4KTsKLSAgICAg
ICAgX18gbGVhbF9tcihtX2NvZGVCbG9jay0+bnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJl
Z2lzdGVyKSwgWDg2OjplZGksIFg4Njo6ZWR4KTsKLSAgICAgICAgX18gY21wbF9tcihGSUVMRF9P
RkZTRVQoUmVnaXN0ZXJGaWxlLCBtX2VuZCksIFg4Njo6ZWF4LCBYODY6OmVkeCk7Ci0gICAgICAg
IHNsb3dSZWdpc3RlckZpbGVDaGVjayA9IF9fIGpnKCk7Ci0gICAgICAgIGFmdGVyUmVnaXN0ZXJG
aWxlQ2hlY2sgPSBfXyBsYWJlbCgpOwotICAgIH0KLQotICAgIHByaXZhdGVDb21waWxlTWFpblBh
c3MoKTsKLSAgICBwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCk7Ci0gICAgcHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKTsKLQotICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUgPT0gRnVuY3Rpb25D
b2RlKSB7Ci0gICAgICAgIF9fIGxpbmsoc2xvd1JlZ2lzdGVyRmlsZUNoZWNrLCBfXyBsYWJlbCgp
KTsKLSAgICAgICAgZW1pdENUSUNhbGwoMCwgSW50ZXJwcmV0ZXI6OmN0aV9yZWdpc3Rlcl9maWxl
X2NoZWNrKTsKLSAgICAgICAgSm1wU3JjIGJhY2tUb0JvZHkgPSBfXyBqbXAoKTsKLSAgICAgICAg
X18gbGluayhiYWNrVG9Cb2R5LCBhZnRlclJlZ2lzdGVyRmlsZUNoZWNrKTsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQobV9qbXBUYWJsZS5pc0VtcHR5KCkpOwotCi0gICAgdm9pZCogY29kZSA9IF9fIGV4
ZWN1dGFibGVDb3B5KCk7Ci0KLSAgICAvLyBUcmFuc2xhdGUgdlBDIG9mZnNldHMgaW50byBhZGRy
ZXNzZXMgaW4gSklUIGdlbmVyYXRlZCBjb2RlLCBmb3Igc3dpdGNoIHRhYmxlcy4KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zd2l0Y2hlcy5zaXplKCk7ICsraSkgewotICAgICAgICBT
d2l0Y2hSZWNvcmQgcmVjb3JkID0gbV9zd2l0Y2hlc1tpXTsKLSAgICAgICAgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCA9IHJlY29yZC5ieXRlY29kZUluZGV4OwotCi0gICAgICAgIGlmIChyZWNvcmQu
dHlwZSAhPSBTd2l0Y2hSZWNvcmQ6OlN0cmluZykgewotICAgICAgICAgICAgQVNTRVJUKHJlY29y
ZC50eXBlID09IFN3aXRjaFJlY29yZDo6SW1tZWRpYXRlIHx8IHJlY29yZC50eXBlID09IFN3aXRj
aFJlY29yZDo6Q2hhcmFjdGVyKTsgCi0gICAgICAgICAgICBBU1NFUlQocmVjb3JkLmp1bXBUYWJs
ZS5zaW1wbGVKdW1wVGFibGUtPmJyYW5jaE9mZnNldHMuc2l6ZSgpID09IHJlY29yZC5qdW1wVGFi
bGUuc2ltcGxlSnVtcFRhYmxlLT5jdGlPZmZzZXRzLnNpemUoKSk7Ci0KLSAgICAgICAgICAgIHJl
Y29yZC5qdW1wVGFibGUuc2ltcGxlSnVtcFRhYmxlLT5jdGlEZWZhdWx0ID0gX18gZ2V0UmVsb2Nh
dGVkQWRkcmVzcyhjb2RlLCBtX2xhYmVsc1tieXRlY29kZUluZGV4ICsgMyArIHJlY29yZC5kZWZh
dWx0T2Zmc2V0XSk7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCByZWNv
cmQuanVtcFRhYmxlLnNpbXBsZUp1bXBUYWJsZS0+YnJhbmNoT2Zmc2V0cy5zaXplKCk7ICsraikg
ewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHJlY29yZC5qdW1wVGFibGUuc2lt
cGxlSnVtcFRhYmxlLT5icmFuY2hPZmZzZXRzW2pdOwotICAgICAgICAgICAgICAgIHJlY29yZC5q
dW1wVGFibGUuc2ltcGxlSnVtcFRhYmxlLT5jdGlPZmZzZXRzW2pdID0gb2Zmc2V0ID8gX18gZ2V0
UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX2xhYmVsc1tieXRlY29kZUluZGV4ICsgMyArIG9mZnNl
dF0pIDogcmVjb3JkLmp1bXBUYWJsZS5zaW1wbGVKdW1wVGFibGUtPmN0aURlZmF1bHQ7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQocmVjb3JkLnR5
cGUgPT0gU3dpdGNoUmVjb3JkOjpTdHJpbmcpOwotCi0gICAgICAgICAgICByZWNvcmQuanVtcFRh
YmxlLnN0cmluZ0p1bXBUYWJsZS0+Y3RpRGVmYXVsdCA9IF9fIGdldFJlbG9jYXRlZEFkZHJlc3Mo
Y29kZSwgbV9sYWJlbHNbYnl0ZWNvZGVJbmRleCArIDMgKyByZWNvcmQuZGVmYXVsdE9mZnNldF0p
OwotCi0gICAgICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVy
YXRvciBlbmQgPSByZWNvcmQuanVtcFRhYmxlLnN0cmluZ0p1bXBUYWJsZS0+b2Zmc2V0VGFibGUu
ZW5kKCk7ICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKFN0cmluZ0p1bXBUYWJsZTo6U3Ry
aW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGl0ID0gcmVjb3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1w
VGFibGUtPm9mZnNldFRhYmxlLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IGl0LT5zZWNvbmQuYnJhbmNoT2Zmc2V0OwotICAgICAg
ICAgICAgICAgIGl0LT5zZWNvbmQuY3RpT2Zmc2V0ID0gb2Zmc2V0ID8gX18gZ2V0UmVsb2NhdGVk
QWRkcmVzcyhjb2RlLCBtX2xhYmVsc1tieXRlY29kZUluZGV4ICsgMyArIG9mZnNldF0pIDogcmVj
b3JkLmp1bXBUYWJsZS5zdHJpbmdKdW1wVGFibGUtPmN0aURlZmF1bHQ7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKFZlY3RvcjxIYW5kbGVySW5mbz46Oml0ZXJh
dG9yIGl0ZXIgPSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcnMuYmVnaW4oKTsgaXRlciAh
PSBtX2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcnMuZW5kKCk7ICsraXRlcikKLSAgICAgICAg
IGl0ZXItPm5hdGl2ZUNvZGUgPSBfXyBnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIG1fbGFiZWxz
W2l0ZXItPnRhcmdldF0pOwotCi0gICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9y
IGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7
Ci0gICAgICAgIGlmIChpdGVyLT50bykKLSAgICAgICAgICAgIFg4NkFzc2VtYmxlcjo6bGluayhj
b2RlLCBpdGVyLT5mcm9tLCBpdGVyLT50byk7Ci0gICAgICAgIG1fY29kZUJsb2NrLT5jdGlSZXR1
cm5BZGRyZXNzVlBDTWFwLmFkZChfXyBnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIGl0ZXItPmZy
b20pLCBpdGVyLT5ieXRlY29kZUluZGV4KTsKLSAgICB9Ci0KLSAgICAvLyBMaW5rIGFic29sdXRl
IGFkZHJlc3NlcyBmb3IganNyCi0gICAgZm9yIChWZWN0b3I8SlNSSW5mbz46Oml0ZXJhdG9yIGl0
ZXIgPSBtX2pzclNpdGVzLmJlZ2luKCk7IGl0ZXIgIT0gbV9qc3JTaXRlcy5lbmQoKTsgKytpdGVy
KQotICAgICAgICBYODZBc3NlbWJsZXI6OmxpbmtBYnNvbHV0ZUFkZHJlc3MoY29kZSwgaXRlci0+
YWRkclBvc2l0aW9uLCBpdGVyLT50YXJnZXQpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fY29kZUJsb2NrLT5wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9ucy5zaXplKCk7ICsraSkg
ewotICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5wcm9wZXJ0
eUFjY2Vzc0luc3RydWN0aW9uc1tpXTsKLSAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24g
PSBYODZBc3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9wcm9wZXJ0eUFjY2Vz
c0NvbXBpbGF0aW9uSW5mb1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pOwotICAgICAgICBpbmZvLmhv
dFBhdGhCZWdpbiA9IFg4NkFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX3By
b3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhCZWdpbik7Ci0gICAgfQotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvcy5zaXpl
KCk7ICsraSkgewotICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Y2Fs
bExpbmtJbmZvc1tpXTsKLSAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBYODZBc3Nl
bWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBp
bGF0aW9uSW5mb1tpXS5jYWxsUmV0dXJuTG9jYXRpb24pOwotICAgICAgICBpbmZvLmhvdFBhdGhC
ZWdpbiA9IFg4NkFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBtX2NhbGxTdHJ1
Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2ldLmhvdFBhdGhCZWdpbik7Ci0gICAgICAgIGluZm8u
aG90UGF0aE90aGVyID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIG1f
Y2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uaG90UGF0aE90aGVyKTsKLSAgICAg
ICAgaW5mby5jb2xkUGF0aE90aGVyID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNz
KGNvZGUsIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9baV0uY29sZFBhdGhPdGhl
cik7Ci0gICAgfQotCi0gICAgbV9jb2RlQmxvY2stPmN0aUNvZGUgPSBjb2RlOwotfQotCi12b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6
ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVzcykKLXsKLSAgICAvLyBDaGVjayBl
YXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCi0gICAgX18gdGVzdGxfaTMy
cihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOwotICAgIEptcFNyYyBmYWlsdXJlQ2Fz
ZXMxID0gX18gam5lKCk7Ci0gICAgSm1wU3JjIGZhaWx1cmVDYXNlczIgPSBjaGVja1N0cnVjdHVy
ZShYODY6OmVheCwgc3RydWN0dXJlKTsKLQotICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBnZXRE
aXJlY3RPZmZzZXQKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU09iamVjdCwgbV9wcm9w
ZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplYXgpOwotICAgIF9fIG1vdmxfbXIoY2FjaGVk
T2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBfXyBy
ZXQoKTsKLQotICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29weSgpOwotCi0gICAgWDg2
QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczEsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3NlbGZfZmFpbCkpOwotICAgIFg4NkFz
c2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMyLCByZWludGVycHJldF9jYXN0PHZvaWQq
PihJbnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9zZWxmX2ZhaWwpKTsKLSAgICAKLSAgICBt
X2NvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVzcykuc3R1YlJvdXRpbmUgPSBjb2Rl
OwotICAgIAotICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3Ms
IGNvZGUpOwotfQotCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBzaXplX3QgY2Fj
aGVkT2Zmc2V0LCB2b2lkKiByZXR1cm5BZGRyZXNzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsK
LSNpZiBVU0UoQ1RJX1JFUEFUQ0hfUElDKQotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZvID0g
bV9jb2RlQmxvY2stPmdldFN0dWJJbmZvKHJldHVybkFkZHJlc3MpOwotCi0gICAgLy8gV2UgZG9u
J3Qgd2FudCB0byByZXBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9v
cF9wdXRfYnlfaWRfZ2VuZXJpYy4KLSAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhy
ZXR1cm5BZGRyZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29w
X2dldF9ieV9pZF9wcm90b19saXN0KSk7Ci0KLSAgICAvLyBUaGUgcHJvdG90eXBlIG9iamVjdCBk
ZWZpbml0ZWx5IGV4aXN0cyAoaWYgdGhpcyBzdHViIGV4aXN0cyB0aGUgQ29kZUJsb2NrIGlzIHJl
ZmVyZW5jaW5nIGEgU3RydWN0dXJlIHRoYXQgaXMKLSAgICAvLyByZWZlcmVuY2luZyB0aGUgcHJv
dG90eXBlIG9iamVjdCAtIGxldCdzIHNwZWN1bGF0aXZlbHkgbG9hZCBpdCdzIHRhYmxlIG5pY2Ug
YW5kIGVhcmx5ISkKLSAgICBKU09iamVjdCogcHJvdG9PYmplY3QgPSBhc09iamVjdChzdHJ1Y3R1
cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKLSAgICBQcm9wZXJ0eVN0b3JhZ2Uq
IHByb3RvUHJvcGVydHlTdG9yYWdlID0gJnByb3RvT2JqZWN0LT5tX3Byb3BlcnR5U3RvcmFnZTsK
LSAgICBfXyBtb3ZsX21yKHN0YXRpY19jYXN0PHZvaWQqPihwcm90b1Byb3BlcnR5U3RvcmFnZSks
IFg4Njo6ZWR4KTsKLQotICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0
IFN0cnVjdHVyZS4KLSAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMSA9IGNoZWNrU3RydWN0dXJlKFg4
Njo6ZWF4LCBzdHJ1Y3R1cmUpOwotCi0gICAgLy8gQ2hlY2sgdGhlIHByb3RvdHlwZSBvYmplY3Qn
cyBTdHJ1Y3R1cmUgaGFkIG5vdCBjaGFuZ2VkLgotICAgIFN0cnVjdHVyZSoqIHByb3RvdHlwZVN0
cnVjdHVyZUFkZHJlc3MgPSAmKHByb3RvT2JqZWN0LT5tX3N0cnVjdHVyZSk7Ci0gICAgX18gY21w
bF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KHByb3RvdHlwZVN0cnVjdHVyZSksIHBy
b3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MpOwotICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMyID0gX18g
am5lKCk7Ci0KLSAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0RGlyZWN0T2Zmc2V0Ci0gICAg
X18gbW92bF9tcihjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopLCBYODY6OmVkeCwgWDg2
OjplYXgpOwotCi0gICAgSm1wU3JjIHN1Y2Nlc3MgPSBfXyBqbXAoKTsKLQotICAgIHZvaWQqIGNv
ZGUgPSBfXyBleGVjdXRhYmxlQ29weSgpOwotCi0gICAgLy8gVXNlIHRoZSByZXBhdGNoIGluZm9y
bWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xv
dyBjYXNlIHJvdXRpbmUuCi0gICAgdm9pZCogc2xvd0Nhc2VCZWdpbiA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGluZm8uY2FsbFJldHVybkxvY2F0aW9uKSAtIHJlcGF0Y2hPZmZzZXRHZXRCeUlk
U2xvd0Nhc2VDYWxsOwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMx
LCBzbG93Q2FzZUJlZ2luKTsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNh
c2VzMiwgc2xvd0Nhc2VCZWdpbik7Ci0KLSAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRv
IHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3Jl
IHRvIGRlc3QgZm9yIHVzLgotICAgIGludHB0cl90IHN1Y2Nlc3NEZXN0ID0gcmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRQ
cm9wZXJ0eU1hcE9mZnNldDsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgc3VjY2Vzcywg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3VjY2Vzc0Rlc3QpKTsKLQotICAgIC8vIFRyYWNrIHRo
ZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4K
LSAgICBpbmZvLnN0dWJSb3V0aW5lID0gY29kZTsKLQotICAgIC8vIEZpbmFsbHkgcmVwYXRjaCB0
aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGlu
c3RlYWQuCi0gICAgaW50cHRyX3Qgam1wTG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGludHB0
cl90PihpbmZvLmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xv
d0Nhc2U7Ci0gICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoQnJhbmNoT2Zmc2V0KGptcExvY2F0aW9u
LCBjb2RlKTsKLSNlbHNlCi0gICAgLy8gVGhlIHByb3RvdHlwZSBvYmplY3QgZGVmaW5pdGVseSBl
eGlzdHMgKGlmIHRoaXMgc3R1YiBleGlzdHMgdGhlIENvZGVCbG9jayBpcyByZWZlcmVuY2luZyBh
IFN0cnVjdHVyZSB0aGF0IGlzCi0gICAgLy8gcmVmZXJlbmNpbmcgdGhlIHByb3RvdHlwZSBvYmpl
Y3QgLSBsZXQncyBzcGVjdWxhdGl2ZWx5IGxvYWQgaXQncyB0YWJsZSBuaWNlIGFuZCBlYXJseSEp
Ci0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gYXNPYmplY3Qoc3RydWN0dXJlLT5wcm90b3R5
cGVGb3JMb29rdXAoY2FsbEZyYW1lKSk7Ci0gICAgUHJvcGVydHlTdG9yYWdlKiBwcm90b1Byb3Bl
cnR5U3RvcmFnZSA9ICZwcm90b09iamVjdC0+bV9wcm9wZXJ0eVN0b3JhZ2U7Ci0gICAgX18gbW92
bF9tcihzdGF0aWNfY2FzdDx2b2lkKj4ocHJvdG9Qcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVkeCk7
Ci0KLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUu
Ci0gICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOwotICAg
IEptcFNyYyBmYWlsdXJlQ2FzZXMxID0gX18gam5lKCk7Ci0gICAgSm1wU3JjIGZhaWx1cmVDYXNl
czIgPSBjaGVja1N0cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJlKTsKLQotICAgIC8vIENoZWNr
IHRoZSBwcm90b3R5cGUgb2JqZWN0J3MgU3RydWN0dXJlIGhhZCBub3QgY2hhbmdlZC4KLSAgICBT
dHJ1Y3R1cmUqKiBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzID0gJihwcm90b09iamVjdC0+bV9z
dHJ1Y3R1cmUpOwotICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihw
cm90b3R5cGVTdHJ1Y3R1cmUpLCBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzKTsKLSAgICBKbXBT
cmMgZmFpbHVyZUNhc2VzMyA9IF9fIGpuZSgpOwotCi0gICAgLy8gQ2hlY2tzIG91dCBva2F5ISAt
IGdldERpcmVjdE9mZnNldAotICAgIF9fIG1vdmxfbXIoY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpT
VmFsdWUqKSwgWDg2OjplZHgsIFg4Njo6ZWF4KTsKLQotICAgIF9fIHJldCgpOwotCi0gICAgdm9p
ZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7Ci0KLSAgICBYODZBc3NlbWJsZXI6Omxpbmso
Y29kZSwgZmFpbHVyZUNhc2VzMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6
OmN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fZmFpbCkpOwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhj
b2RlLCBmYWlsdXJlQ2FzZXMyLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6
Y3RpX29wX2dldF9ieV9pZF9wcm90b19mYWlsKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNv
ZGUsIGZhaWx1cmVDYXNlczMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpj
dGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwpKTsKLQotICAgIG1fY29kZUJsb2NrLT5nZXRTdHVi
SW5mbyhyZXR1cm5BZGRyZXNzKS5zdHViUm91dGluZSA9IGNvZGU7Ci0KLSAgICBjdGlSZXBhdGNo
Q2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBjb2RlKTsKLSNlbmRpZgotfQotCi0j
aWYgVVNFKENUSV9SRVBBVENIX1BJQykKLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRT
ZWxmTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCkKLXsKLSAgICBKbXBTcmMgZmFp
bHVyZUNhc2UgPSBjaGVja1N0cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJlKTsKLSAgICBfXyBt
b3ZsX21yKEZJRUxEX09GRlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVh
eCwgWDg2OjplYXgpOwotICAgIF9fIG1vdmxfbXIoY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFs
dWUqKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgc3VjY2VzcyA9IF9fIGptcCgp
OwotCi0gICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7Ci0gICAgQVNTRVJUKGNv
ZGUpOwotCi0gICAgLy8gVXNlIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZh
aWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAg
dm9pZCogbGFzdFByb3RvQmVnaW4gPSBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVu
dEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7Ci0gICAgaWYgKCFsYXN0UHJvdG9CZWdpbikKLSAgICAg
ICAgbGFzdFByb3RvQmVnaW4gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihzdHViSW5mby0+Y2Fs
bFJldHVybkxvY2F0aW9uKSAtIHJlcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsOwotCi0g
ICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlLCBsYXN0UHJvdG9CZWdpbik7
Ci0KLSAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwg
YXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgotICAg
IGludHB0cl90IHN1Y2Nlc3NEZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3R1Yklu
Zm8tPmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0
OwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBzdWNjZXNzLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihzdWNjZXNzRGVzdCkpOwotCi0gICAgc3RydWN0dXJlLT5yZWYoKTsKLSAgICBwb2x5
bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FjaGVkT2Zmc2V0LCBj
b2RlLCBzdHJ1Y3R1cmUpOwotCi0gICAgLy8gRmluYWxseSByZXBhdGNoIHRoZSBqdW1wIHRvIHNs
b3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KLSAgICBp
bnRwdHJfdCBqbXBMb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHN0dWJJbmZv
LT5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlOwot
ICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaEJyYW5jaE9mZnNldChqbXBMb2NhdGlvbiwgY29kZSk7
Ci19Ci0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QoU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3Rv
dHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBT
dHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgLy8gVGhlIHByb3RvdHlwZSBvYmplY3QgZGVmaW5pdGVs
eSBleGlzdHMgKGlmIHRoaXMgc3R1YiBleGlzdHMgdGhlIENvZGVCbG9jayBpcyByZWZlcmVuY2lu
ZyBhIFN0cnVjdHVyZSB0aGF0IGlzCi0gICAgLy8gcmVmZXJlbmNpbmcgdGhlIHByb3RvdHlwZSBv
YmplY3QgLSBsZXQncyBzcGVjdWxhdGl2ZWx5IGxvYWQgaXQncyB0YWJsZSBuaWNlIGFuZCBlYXJs
eSEpCi0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gYXNPYmplY3Qoc3RydWN0dXJlLT5wcm90
b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKSk7Ci0gICAgUHJvcGVydHlTdG9yYWdlKiBwcm90b1By
b3BlcnR5U3RvcmFnZSA9ICZwcm90b09iamVjdC0+bV9wcm9wZXJ0eVN0b3JhZ2U7Ci0gICAgX18g
bW92bF9tcihzdGF0aWNfY2FzdDx2b2lkKj4ocHJvdG9Qcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVk
eCk7Ci0KLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1
cmUuCi0gICAgSm1wU3JjIGZhaWx1cmVDYXNlczEgPSBjaGVja1N0cnVjdHVyZShYODY6OmVheCwg
c3RydWN0dXJlKTsKLQotICAgIC8vIENoZWNrIHRoZSBwcm90b3R5cGUgb2JqZWN0J3MgU3RydWN0
dXJlIGhhZCBub3QgY2hhbmdlZC4KLSAgICBTdHJ1Y3R1cmUqKiBwcm90b3R5cGVTdHJ1Y3R1cmVB
ZGRyZXNzID0gJihwcm90b09iamVjdC0+bV9zdHJ1Y3R1cmUpOwotICAgIF9fIGNtcGxfaTMybShy
ZWludGVycHJldF9jYXN0PHVpbnQzMl90Pihwcm90b3R5cGVTdHJ1Y3R1cmUpLCBwcm90b3R5cGVT
dHJ1Y3R1cmVBZGRyZXNzKTsKLSAgICBKbXBTcmMgZmFpbHVyZUNhc2VzMiA9IF9fIGpuZSgpOwot
Ci0gICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldERpcmVjdE9mZnNldAotICAgIF9fIG1vdmxf
bXIoY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplZHgsIFg4Njo6ZWF4KTsK
LQotICAgIEptcFNyYyBzdWNjZXNzID0gX18gam1wKCk7Ci0KLSAgICB2b2lkKiBjb2RlID0gX18g
ZXhlY3V0YWJsZUNvcHkoKTsKLQotICAgIC8vIFVzZSB0aGUgcmVwYXRjaCBpbmZvcm1hdGlvbiB0
byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSBy
b3V0aW5lLgotICAgIHZvaWQqIGxhc3RQcm90b0JlZ2luID0gcHJvdG90eXBlU3RydWN0dXJlcy0+
bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZTsKLSAgICBYODZBc3NlbWJsZXI6Omxp
bmsoY29kZSwgZmFpbHVyZUNhc2VzMSwgbGFzdFByb3RvQmVnaW4pOwotICAgIFg4NkFzc2VtYmxl
cjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMyLCBsYXN0UHJvdG9CZWdpbik7Ci0KLSAgICAvLyBP
biBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBp
dCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgotICAgIGludHB0cl90IHN1
Y2Nlc3NEZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3R1YkluZm8tPmhvdFBhdGhC
ZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0OwotICAgIFg4NkFz
c2VtYmxlcjo6bGluayhjb2RlLCBzdWNjZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihzdWNj
ZXNzRGVzdCkpOwotCi0gICAgc3RydWN0dXJlLT5yZWYoKTsKLSAgICBwcm90b3R5cGVTdHJ1Y3R1
cmUtPnJlZigpOwotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5z
ZXQoY2FjaGVkT2Zmc2V0LCBjb2RlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSk7Ci0K
LSAgICAvLyBGaW5hbGx5IHJlcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhl
IGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgotICAgIGludHB0cl90IGptcExvY2F0aW9u
ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3R1YkluZm8tPmhvdFBhdGhCZWdpbikgKyBy
ZXBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2U7Ci0gICAgWDg2QXNzZW1ibGVyOjpy
ZXBhdGNoQnJhbmNoT2Zmc2V0KGptcExvY2F0aW9uLCBjb2RlKTsKLX0KLQotdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8s
IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlcywgaW50
IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFp
biwgc2l6ZV90IGNvdW50LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKLXsKLSAgICBBU1NFUlQoY291bnQpOwotICAgIAotICAgIFZlY3RvcjxKbXBTcmM+IGJ1Y2tl
dHNPZkZhaWw7Ci0KLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBT
dHJ1Y3R1cmUuCi0gICAgYnVja2V0c09mRmFpbC5hcHBlbmQoY2hlY2tTdHJ1Y3R1cmUoWDg2Ojpl
YXgsIHN0cnVjdHVyZSkpOwotCi0gICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0
dXJlOwotICAgIFJlZlB0cjxTdHJ1Y3R1cmU+KiBjaGFpbkVudHJpZXMgPSBjaGFpbi0+aGVhZCgp
OwotICAgIEpTT2JqZWN0KiBwcm90b09iamVjdCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgcHJvdG9PYmplY3QgPSBhc09iamVjdChjdXJy
U3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAoY2FsbEZyYW1lKSk7Ci0gICAgICAgIGN1cnJT
dHJ1Y3R1cmUgPSBjaGFpbkVudHJpZXNbaV0uZ2V0KCk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdGhl
IHByb3RvdHlwZSBvYmplY3QncyBTdHJ1Y3R1cmUgaGFkIG5vdCBjaGFuZ2VkLgotICAgICAgICBT
dHJ1Y3R1cmUqKiBwcm90b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzID0gJihwcm90b09iamVjdC0+bV9z
dHJ1Y3R1cmUpOwotICAgICAgICBfXyBjbXBsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJf
dD4oY3VyclN0cnVjdHVyZSksIHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MpOwotICAgICAgICBi
dWNrZXRzT2ZGYWlsLmFwcGVuZChfXyBqbmUoKSk7Ci0gICAgfQotICAgIEFTU0VSVChwcm90b09i
amVjdCk7Ci0KLSAgICBQcm9wZXJ0eVN0b3JhZ2UqIHByb3RvUHJvcGVydHlTdG9yYWdlID0gJnBy
b3RvT2JqZWN0LT5tX3Byb3BlcnR5U3RvcmFnZTsKLSAgICBfXyBtb3ZsX21yKHN0YXRpY19jYXN0
PHZvaWQqPihwcm90b1Byb3BlcnR5U3RvcmFnZSksIFg4Njo6ZWR4KTsKLSAgICBfXyBtb3ZsX21y
KGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6ZWR4LCBYODY6OmVheCk7Ci0g
ICAgSm1wU3JjIHN1Y2Nlc3MgPSBfXyBqbXAoKTsKLQotICAgIHZvaWQqIGNvZGUgPSBfXyBleGVj
dXRhYmxlQ29weSgpOwotCi0gICAgLy8gVXNlIHRoZSByZXBhdGNoIGluZm9ybWF0aW9uIHRvIGxp
bmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRp
bmUuCi0gICAgdm9pZCogbGFzdFByb3RvQmVnaW4gPSBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0
W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGJ1Y2tldHNPZkZhaWwuc2l6ZSgpOyArK2kpCi0gICAgICAgIFg4NkFzc2VtYmxlcjo6
bGluayhjb2RlLCBidWNrZXRzT2ZGYWlsW2ldLCBsYXN0UHJvdG9CZWdpbik7Ci0KLSAgICAvLyBP
biBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBp
dCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgotICAgIGludHB0cl90IHN1
Y2Nlc3NEZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3R1YkluZm8tPmhvdFBhdGhC
ZWdpbikgKyByZXBhdGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0OwotICAgIFg4NkFz
c2VtYmxlcjo6bGluayhjb2RlLCBzdWNjZXNzLCByZWludGVycHJldF9jYXN0PHZvaWQqPihzdWNj
ZXNzRGVzdCkpOwotCi0gICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRo
YXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIHN0cnVjdHVyZS0+cmVmKCk7Ci0gICAg
Y2hhaW4tPnJlZigpOwotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4
XS5zZXQoY2FjaGVkT2Zmc2V0LCBjb2RlLCBzdHJ1Y3R1cmUsIGNoYWluKTsKLQotICAgIC8vIEZp
bmFsbHkgcmVwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGgg
dG8ganVtcCBoZXJlIGluc3RlYWQuCi0gICAgaW50cHRyX3Qgam1wTG9jYXRpb24gPSByZWludGVy
cHJldF9jYXN0PGludHB0cl90PihzdHViSW5mby0+aG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZz
ZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZTsKLSAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hCcmFu
Y2hPZmZzZXQoam1wTG9jYXRpb24sIGNvZGUpOwotfQotI2VuZGlmCi0KLXZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hh
aW4qIGNoYWluLCBzaXplX3QgY291bnQsIHNpemVfdCBjYWNoZWRPZmZzZXQsIHZvaWQqIHJldHVy
bkFkZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotI2lmIFVTRShDVElfUkVQQVRDSF9Q
SUMpCi0gICAgU3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Z2V0U3R1Yklu
Zm8ocmV0dXJuQWRkcmVzcyk7Ci0KLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHJlcGF0Y2ggbW9y
ZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgot
ICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3Qp
KTsKLQotICAgIEFTU0VSVChjb3VudCk7Ci0gICAgCi0gICAgVmVjdG9yPEptcFNyYz4gYnVja2V0
c09mRmFpbDsKLQotICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0IFN0
cnVjdHVyZS4KLSAgICBidWNrZXRzT2ZGYWlsLmFwcGVuZChjaGVja1N0cnVjdHVyZShYODY6OmVh
eCwgc3RydWN0dXJlKSk7Ci0KLSAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1
cmU7Ci0gICAgUmVmUHRyPFN0cnVjdHVyZT4qIGNoYWluRW50cmllcyA9IGNoYWluLT5oZWFkKCk7
Ci0gICAgSlNPYmplY3QqIHByb3RvT2JqZWN0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBwcm90b09iamVjdCA9IGFzT2JqZWN0KGN1cnJT
dHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChjYWxsRnJhbWUpKTsKLSAgICAgICAgY3VyclN0
cnVjdHVyZSA9IGNoYWluRW50cmllc1tpXS5nZXQoKTsKLQotICAgICAgICAvLyBDaGVjayB0aGUg
cHJvdG90eXBlIG9iamVjdCdzIFN0cnVjdHVyZSBoYWQgbm90IGNoYW5nZWQuCi0gICAgICAgIFN0
cnVjdHVyZSoqIHByb3RvdHlwZVN0cnVjdHVyZUFkZHJlc3MgPSAmKHByb3RvT2JqZWN0LT5tX3N0
cnVjdHVyZSk7Ci0gICAgICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQzMl90
PihjdXJyU3RydWN0dXJlKSwgcHJvdG90eXBlU3RydWN0dXJlQWRkcmVzcyk7Ci0gICAgICAgIGJ1
Y2tldHNPZkZhaWwuYXBwZW5kKF9fIGpuZSgpKTsKLSAgICB9Ci0gICAgQVNTRVJUKHByb3RvT2Jq
ZWN0KTsKLQotICAgIFByb3BlcnR5U3RvcmFnZSogcHJvdG9Qcm9wZXJ0eVN0b3JhZ2UgPSAmcHJv
dG9PYmplY3QtPm1fcHJvcGVydHlTdG9yYWdlOwotICAgIF9fIG1vdmxfbXIoc3RhdGljX2Nhc3Q8
dm9pZCo+KHByb3RvUHJvcGVydHlTdG9yYWdlKSwgWDg2OjplZHgpOwotICAgIF9fIG1vdmxfbXIo
Y2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpTVmFsdWUqKSwgWDg2OjplZHgsIFg4Njo6ZWF4KTsKLSAg
ICBKbXBTcmMgc3VjY2VzcyA9IF9fIGptcCgpOwotCi0gICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1
dGFibGVDb3B5KCk7Ci0KLSAgICAvLyBVc2UgdGhlIHJlcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGlu
ayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGlu
ZS4KLSAgICB2b2lkKiBzbG93Q2FzZUJlZ2luID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaW5m
by5jYWxsUmV0dXJuTG9jYXRpb24pIC0gcmVwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGw7
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVja2V0c09mRmFpbC5zaXplKCk7ICsr
aSkKLSAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGJ1Y2tldHNPZkZhaWxbaV0sIHNs
b3dDYXNlQmVnaW4pOwotCi0gICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90
IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0
IGZvciB1cy4KLSAgICBpbnRwdHJfdCBzdWNjZXNzRGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlN
YXBPZmZzZXQ7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIHN1Y2Nlc3MsIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KHN1Y2Nlc3NEZXN0KSk7Ci0KLSAgICAvLyBUcmFjayB0aGUgc3R1YiB3
ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgaW5m
by5zdHViUm91dGluZSA9IGNvZGU7Ci0KLSAgICAvLyBGaW5hbGx5IHJlcGF0Y2ggdGhlIGp1bXAg
dG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgot
ICAgIGludHB0cl90IGptcExvY2F0aW9uID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5m
by5ob3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlOwot
ICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaEJyYW5jaE9mZnNldChqbXBMb2NhdGlvbiwgY29kZSk7
Ci0jZWxzZQotICAgIEFTU0VSVChjb3VudCk7Ci0gICAgCi0gICAgVmVjdG9yPEptcFNyYz4gYnVj
a2V0c09mRmFpbDsKLQotICAgIC8vIENoZWNrIGVheCBpcyBhbiBvYmplY3Qgb2YgdGhlIHJpZ2h0
IFN0cnVjdHVyZS4KLSAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCBYODY6
OmVheCk7Ci0gICAgYnVja2V0c09mRmFpbC5hcHBlbmQoX18gam5lKCkpOwotICAgIGJ1Y2tldHNP
ZkZhaWwuYXBwZW5kKGNoZWNrU3RydWN0dXJlKFg4Njo6ZWF4LCBzdHJ1Y3R1cmUpKTsKLQotICAg
IFN0cnVjdHVyZSogY3VyclN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBSZWZQdHI8U3RydWN0
dXJlPiogY2hhaW5FbnRyaWVzID0gY2hhaW4tPmhlYWQoKTsKLSAgICBKU09iamVjdCogcHJvdG9P
YmplY3QgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0g
ICAgICAgIHByb3RvT2JqZWN0ID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9y
TG9va3VwKGNhbGxGcmFtZSkpOwotICAgICAgICBjdXJyU3RydWN0dXJlID0gY2hhaW5FbnRyaWVz
W2ldLmdldCgpOwotCi0gICAgICAgIC8vIENoZWNrIHRoZSBwcm90b3R5cGUgb2JqZWN0J3MgU3Ry
dWN0dXJlIGhhZCBub3QgY2hhbmdlZC4KLSAgICAgICAgU3RydWN0dXJlKiogcHJvdG90eXBlU3Ry
dWN0dXJlQWRkcmVzcyA9ICYocHJvdG9PYmplY3QtPm1fc3RydWN0dXJlKTsKLSAgICAgICAgX18g
Y21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGN1cnJTdHJ1Y3R1cmUpLCBwcm90
b3R5cGVTdHJ1Y3R1cmVBZGRyZXNzKTsKLSAgICAgICAgYnVja2V0c09mRmFpbC5hcHBlbmQoX18g
am5lKCkpOwotICAgIH0KLSAgICBBU1NFUlQocHJvdG9PYmplY3QpOwotCi0gICAgUHJvcGVydHlT
dG9yYWdlKiBwcm90b1Byb3BlcnR5U3RvcmFnZSA9ICZwcm90b09iamVjdC0+bV9wcm9wZXJ0eVN0
b3JhZ2U7Ci0gICAgX18gbW92bF9tcihzdGF0aWNfY2FzdDx2b2lkKj4ocHJvdG9Qcm9wZXJ0eVN0
b3JhZ2UpLCBYODY6OmVkeCk7Ci0gICAgX18gbW92bF9tcihjYWNoZWRPZmZzZXQgKiBzaXplb2Yo
SlNWYWx1ZSopLCBYODY6OmVkeCwgWDg2OjplYXgpOwotICAgIF9fIHJldCgpOwotCi0gICAgdm9p
ZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYnVja2V0c09mRmFpbC5zaXplKCk7ICsraSkKLSAgICAgICAgWDg2QXNzZW1ibGVyOjps
aW5rKGNvZGUsIGJ1Y2tldHNPZkZhaWxbaV0sIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVy
cHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2ZhaWwpKTsKLQotICAgIG1fY29kZUJsb2Nr
LT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKS5zdHViUm91dGluZSA9IGNvZGU7Ci0KLSAgICBj
dGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBjb2RlKTsKLSNlbmRp
ZgotfQotCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkUmVwbGFjZShTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgdm9pZCogcmV0dXJuQWRkcmVzcykKLXsK
LSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2JqZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCi0g
ICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6VGFnTWFzaywgWDg2OjplYXgpOwotICAgIEpt
cFNyYyBmYWlsdXJlQ2FzZXMxID0gX18gam5lKCk7Ci0gICAgSm1wU3JjIGZhaWx1cmVDYXNlczIg
PSBjaGVja1N0cnVjdHVyZShYODY6OmVheCwgc3RydWN0dXJlKTsKLQotICAgIC8vIGNoZWNrcyBv
dXQgb2theSEgLSBwdXREaXJlY3RPZmZzZXQKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChK
U09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplYXgpOwotICAgIF9f
IG1vdmxfcm0oWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiksIFg4Njo6
ZWF4KTsKLSAgICBfXyByZXQoKTsKLQotICAgIHZvaWQqIGNvZGUgPSBfXyBleGVjdXRhYmxlQ29w
eSgpOwotICAgIAotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBmYWlsdXJlQ2FzZXMxLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV9pZF9mYWls
KSk7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczIsIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpjdGlfb3BfcHV0X2J5X2lkX2ZhaWwpKTsKLQot
ICAgIG1fY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKS5zdHViUm91dGluZSA9
IGNvZGU7Ci0gICAgCi0gICAgY3RpUmVwYXRjaENhbGxCeVJldHVybkFkZHJlc3MocmV0dXJuQWRk
cmVzcywgY29kZSk7Ci19Ci0KLWV4dGVybiAiQyIgewotCi0gICAgc3RhdGljIEpTT2JqZWN0KiBy
ZXNpemVQcm9wZXJ0eVN0b3JhZ2UoSlNPYmplY3QqIGJhc2VPYmplY3QsIHNpemVfdCBvbGRTaXpl
LCBzaXplX3QgbmV3U2l6ZSkKLSAgICB7Ci0gICAgICAgIGJhc2VPYmplY3QtPmFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlSW5saW5lKG9sZFNpemUsIG5ld1NpemUpOwotICAgICAgICByZXR1cm4gYmFz
ZU9iamVjdDsKLSAgICB9Ci0KLX0KLQotc3RhdGljIGlubGluZSBib29sIHRyYW5zaXRpb25XaWxs
TmVlZFN0b3JhZ2VSZWFsbG9jKFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSkKLXsKLSAgICByZXR1cm4gb2xkU3RydWN0dXJlLT5wcm9wZXJ0eVN0b3JhZ2VD
YXBhY2l0eSgpICE9IG5ld1N0cnVjdHVyZS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKTsKLX0K
LQotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0
LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHZvaWQqIHJldHVybkFkZHJlc3MpCi17Ci0gICAgVmVj
dG9yPEptcFNyYywgMTY+IGZhaWx1cmVDYXNlczsKLSAgICAvLyBDaGVjayBlYXggaXMgYW4gb2Jq
ZWN0IG9mIHRoZSByaWdodCBTdHJ1Y3R1cmUuCi0gICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0
ZTo6VGFnTWFzaywgWDg2OjplYXgpOwotICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoX18gam5lKCkp
OwotICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihvbGRTdHJ1Y3R1
cmUpLCBGSUVMRF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIFg4Njo6ZWF4KTsKLSAgICBm
YWlsdXJlQ2FzZXMuYXBwZW5kKF9fIGpuZSgpKTsKLSAgICBWZWN0b3I8Sm1wU3JjPiBzdWNjZXNz
Q2FzZXM7Ci0KLSAgICAvLyAgZWN4ID0gYmFzZU9iamVjdAotICAgIF9fIG1vdmxfbXIoRklFTERf
T0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVheCwgWDg2OjplY3gpOwotICAgIC8v
IHByb3RvKGVjeCkgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+cHJvdG90eXBlKCkKLSAgICBf
XyBjbXBsX2kzMm0oT2JqZWN0VHlwZSwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5m
bykgKyBGSUVMRF9PRkZTRVQoVHlwZUluZm8sIG1fdHlwZSksIFg4Njo6ZWN4KTsKLSAgICBmYWls
dXJlQ2FzZXMuYXBwZW5kKF9fIGpuZSgpKTsKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChT
dHJ1Y3R1cmUsIG1fcHJvdG90eXBlKSwgWDg2OjplY3gsIFg4Njo6ZWN4KTsKLSAgICAKLSAgICAv
LyBlY3ggPSBiYXNlT2JqZWN0LT5tX3N0cnVjdHVyZQotICAgIGZvciAoUmVmUHRyPFN0cnVjdHVy
ZT4qIGl0ID0gY2hhaW4tPmhlYWQoKTsgKml0OyArK2l0KSB7Ci0gICAgICAgIC8vIG51bGwgY2hl
Y2sgdGhlIHByb3RvdHlwZQotICAgICAgICBfXyBjbXBsX2kzMnIoYXNJbnRlZ2VyKGpzTnVsbCgp
KSwgWDg2OjplY3gpOwotICAgICAgICBzdWNjZXNzQ2FzZXMuYXBwZW5kKF9fIGplKCkpOwotCi0g
ICAgICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUgaWQKLSAgICAgICAgX18gY21wbF9pMzJtKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGl0LT5nZXQoKSksIEZJRUxEX09GRlNFVChKU0NlbGws
IG1fc3RydWN0dXJlKSwgWDg2OjplY3gpOwotICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKF9f
IGpuZSgpKTsKLSAgICAgICAgCi0gICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTQ2Vs
bCwgbV9zdHJ1Y3R1cmUpLCBYODY6OmVjeCwgWDg2OjplY3gpOwotICAgICAgICBfXyBjbXBsX2kz
Mm0oT2JqZWN0VHlwZSwgRklFTERfT0ZGU0VUKFN0cnVjdHVyZSwgbV90eXBlSW5mbykgKyBGSUVM
RF9PRkZTRVQoVHlwZUluZm8sIG1fdHlwZSksIFg4Njo6ZWN4KTsKLSAgICAgICAgZmFpbHVyZUNh
c2VzLmFwcGVuZChfXyBqbmUoKSk7Ci0gICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKFN0
cnVjdHVyZSwgbV9wcm90b3R5cGUpLCBYODY6OmVjeCwgWDg2OjplY3gpOwotICAgIH0KLQotICAg
IGZhaWx1cmVDYXNlcy5hcHBlbmQoX18gam5lKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzdWNjZXNzQ2FzZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIF9fIGxpbmsoc3VjY2Vzc0Nh
c2VzW2ldLCBfXyBsYWJlbCgpKTsKLQotICAgIEptcFNyYyBjYWxsVGFyZ2V0OwotCi0gICAgLy8g
ZW1pdCBhIGNhbGwgb25seSBpZiBzdG9yYWdlIHJlYWxsb2MgaXMgbmVlZGVkCi0gICAgaWYgKHRy
YW5zaXRpb25XaWxsTmVlZFN0b3JhZ2VSZWFsbG9jKG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJl
KSkgewotICAgICAgICBfXyBwdXNobF9yKFg4Njo6ZWR4KTsKLSAgICAgICAgX18gcHVzaGxfaTMy
KG5ld1N0cnVjdHVyZS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSk7Ci0gICAgICAgIF9fIHB1
c2hsX2kzMihvbGRTdHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCkpOwotICAgICAg
ICBfXyBwdXNobF9yKFg4Njo6ZWF4KTsKLSAgICAgICAgY2FsbFRhcmdldCA9IF9fIGNhbGwoKTsK
LSAgICAgICAgX18gYWRkbF9pMzJyKDMgKiBzaXplb2Yodm9pZCopLCBYODY6OmVzcCk7Ci0gICAg
ICAgIF9fIHBvcGxfcihYODY6OmVkeCk7Ci0gICAgfQotCi0gICAgLy8gQXNzdW1lcyBtX3JlZkNv
dW50IGNhbiBiZSBkZWNyZW1lbnRlZCBlYXNpbHksIHJlZmNvdW50IGRlY3JlbWVudCBpcyBzYWZl
IGFzIAotICAgIC8vIGNvZGVibG9jayBzaG91bGQgZW5zdXJlIG9sZFN0cnVjdHVyZS0+bV9yZWZD
b3VudCA+IDAKLSAgICBfXyBzdWJsX2k4bSgxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihvbGRT
dHJ1Y3R1cmUpKTsKLSAgICBfXyBhZGRsX2k4bSgxLCByZWludGVycHJldF9jYXN0PHZvaWQqPihu
ZXdTdHJ1Y3R1cmUpKTsKLSAgICBfXyBtb3ZsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJf
dD4obmV3U3RydWN0dXJlKSwgRklFTERfT0ZGU0VUKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpLCBYODY6
OmVheCk7Ci0KLSAgICAvLyB3cml0ZSB0aGUgdmFsdWUKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09G
RlNFVChKU09iamVjdCwgbV9wcm9wZXJ0eVN0b3JhZ2UpLCBYODY6OmVheCwgWDg2OjplYXgpOwot
ICAgIF9fIG1vdmxfcm0oWDg2OjplZHgsIGNhY2hlZE9mZnNldCAqIHNpemVvZihKU1ZhbHVlKiks
IFg4Njo6ZWF4KTsKLQotICAgIF9fIHJldCgpOwotICAgIAotICAgIEptcFNyYyBmYWlsdXJlSnVt
cDsKLSAgICBpZiAoZmFpbHVyZUNhc2VzLnNpemUoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZmFpbHVyZUNhc2VzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgX18gbGlu
ayhmYWlsdXJlQ2FzZXNbaV0sIF9fIGxhYmVsKCkpOwotICAgICAgICBfXyByZXN0b3JlQXJndW1l
bnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCk7Ci0gICAgICAgIGZhaWx1cmVKdW1wID0gX18gam1w
KCk7Ci0gICAgfQotCi0gICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1dGFibGVDb3B5KCk7Ci0KLSAg
ICBpZiAoZmFpbHVyZUNhc2VzLnNpemUoKSkKLSAgICAgICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNv
ZGUsIGZhaWx1cmVKdW1wLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3Rp
X29wX3B1dF9ieV9pZF9mYWlsKSk7Ci0KLSAgICBpZiAodHJhbnNpdGlvbldpbGxOZWVkU3RvcmFn
ZVJlYWxsb2Mob2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpKQotICAgICAgICBYODZBc3NlbWJs
ZXI6OmxpbmsoY29kZSwgY2FsbFRhcmdldCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVzaXpl
UHJvcGVydHlTdG9yYWdlKSk7Ci0gICAgCi0gICAgbV9jb2RlQmxvY2stPmdldFN0dWJJbmZvKHJl
dHVybkFkZHJlc3MpLnN0dWJSb3V0aW5lID0gY29kZTsKLSAgICAKLSAgICBjdGlSZXBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBjb2RlKTsKLX0KLQotdm9pZCBKSVQ6OnVu
bGlua0NhbGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCi17Ci0gICAgLy8gV2hlbiB0aGUg
SlNGdW5jdGlvbiBpcyBkZWxldGVkIHRoZSBwb2ludGVyIGVtYmVkZGVkIGluIHRoZSBpbnN0cnVj
dGlvbiBzdHJlYW0gd2lsbCBubyBsb25nZXIgYmUgdmFsaWQKLSAgICAvLyAoYW5kLCBpZiBhIG5l
dyBKU0Z1bmN0aW9uIGhhcHBlbmVkIHRvIGJlIGNvbnN0cnVjdGVkIGF0IHRoZSBzYW1lIGxvY2F0
aW9uLCB3ZSBjb3VsZCBnZXQgYSBmYWxzZSBwb3NpdGl2ZQotICAgIC8vIG1hdGNoKS4gIFJlc2V0
IHRoZSBjaGVjayBzbyBpdCBubyBsb25nZXIgbWF0Y2hlcy4KLSAgICByZWludGVycHJldF9jYXN0
PHZvaWQqKj4oY2FsbExpbmtJbmZvLT5ob3RQYXRoQmVnaW4pWy0xXSA9IGFzUG9pbnRlcihKU0lt
bWVkaWF0ZTo6aW1wb3NzaWJsZVZhbHVlKCkpOwotfQotCi12b2lkIEpJVDo6bGlua0NhbGwoSlNG
dW5jdGlvbiogY2FsbGVlLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgdm9pZCogY3RpQ29k
ZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIGludCBjYWxsZXJBcmdDb3VudCkKLXsKLSAg
ICAvLyBDdXJyZW50bHkgd2Ugb25seSBsaW5rIGNhbGxzIHdpdGggdGhlIGV4YWN0IG51bWJlciBv
ZiBhcmd1bWVudHMuCi0gICAgaWYgKGNhbGxlckFyZ0NvdW50ID09IGNhbGxlZUNvZGVCbG9jay0+
bnVtUGFyYW1ldGVycykgewotICAgICAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby0+aXNMaW5rZWQo
KSk7Ci0gICAgCi0gICAgICAgIGNhbGxlZUNvZGVCbG9jay0+YWRkQ2FsbGVyKGNhbGxMaW5rSW5m
byk7Ci0gICAgCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihjYWxsTGlua0luZm8t
PmhvdFBhdGhCZWdpbilbLTFdID0gY2FsbGVlOwotICAgICAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhjYWxsTGlua0luZm8tPmhvdFBhdGhPdGhlciwgY3RpQ29kZSk7Ci0gICAgfQot
Ci0gICAgLy8gcmVwYXRjaCB0aGUgaW5zdHJ1Y3Rpb24gdGhhdCBqdW1wcyBvdXQgdG8gdGhlIGNv
bGQgcGF0aCwgc28gdGhhdCB3ZSBvbmx5IHRyeSB0byBsaW5rIG9uY2UuCi0gICAgdm9pZCogcmVw
YXRjaENoZWNrID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDxwdHJk
aWZmX3Q+KGNhbGxMaW5rSW5mby0+aG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRPcENhbGxD
YWxsKTsKLSAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXBhdGNoQ2hlY2ssIGNh
bGxMaW5rSW5mby0+Y29sZFBhdGhPdGhlcik7Ci19Ci0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUNUSU1hY2hpbmVUcmFtcG9saW5lcygpCi17Ci0gICAgLy8gKDEpIFRoZSBmaXJzdCBmdW5jdGlv
biBwcm92aWRlcyBmYXN0IHByb3BlcnR5IGFjY2VzcyBmb3IgYXJyYXkgbGVuZ3RoCi0gICAgCi0g
ICAgLy8gQ2hlY2sgZWF4IGlzIGFuIGFycmF5Ci0gICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0
ZTo6VGFnTWFzaywgWDg2OjplYXgpOwotICAgIEptcFNyYyBhcnJheV9mYWlsdXJlQ2FzZXMxID0g
X18gam5lKCk7Ci0gICAgX18gY21wbF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG1f
aW50ZXJwcmV0ZXItPm1fanNBcnJheVZwdHIpLCBYODY6OmVheCk7Ci0gICAgSm1wU3JjIGFycmF5
X2ZhaWx1cmVDYXNlczIgPSBfXyBqbmUoKTsKLQotICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBn
ZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBzdG9yYWdlCi0gICAgX18gbW92bF9tcihGSUVMRF9PRkZT
RVQoSlNBcnJheSwgbV9zdG9yYWdlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAgICBfXyBtb3Zs
X21yKEZJRUxEX09GRlNFVChBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSwgWDg2OjplYXgsIFg4Njo6
ZWF4KTsKLQotICAgIF9fIGNtcGxfaTMycihKU0ltbWVkaWF0ZTo6bWF4SW1tZWRpYXRlSW50LCBY
ODY6OmVheCk7Ci0gICAgSm1wU3JjIGFycmF5X2ZhaWx1cmVDYXNlczMgPSBfXyBqYSgpOwotCi0g
ICAgX18gYWRkbF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgIF9fIGFkZGxfaThyKDEsIFg4
Njo6ZWF4KTsKLSAgICAKLSAgICBfXyByZXQoKTsKLQotICAgIC8vICgyKSBUaGUgc2Vjb25kIGZ1
bmN0aW9uIHByb3ZpZGVzIGZhc3QgcHJvcGVydHkgYWNjZXNzIGZvciBzdHJpbmcgbGVuZ3RoCi0g
ICAgCi0gICAgSm1wRHN0IHN0cmluZ0xlbmd0aEJlZ2luID0gX18gYWxpZ24oMTYpOwotCi0gICAg
Ly8gQ2hlY2sgZWF4IGlzIGEgc3RyaW5nCi0gICAgX18gdGVzdGxfaTMycihKU0ltbWVkaWF0ZTo6
VGFnTWFzaywgWDg2OjplYXgpOwotICAgIEptcFNyYyBzdHJpbmdfZmFpbHVyZUNhc2VzMSA9IF9f
IGpuZSgpOwotICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVuc2lnbmVkPihtX2lu
dGVycHJldGVyLT5tX2pzU3RyaW5nVnB0ciksIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgc3RyaW5n
X2ZhaWx1cmVDYXNlczIgPSBfXyBqbmUoKTsKLQotICAgIC8vIENoZWNrcyBvdXQgb2theSEgLSBn
ZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBVc3RyaW5nLgotICAgIF9fIG1vdmxfbXIoRklFTERfT0ZG
U0VUKEpTU3RyaW5nLCBtX3ZhbHVlKSArIEZJRUxEX09GRlNFVChVU3RyaW5nLCBtX3JlcCksIFg4
Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoVVN0cmluZzo6
UmVwLCBsZW4pLCBYODY6OmVheCwgWDg2OjplYXgpOwotCi0gICAgX18gY21wbF9pMzJyKEpTSW1t
ZWRpYXRlOjptYXhJbW1lZGlhdGVJbnQsIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgc3RyaW5nX2Zh
aWx1cmVDYXNlczMgPSBfXyBqYSgpOwotCi0gICAgX18gYWRkbF9ycihYODY6OmVheCwgWDg2Ojpl
YXgpOwotICAgIF9fIGFkZGxfaThyKDEsIFg4Njo6ZWF4KTsKLSAgICAKLSAgICBfXyByZXQoKTsK
LQotICAgIC8vICgzKSBUcmFtcG9saW5lcyBmb3IgdGhlIHNsb3cgY2FzZXMgb2Ygb3BfY2FsbCAv
IG9wX2NhbGxfZXZhbCAvIG9wX2NvbnN0cnVjdC4KLSAgICAKLSAgICBKbXBEc3QgdmlydHVhbENh
bGxQcmVMaW5rQmVnaW4gPSBfXyBhbGlnbigxNik7Ci0KLSAgICAvLyBMb2FkIHRoZSBjYWxsZWUg
Q29kZUJsb2NrKiBpbnRvIGVheAotICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKEpTRnVuY3Rp
b24sIG1fYm9keSksIFg4Njo6ZWN4LCBYODY6OmVheCk7Ci0gICAgX18gbW92bF9tcihGSUVMRF9P
RkZTRVQoRnVuY3Rpb25Cb2R5Tm9kZSwgbV9jb2RlKSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKLSAg
ICBfXyB0ZXN0bF9ycihYODY6OmVheCwgWDg2OjplYXgpOwotICAgIEptcFNyYyBoYXNDb2RlQmxv
Y2sxID0gX18gam5lKCk7Ci0gICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsKLSAgICBfXyByZXN0b3Jl
QXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENUSV9B
UkdTX2NhbGxGcmFtZSk7Ci0gICAgSm1wU3JjIGNhbGxKU0Z1bmN0aW9uMSA9IF9fIGNhbGwoKTsK
LSAgICBlbWl0R2V0Q1RJQXJnKDAsIFg4Njo6ZWN4KTsKLSAgICBlbWl0R2V0Q1RJQXJnKDgsIFg4
Njo6ZWR4KTsKLSAgICBfXyBwdXNobF9yKFg4Njo6ZWJ4KTsKLSAgICBfXyBsaW5rKGhhc0NvZGVC
bG9jazEsIF9fIGxhYmVsKCkpOwotCi0gICAgLy8gQ2hlY2sgYXJnQ291bnQgbWF0Y2hlcyBjYWxs
ZWUgYXJpdHkuCi0gICAgX18gY21wbF9ybShYODY6OmVkeCwgRklFTERfT0ZGU0VUKENvZGVCbG9j
aywgbnVtUGFyYW1ldGVycyksIFg4Njo6ZWF4KTsKLSAgICBKbXBTcmMgYXJpdHlDaGVja09rYXkx
ID0gX18gamUoKTsKLSAgICBfXyBwb3BsX3IoWDg2OjplYngpOwotICAgIGVtaXRQdXRDVElBcmco
WDg2OjplYngsIDQpOwotICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYXgsIDEyKTsKLSAgICBfXyBy
ZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKLSAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGks
IENUSV9BUkdTX2NhbGxGcmFtZSk7Ci0gICAgSm1wU3JjIGNhbGxBcml0eUNoZWNrMSA9IF9fIGNh
bGwoKTsKLSAgICBfXyBtb3ZsX3JyKFg4Njo6ZWR4LCBYODY6OmVkaSk7Ci0gICAgZW1pdEdldENU
SUFyZygwLCBYODY6OmVjeCk7Ci0gICAgZW1pdEdldENUSUFyZyg4LCBYODY6OmVkeCk7Ci0gICAg
X18gcHVzaGxfcihYODY6OmVieCk7Ci0gICAgX18gbGluayhhcml0eUNoZWNrT2theTEsIF9fIGxh
YmVsKCkpOwotCi0gICAgY29tcGlsZU9wQ2FsbEluaXRpYWxpemVDYWxsRnJhbWUoKTsKLQotICAg
IF9fIHBvcGxfcihYODY6OmVieCk7Ci0gICAgZW1pdFB1dENUSUFyZyhYODY6OmVieCwgNCk7Ci0g
ICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7Ci0gICAgZW1pdFB1dENUSVBhcmFtKFg4
Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOwotICAgIEptcFNyYyBjYWxsRG9udExhenlMaW5r
Q2FsbCA9IF9fIGNhbGwoKTsKLSAgICBfXyBwdXNobF9yKFg4Njo6ZWJ4KTsKLQotICAgIF9fIGpt
cF9yKFg4Njo6ZWF4KTsKLQotICAgIEptcERzdCB2aXJ0dWFsQ2FsbExpbmtCZWdpbiA9IF9fIGFs
aWduKDE2KTsKLQotICAgIC8vIExvYWQgdGhlIGNhbGxlZSBDb2RlQmxvY2sqIGludG8gZWF4Ci0g
ICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNGdW5jdGlvbiwgbV9ib2R5KSwgWDg2OjplY3gs
IFg4Njo6ZWF4KTsKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChGdW5jdGlvbkJvZHlOb2Rl
LCBtX2NvZGUpLCBYODY6OmVheCwgWDg2OjplYXgpOwotICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4
LCBYODY6OmVheCk7Ci0gICAgSm1wU3JjIGhhc0NvZGVCbG9jazIgPSBfXyBqbmUoKTsKLSAgICBf
XyBwb3BsX3IoWDg2OjplYngpOwotICAgIF9fIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwot
ICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKLSAgICBK
bXBTcmMgY2FsbEpTRnVuY3Rpb24yID0gX18gY2FsbCgpOwotICAgIGVtaXRHZXRDVElBcmcoMCwg
WDg2OjplY3gpOwotICAgIGVtaXRHZXRDVElBcmcoOCwgWDg2OjplZHgpOwotICAgIF9fIHB1c2hs
X3IoWDg2OjplYngpOwotICAgIF9fIGxpbmsoaGFzQ29kZUJsb2NrMiwgX18gbGFiZWwoKSk7Ci0K
LSAgICAvLyBDaGVjayBhcmdDb3VudCBtYXRjaGVzIGNhbGxlZSBhcml0eS4KLSAgICBfXyBjbXBs
X3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoQ29kZUJsb2NrLCBudW1QYXJhbWV0ZXJzKSwgWDg2
OjplYXgpOwotICAgIEptcFNyYyBhcml0eUNoZWNrT2theTIgPSBfXyBqZSgpOwotICAgIF9fIHBv
cGxfcihYODY6OmVieCk7Ci0gICAgZW1pdFB1dENUSUFyZyhYODY6OmVieCwgNCk7Ci0gICAgZW1p
dFB1dENUSUFyZyhYODY6OmVheCwgMTIpOwotICAgIF9fIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5j
ZSgpOwotICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsK
LSAgICBKbXBTcmMgY2FsbEFyaXR5Q2hlY2syID0gX18gY2FsbCgpOwotICAgIF9fIG1vdmxfcnIo
WDg2OjplZHgsIFg4Njo6ZWRpKTsKLSAgICBlbWl0R2V0Q1RJQXJnKDAsIFg4Njo6ZWN4KTsKLSAg
ICBlbWl0R2V0Q1RJQXJnKDgsIFg4Njo6ZWR4KTsKLSAgICBfXyBwdXNobF9yKFg4Njo6ZWJ4KTsK
LSAgICBfXyBsaW5rKGFyaXR5Q2hlY2tPa2F5MiwgX18gbGFiZWwoKSk7Ci0KLSAgICBjb21waWxl
T3BDYWxsSW5pdGlhbGl6ZUNhbGxGcmFtZSgpOwotCi0gICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsK
LSAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWJ4LCA0KTsKLSAgICBfXyByZXN0b3JlQXJndW1lbnRS
ZWZlcmVuY2UoKTsKLSAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENUSV9BUkdTX2NhbGxG
cmFtZSk7Ci0gICAgSm1wU3JjIGNhbGxMYXp5TGlua0NhbGwgPSBfXyBjYWxsKCk7Ci0gICAgX18g
cHVzaGxfcihYODY6OmVieCk7Ci0KLSAgICBfXyBqbXBfcihYODY6OmVheCk7Ci0KLSAgICBKbXBE
c3QgdmlydHVhbENhbGxCZWdpbiA9IF9fIGFsaWduKDE2KTsKLQotICAgIC8vIExvYWQgdGhlIGNh
bGxlZSBDb2RlQmxvY2sqIGludG8gZWF4Ci0gICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNG
dW5jdGlvbiwgbV9ib2R5KSwgWDg2OjplY3gsIFg4Njo6ZWF4KTsKLSAgICBfXyBtb3ZsX21yKEZJ
RUxEX09GRlNFVChGdW5jdGlvbkJvZHlOb2RlLCBtX2NvZGUpLCBYODY6OmVheCwgWDg2OjplYXgp
OwotICAgIF9fIHRlc3RsX3JyKFg4Njo6ZWF4LCBYODY6OmVheCk7Ci0gICAgSm1wU3JjIGhhc0Nv
ZGVCbG9jazMgPSBfXyBqbmUoKTsKLSAgICBfXyBwb3BsX3IoWDg2OjplYngpOwotICAgIF9fIHJl
c3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwg
Q1RJX0FSR1NfY2FsbEZyYW1lKTsKLSAgICBKbXBTcmMgY2FsbEpTRnVuY3Rpb24zID0gX18gY2Fs
bCgpOwotICAgIGVtaXRHZXRDVElBcmcoMCwgWDg2OjplY3gpOwotICAgIGVtaXRHZXRDVElBcmco
OCwgWDg2OjplZHgpOwotICAgIF9fIHB1c2hsX3IoWDg2OjplYngpOwotICAgIF9fIGxpbmsoaGFz
Q29kZUJsb2NrMywgX18gbGFiZWwoKSk7Ci0KLSAgICAvLyBDaGVjayBhcmdDb3VudCBtYXRjaGVz
IGNhbGxlZSBhcml0eS4KLSAgICBfXyBjbXBsX3JtKFg4Njo6ZWR4LCBGSUVMRF9PRkZTRVQoQ29k
ZUJsb2NrLCBudW1QYXJhbWV0ZXJzKSwgWDg2OjplYXgpOwotICAgIEptcFNyYyBhcml0eUNoZWNr
T2theTMgPSBfXyBqZSgpOwotICAgIF9fIHBvcGxfcihYODY6OmVieCk7Ci0gICAgZW1pdFB1dENU
SUFyZyhYODY6OmVieCwgNCk7Ci0gICAgZW1pdFB1dENUSUFyZyhYODY6OmVheCwgMTIpOwotICAg
IF9fIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAgIGVtaXRQdXRDVElQYXJhbShYODY6
OmVkaSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKLSAgICBKbXBTcmMgY2FsbEFyaXR5Q2hlY2szID0g
X18gY2FsbCgpOwotICAgIF9fIG1vdmxfcnIoWDg2OjplZHgsIFg4Njo6ZWRpKTsKLSAgICBlbWl0
R2V0Q1RJQXJnKDAsIFg4Njo6ZWN4KTsKLSAgICBlbWl0R2V0Q1RJQXJnKDgsIFg4Njo6ZWR4KTsK
LSAgICBfXyBwdXNobF9yKFg4Njo6ZWJ4KTsKLSAgICBfXyBsaW5rKGFyaXR5Q2hlY2tPa2F5Mywg
X18gbGFiZWwoKSk7Ci0KLSAgICBjb21waWxlT3BDYWxsSW5pdGlhbGl6ZUNhbGxGcmFtZSgpOwot
Ci0gICAgLy8gbG9hZCBjdGlDb2RlIGZyb20gdGhlIG5ldyBjb2RlQmxvY2suCi0gICAgX18gbW92
bF9tcihGSUVMRF9PRkZTRVQoQ29kZUJsb2NrLCBjdGlDb2RlKSwgWDg2OjplYXgsIFg4Njo6ZWF4
KTsKLQotICAgIF9fIGptcF9yKFg4Njo6ZWF4KTsKLQotICAgIC8vIEFsbCB0cmFtcG9saW5lcyBj
b25zdHJ1Y3RlZCEgY29weSB0aGUgY29kZSwgbGluayB1cCBjYWxscywgYW5kIHNldCB0aGUgcG9p
bnRlcnMgb24gdGhlIE1hY2hpbmUgb2JqZWN0LgotCi0gICAgdm9pZCogY29kZSA9IF9fIGV4ZWN1
dGFibGVDb3B5KCk7Ci0KLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgYXJyYXlfZmFpbHVy
ZUNhc2VzMSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRf
YnlfaWRfYXJyYXlfZmFpbCkpOwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2RlLCBhcnJheV9m
YWlsdXJlQ2FzZXMyLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29w
X2dldF9ieV9pZF9hcnJheV9mYWlsKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGFy
cmF5X2ZhaWx1cmVDYXNlczMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpj
dGlfb3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwpKTsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29k
ZSwgc3RyaW5nX2ZhaWx1cmVDYXNlczEsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJl
dGVyOjpjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjps
aW5rKGNvZGUsIHN0cmluZ19mYWlsdXJlQ2FzZXMyLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJ
bnRlcnByZXRlcjo6Y3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwotICAgIFg4NkFzc2Vt
Ymxlcjo6bGluayhjb2RlLCBzdHJpbmdfZmFpbHVyZUNhc2VzMywgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oSW50ZXJwcmV0ZXI6OmN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKLSAgICBY
ODZBc3NlbWJsZXI6OmxpbmsoY29kZSwgY2FsbEFyaXR5Q2hlY2sxLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX2NhbGxfYXJpdHlDaGVjaykpOwotICAgIFg4NkFz
c2VtYmxlcjo6bGluayhjb2RlLCBjYWxsQXJpdHlDaGVjazIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KEludGVycHJldGVyOjpjdGlfb3BfY2FsbF9hcml0eUNoZWNrKSk7Ci0gICAgWDg2QXNzZW1i
bGVyOjpsaW5rKGNvZGUsIGNhbGxBcml0eUNoZWNrMywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
SW50ZXJwcmV0ZXI6OmN0aV9vcF9jYWxsX2FyaXR5Q2hlY2spKTsKLSAgICBYODZBc3NlbWJsZXI6
OmxpbmsoY29kZSwgY2FsbEpTRnVuY3Rpb24xLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRl
cnByZXRlcjo6Y3RpX29wX2NhbGxfSlNGdW5jdGlvbikpOwotICAgIFg4NkFzc2VtYmxlcjo6bGlu
ayhjb2RlLCBjYWxsSlNGdW5jdGlvbjIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJl
dGVyOjpjdGlfb3BfY2FsbF9KU0Z1bmN0aW9uKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjpsaW5rKGNv
ZGUsIGNhbGxKU0Z1bmN0aW9uMywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oSW50ZXJwcmV0ZXI6
OmN0aV9vcF9jYWxsX0pTRnVuY3Rpb24pKTsKLSAgICBYODZBc3NlbWJsZXI6OmxpbmsoY29kZSwg
Y2FsbERvbnRMYXp5TGlua0NhbGwsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVy
OjpjdGlfdm1fZG9udExhenlMaW5rQ2FsbCkpOwotICAgIFg4NkFzc2VtYmxlcjo6bGluayhjb2Rl
LCBjYWxsTGF6eUxpbmtDYWxsLCByZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6
Y3RpX3ZtX2xhenlMaW5rQ2FsbCkpOwotCi0gICAgbV9pbnRlcnByZXRlci0+bV9jdGlBcnJheUxl
bmd0aFRyYW1wb2xpbmUgPSBjb2RlOwotICAgIG1faW50ZXJwcmV0ZXItPm1fY3RpU3RyaW5nTGVu
Z3RoVHJhbXBvbGluZSA9IFg4NkFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlLCBz
dHJpbmdMZW5ndGhCZWdpbik7Ci0gICAgbV9pbnRlcnByZXRlci0+bV9jdGlWaXJ0dWFsQ2FsbFBy
ZUxpbmsgPSBYODZBc3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgdmlydHVhbENh
bGxQcmVMaW5rQmVnaW4pOwotICAgIG1faW50ZXJwcmV0ZXItPm1fY3RpVmlydHVhbENhbGxMaW5r
ID0gWDg2QXNzZW1ibGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIHZpcnR1YWxDYWxsTGlu
a0JlZ2luKTsKLSAgICBtX2ludGVycHJldGVyLT5tX2N0aVZpcnR1YWxDYWxsID0gWDg2QXNzZW1i
bGVyOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUsIHZpcnR1YWxDYWxsQmVnaW4pOwotfQotCi12
b2lkIEpJVDo6ZnJlZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhJbnRlcnByZXRlciogaW50ZXJwcmV0
ZXIpCi17Ci0gICAgV1RGOjpmYXN0RnJlZUV4ZWN1dGFibGUoaW50ZXJwcmV0ZXItPm1fY3RpQXJy
YXlMZW5ndGhUcmFtcG9saW5lKTsKLX0KLQotdm9pZCBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zm
c2V0LCB2b2lkKiByZXR1cm5BZGRyZXNzKQotewotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZv
ID0gY29kZUJsb2NrLT5nZXRTdHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKLQotICAgIC8vIFdlIGRv
bid0IHdhbnQgdG8gcmVwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlf
b3BfZ2V0X2J5X2lkX2dlbmVyaWMuCi0gICAgLy8gU2hvdWxkIHByb2JhYmx5IGdvIHRvIEludGVy
cHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX2ZhaWwsIGJ1dCB0aGF0IGRvZXNuJ3QgZG8gYW55dGhp
bmcgaW50ZXJlc3RpbmcgcmlnaHQgbm93LgotICAgIGN0aVJlcGF0Y2hDYWxsQnlSZXR1cm5BZGRy
ZXNzKHJldHVybkFkZHJlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KEludGVycHJldGVyOjpj
dGlfb3BfZ2V0X2J5X2lkX3NlbGZfZmFpbCkpOwotCi0gICAgLy8gUmVwYXRjaCB0aGUgb2Zmc2V0
IGludG8gdGhlIHByb3BvZXJ0eSBtYXAgdG8gbG9hZCBmcm9tLCB0aGVuIHJlcGF0Y2ggdGhlIFN0
cnVjdHVyZSB0byBsb29rIGZvci4KLSAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hEaXNwbGFjZW1l
bnQocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5ob3RQYXRoQmVnaW4pICsgcmVwYXRj
aE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCwgY2FjaGVkT2Zmc2V0ICogc2l6ZW9mKEpT
VmFsdWUqKSk7Ci0gICAgWDg2QXNzZW1ibGVyOjpyZXBhdGNoSW1tZWRpYXRlKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlk
U3RydWN0dXJlLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90PihzdHJ1Y3R1cmUpKTsKLX0KLQot
dm9pZCBKSVQ6OnBhdGNoUHV0QnlJZFJlcGxhY2UoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCB2b2lkKiByZXR1cm5BZGRyZXNz
KQotewotICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZvID0gY29kZUJsb2NrLT5nZXRTdHViSW5m
byhyZXR1cm5BZGRyZXNzKTsKLSAgICAKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHJlcGF0Y2gg
bW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmlj
LgotICAgIC8vIFNob3VsZCBwcm9iYWJseSBnbyB0byBJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9i
eV9pZF9mYWlsLCBidXQgdGhhdCBkb2Vzbid0IGRvIGFueXRoaW5nIGludGVyZXN0aW5nIHJpZ2h0
IG5vdy4KLSAgICBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhyZXR1cm5BZGRyZXNzLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihJbnRlcnByZXRlcjo6Y3RpX29wX3B1dF9ieV9pZF9nZW5l
cmljKSk7Ci0KLSAgICAvLyBSZXBhdGNoIHRoZSBvZmZzZXQgaW50byB0aGUgcHJvcG9lcnR5IG1h
cCB0byBsb2FkIGZyb20sIHRoZW4gcmVwYXRjaCB0aGUgU3RydWN0dXJlIHRvIGxvb2sgZm9yLgot
ICAgIFg4NkFzc2VtYmxlcjo6cmVwYXRjaERpc3BsYWNlbWVudChyZWludGVycHJldF9jYXN0PGlu
dHB0cl90PihpbmZvLmhvdFBhdGhCZWdpbikgKyByZXBhdGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5
TWFwT2Zmc2V0LCBjYWNoZWRPZmZzZXQgKiBzaXplb2YoSlNWYWx1ZSopKTsKLSAgICBYODZBc3Nl
bWJsZXI6OnJlcGF0Y2hJbW1lZGlhdGUocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5mby5o
b3RQYXRoQmVnaW4pICsgcmVwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUsIHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3Q+KHN0cnVjdHVyZSkpOwotfQotCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVQYXRjaEdldEFycmF5TGVuZ3RoKHZvaWQqIHJldHVybkFkZHJlc3MpCi17Ci0gICAgU3RydWN0
dXJlU3R1YkluZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Z2V0U3R1YkluZm8ocmV0dXJuQWRkcmVz
cyk7Ci0KLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHJlcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBp
biBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgotICAgIGN0aVJlcGF0Y2hD
YWxsQnlSZXR1cm5BZGRyZXNzKHJldHVybkFkZHJlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KEludGVycHJldGVyOjpjdGlfb3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwpKTsKLQotICAgIC8vIENo
ZWNrIGVheCBpcyBhbiBhcnJheQotICAgIF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVu
c2lnbmVkPihtX2ludGVycHJldGVyLT5tX2pzQXJyYXlWcHRyKSwgWDg2OjplYXgpOwotICAgIEpt
cFNyYyBmYWlsdXJlQ2FzZXMxID0gX18gam5lKCk7Ci0KLSAgICAvLyBDaGVja3Mgb3V0IG9rYXkh
IC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgc3RvcmFnZQotICAgIF9fIG1vdmxfbXIoRklFTERf
T0ZGU0VUKEpTQXJyYXksIG1fc3RvcmFnZSksIFg4Njo6ZWF4LCBYODY6OmVjeCk7Ci0gICAgX18g
bW92bF9tcihGSUVMRF9PRkZTRVQoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCksIFg4Njo6ZWN4LCBY
ODY6OmVjeCk7Ci0KLSAgICBfXyBjbXBsX2kzMnIoSlNJbW1lZGlhdGU6Om1heEltbWVkaWF0ZUlu
dCwgWDg2OjplY3gpOwotICAgIEptcFNyYyBmYWlsdXJlQ2FzZXMyID0gX18gamEoKTsKLQotICAg
IF9fIGFkZGxfcnIoWDg2OjplY3gsIFg4Njo6ZWN4KTsKLSAgICBfXyBhZGRsX2k4cigxLCBYODY6
OmVjeCk7Ci0gICAgX18gbW92bF9ycihYODY6OmVjeCwgWDg2OjplYXgpOwotICAgIEptcFNyYyBz
dWNjZXNzID0gX18gam1wKCk7Ci0KLSAgICB2b2lkKiBjb2RlID0gX18gZXhlY3V0YWJsZUNvcHko
KTsKLQotICAgIC8vIFVzZSB0aGUgcmVwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWls
dXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIHZv
aWQqIHNsb3dDYXNlQmVnaW4gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihpbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbikgLSByZXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbDsKLSAgICBYODZB
c3NlbWJsZXI6OmxpbmsoY29kZSwgZmFpbHVyZUNhc2VzMSwgc2xvd0Nhc2VCZWdpbik7Ci0gICAg
WDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIGZhaWx1cmVDYXNlczIsIHNsb3dDYXNlQmVnaW4pOwot
Ci0gICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0
IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KLSAgICBp
bnRwdHJfdCBzdWNjZXNzRGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZm8uaG90
UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQ7Ci0gICAg
WDg2QXNzZW1ibGVyOjpsaW5rKGNvZGUsIHN1Y2Nlc3MsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHN1Y2Nlc3NEZXN0KSk7Ci0KLSAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQg
c28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgbV9jb2RlQmxvY2stPmdldFN0
dWJJbmZvKHJldHVybkFkZHJlc3MpLnN0dWJSb3V0aW5lID0gY29kZTsKLQotICAgIC8vIEZpbmFs
bHkgcmVwYXRjaCB0aGUganVtcCB0byBzb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBq
dW1wIGhlcmUgaW5zdGVhZC4KLSAgICBpbnRwdHJfdCBqbXBMb2NhdGlvbiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KGluZm8uaG90UGF0aEJlZ2luKSArIHJlcGF0Y2hPZmZzZXRHZXRCeUlk
QnJhbmNoVG9TbG93Q2FzZTsKLSAgICBYODZBc3NlbWJsZXI6OnJlcGF0Y2hCcmFuY2hPZmZzZXQo
am1wTG9jYXRpb24sIGNvZGUpOwotfQotCi12b2lkIEpJVDo6ZW1pdEdldFZhcmlhYmxlT2JqZWN0
UmVnaXN0ZXIoUmVnaXN0ZXJJRCB2YXJpYWJsZU9iamVjdCwgaW50IGluZGV4LCBSZWdpc3RlcklE
IGRzdCkKLXsKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU1ZhcmlhYmxlT2JqZWN0LCBk
KSwgdmFyaWFibGVPYmplY3QsIGRzdCk7Ci0gICAgX18gbW92bF9tcihGSUVMRF9PRkZTRVQoSlNW
YXJpYWJsZU9iamVjdDo6SlNWYXJpYWJsZU9iamVjdERhdGEsIHJlZ2lzdGVycyksIGRzdCwgZHN0
KTsKLSAgICBfXyBtb3ZsX21yKGluZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSwgZHN0LCBkc3QpOwot
fQotCi12b2lkIEpJVDo6ZW1pdFB1dFZhcmlhYmxlT2JqZWN0UmVnaXN0ZXIoUmVnaXN0ZXJJRCBz
cmMsIFJlZ2lzdGVySUQgdmFyaWFibGVPYmplY3QsIGludCBpbmRleCkKLXsKLSAgICBfXyBtb3Zs
X21yKEZJRUxEX09GRlNFVChKU1ZhcmlhYmxlT2JqZWN0LCBkKSwgdmFyaWFibGVPYmplY3QsIHZh
cmlhYmxlT2JqZWN0KTsKLSAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChKU1ZhcmlhYmxlT2Jq
ZWN0OjpKU1ZhcmlhYmxlT2JqZWN0RGF0YSwgcmVnaXN0ZXJzKSwgdmFyaWFibGVPYmplY3QsIHZh
cmlhYmxlT2JqZWN0KTsKLSAgICBfXyBtb3ZsX3JtKHNyYywgaW5kZXggKiBzaXplb2YoUmVnaXN0
ZXIpLCB2YXJpYWJsZU9iamVjdCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYg
Ly8gRU5BQkxFKEpJVCkKKyNlbmRpZiAvLyBKSVRJbmxpbmVNZXRob2RzX2gKSW5kZXg6IHd0Zi9Q
bGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHd0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiAzODk3NykK
KysrIHd0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjQsNiArNDI0LDcgQEAKIC8q
IENUSSBvbmx5IHN1cHBvcnRzIHg4NiBhdCB0aGUgbW9tZW50LCBhbmQgaGFzIG9ubHkgYmVlbiB0
ZXN0ZWQgb24gTWFjIGFuZCBXaW5kb3dzLiAqLwogI2lmICFkZWZpbmVkKEVOQUJMRV9KSVQpICYm
IFBMQVRGT1JNKFg4NikgJiYgKFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oV0lOKSkKICNkZWZp
bmUgRU5BQkxFX0pJVCAxCisjZGVmaW5lIEVOQUJMRV9KSVRfT1BUSU1JWkVfQ0FMTCAxCiAjZW5k
aWYKIAogLyogV1JFQyBvbmx5IHN1cHBvcnRzIHg4NiBhdCB0aGUgbW9tZW50LCBhbmQgaGFzIG9u
bHkgYmVlbiB0ZXN0ZWQgb24gTWFjIGFuZCBXaW5kb3dzLiAqLwo=
</data>
<flag name="review"
          id="12024"
          type_id="1"
          status="+"
          setter="zwarich"
    />
          </attachment>
      

    </bug>

</bugzilla>