<?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>206301</bug_id>
          
          <creation_ts>2020-01-15 11:16:50 -0800</creation_ts>
          <short_desc>Revert bytecode checkpoints since it breaks watch</short_desc>
          <delta_ts>2020-01-15 13:32:13 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1607028</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-01-15 11:16:50 -0800</bug_when>
    <thetext>Revert bytecode checkpoints since it breaks watch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607031</commentid>
    <comment_count>1</comment_count>
      <attachid>387808</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-01-15 11:19:43 -0800</bug_when>
    <thetext>Created attachment 387808
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607125</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-15 13:29:59 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 387808:

editing/spelling/spellcheck-async-remove-frame.html bug 158401 (authors: morrita@google.com, rniwa@webkit.org, and tony@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607126</commentid>
    <comment_count>3</comment_count>
      <attachid>387808</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-15 13:31:07 -0800</bug_when>
    <thetext>Comment on attachment 387808
Patch

Clearing flags on attachment: 387808

Committed r254632: &lt;https://trac.webkit.org/changeset/254632&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607127</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-15 13:31:09 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607128</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-01-15 13:32:13 -0800</bug_when>
    <thetext>&lt;rdar://problem/58617197&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387808</attachid>
            <date>2020-01-15 11:19:43 -0800</date>
            <delta_ts>2020-01-15 13:31:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206301-20200115111941.patch</filename>
            <type>text/plain</type>
            <size>631748</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0NTcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
OTBmMGFmZjY2OTVmMDE0NzcwODUzYTZmYjdhMDEwYmFjNmQ1MWUyLi44ZDkwMTQzYzY5M2E2Y2Ni
OTg0ZjMxMmQyMTAyNjIwOTdiYWNkNmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMCBAQAorMjAyMC0wMS0xNSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZlcnQgYnl0ZWNvZGUgY2hlY2twb2ludHMgc2luY2UgaXQgYnJl
YWtzIHdhdGNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMDYzMDEKKworICAgICAgICBVbnJldmlld2VkLCByZXZlcnQuCisKIDIwMjAtMDEtMTQgIENv
bW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIHJvbGxpbmcgb3V0IHIyNTQ0ODAsIHIyNTQ0OTYsIGFuZCByMjU0NTE3LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBmZjg1
YTFjNzU3MTRlMjhkYzA2OTRmYzJiYTUxMTYzZjU3NTExNzFmLi5mZjU0ZWFiZmE2NmIzOGE2ZDcz
ZDRmM2QxY2RhOGMyZWNiMjNmODU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIwLTAxLTE1ICBL
ZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJldmVydCBi
eXRlY29kZSBjaGVja3BvaW50cyBzaW5jZSBpdCBicmVha3Mgd2F0Y2gKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjMwMQorCisgICAgICAgIFVucmV2
aWV3ZWQsIHJldmVydC4KKwogMjAyMC0wMS0xNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5j
b20+CiAKICAgICAgICAgUGxhdGZvcm0uaCBpcyBvdXQgb2YgY29udHJvbCBQYXJ0IDQ6IFNwbGl0
IFBMQVRGT1JNXyogbWFjcm8gZGVmaW5pdGlvbnMgb3V0IG9mIFBsYXRmb3JtLmggYW5kIGludG8g
YSBuZXcgUGxhdGZvcm1MZWdhY3kuaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IGUxY2IwYTVkYjY1Y2YxNDJhYjQyZjFjMTBhNjg5MTNmYjA5ZjdjYTAuLjE5MGE2NmQ1YTk4
MmEyYzg3NDZlOTZiYTBhZGMzYmVmZTFiYjMwYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQKQEAgLTUyNSw3ICs1MjUsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogICAgIGJ5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgK
ICAgICBieXRlY29kZS9PcGNvZGUuaAogICAgIGJ5dGVjb2RlL09wY29kZVNpemUuaAotICAgIGJ5
dGVjb2RlL09wZXJhbmRzLmgKICAgICBieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCiAgICAg
Ynl0ZWNvZGUvUHV0QnlJZEZsYWdzLmgKICAgICBieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNm
aWxlbGlzdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2Zp
bGVsaXN0CmluZGV4IDllYWQ2NTNmYWFhYjE4OTNlYjkyZGQwMmU5NzU3OTY2ZGZhOTlhYzQuLmY4
YzFiNGFlNTU2YjUzNGMyYWIxMDFhYzM5MGJhNzExYjQ1Y2JhZWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CkBAIC02
NCw3ICs2NCw2IEBAICQoUFJPSkVDVF9ESVIpL2Rpc2Fzc2VtYmxlci91ZGlzODYvb3B0YWJsZS54
bWwKICQoUFJPSkVDVF9ESVIpL2Rpc2Fzc2VtYmxlci91ZGlzODYvdWRfaXRhYi5weQogJChQUk9K
RUNUX0RJUikvZ2VuZXJhdG9yL0FyZ3VtZW50LnJiCiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3Iv
QXNzZXJ0aW9uLnJiCi0kKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIKICQo
UFJPSkVDVF9ESVIpL2dlbmVyYXRvci9EU0wucmIKICQoUFJPSkVDVF9ESVIpL2dlbmVyYXRvci9G
aXRzLnJiCiAkKFBST0pFQ1RfRElSKS9nZW5lcmF0b3IvR2VuZXJhdGVkRmlsZS5yYgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2NmY5MzVkZGIxOTI5ZWNhMzJkNmZjZTExMmIzOTEx
NjYxMjc3MzlhLi4zOTQwZjFkMzRjMzRkOWEwM2I1MWRjYjVjYzk1OTI0YTVjNzFiOWQ4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTMxLDggKzkzMSw2IEBACiAJCTUzMzNCQkRC
MjExMEY3RDIwMDc2MThFQyAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2ODgwRjFCMTQzMjhCQjkwMEIw
OEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCAqLzsgfTsKIAkJNTMzM0JCREMyMTEw
RjdEOTAwNzYxOEVDIC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUM5REMyMTMyOERGODIwMDJCMkFENyAvKiBE
RkdTcGVjdWxhdGl2ZUpJVC5jcHAgKi87IH07CiAJCTUzMzNCQkREMjExMEY3RTEwMDc2MThFQyAv
KiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcCAqLzsgfTsKLQkJNTMzOEUyQTcyMzk2RUZGQjAwQzYxQkFEIC8qIENoZWNrcG9p
bnRPU1JFeGl0U2lkZVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzM4RTJBNjIzOTZFRkVDMDBDNjFCQUQgLyogQ2hlY2twb2ludE9TUkV4aXRT
aWRlU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQk1MzM4RUJBMzIzQUIwNEI4MDAzODI2NjIgLyogRlRMU2VsZWN0UHJlZGljdGFiaWxpdHku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMzhFQkEy
MjNBQjA0QTMwMDM4MjY2MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oICovOyB9OwogCQk1
MzQxRkM3MjFEQUMzNDNDMDBFN0U0RDcgLyogQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM0MUZDNzExREFDMzQz
QzAwRTdFNEQ3IC8qIEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCAqLzsgfTsKIAkJNTM0NjM4NzEx
RTcwQ0YzRDAwRjEyQUMxIC8qIEpTUnVuTG9vcFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3MDFFNzBDRjNEMDBGMTJBQzEgLyogSlNS
dW5Mb29wVGltZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1MzQ2Mzg3NTFFNzBEREVDMDBGMTJBQzEgLyogUHJvbWlzZVRpbWVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzQ2Mzg3NDFFNzBEREVD
MDBGMTJBQzEgLyogUHJvbWlzZVRpbWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM2MDMsOCArMzYwMSw2IEBACiAJCTUzMTgwNDVEMjJFQUFG
MEYwMDRBNzM0MiAvKiBCM0V4dHJhY3RWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0V4
dHJhY3RWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0V4dHJhY3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUzMUQ0RTE5MUY1OUNERDIwMEVDODM2QyAvKiB0ZXN0YXBpLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RhcGkuY3BwOyBwYXRoID0gQVBJL3Rlc3RzL3Rlc3Rh
cGkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzI2MzFCMzIxODc3N0E1MDA3
QjgxOTEgLyogSmF2YVNjcmlwdENvcmUubW9kdWxlbWFwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gInNvdXJjZWNvZGUu
bW9kdWxlLW1hcCI7IHBhdGggPSBKYXZhU2NyaXB0Q29yZS5tb2R1bGVtYXA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTUzMzhFMkE2MjM5NkVGRUMwMEM2MUJBRCAvKiBDaGVja3BvaW50
T1NSRXhpdFNpZGVTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDaGVj
a3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1
MzM4RUJBMjIzQUIwNEEzMDAzODI2NjIgLyogRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMU2VsZWN0UHJlZGljdGFiaWxpdHkuaDsg
cGF0aCA9IGZ0bC9GVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MzNCMTVERTFEQzdGNDYzMDA0RDUwMEEgLyogV2FzbU9wcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtT3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzNDFGQzZGMURBQzMzRTUwMEU3RTRENyAvKiBCM1dhc21Cb3VuZHNDaGVja1Zh
bHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzV2FzbUJvdW5k
c0NoZWNrVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNXYXNtQm91bmRzQ2hlY2tWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNDFGQzcxMURBQzM0M0MwMEU3RTRENyAvKiBC
M1dhc21Cb3VuZHNDaGVja1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaDsgcGF0aCA9IGIzL0IzV2FzbUJvdW5kc0NoZWNrVmFs
dWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2MTksOSArMzYxNSw2IEBACiAJ
CTUzNEM0NTdBMUJDNzAzREMwMDc0NzZBNyAvKiBUeXBlZEFycmF5Q29uc3RydWN0b3IuanMgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBUeXBlZEFycmF5Q29uc3RydWN0
b3IuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEM0NTdCMUJDNzI0MTEwMDc0
NzZBNyAvKiBKU1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUzNEM0NTdEMUJDNzI1NDkwMDc0NzZBNyAvKiBKU1R5cGVkQXJy
YXlWaWV3Q29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNTM0RDlCRjgyMzYzQzU1RDAwNTQ1MjREIC8qIFNldEl0ZXJhdG9yUHJvdG90eXBl
LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gU2V0SXRlcmF0b3JQ
cm90b3R5cGUuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUzNEQ5QkY5MjM2M0M1
NUQwMDU0NTI0RCAvKiBJdGVyYXRvckhlbHBlcnMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmph
dmFzY3JpcHQ7IHBhdGggPSBJdGVyYXRvckhlbHBlcnMuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTUzNEQ5QkZBMjM2M0M1NUQwMDU0NTI0RCAvKiBNYXBJdGVyYXRvclByb3RvdHlw
ZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IE1hcEl0ZXJhdG9y
UHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzRFMDM0RDFFNEQ0
QjE2MDAyMTNGNjQgLyogQWNjZXNzQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBY2Nlc3NDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzNEUwMzRG
MUU0RDk1RUQwMDIxM0Y2NCAvKiBBY2Nlc3NDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEFjY2Vzc0Nhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MzRFMDM1MzFFNTNCRDI5MDAyMTNGNjQgLyogSW50cmluc2ljR2V0dGVyQWNjZXNzQ2Fz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRyaW5zaWNHZXR0ZXJBY2Nl
c3NDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTQxLDcgKzU1MzQsNiBA
QAogCQkJCTBGNDg1MzI2MTg3REZERUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oICov
LAogCQkJCTBGQ0VGQUE5MTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgKi8s
CiAJCQkJMEZDRUZBQUExODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggKi8sCi0J
CQkJNTMzOEVCQTIyM0FCMDRBMzAwMzgyNjYyIC8qIEZUTFNlbGVjdFByZWRpY3RhYmlsaXR5Lmgg
Ki8sCiAJCQkJMEYyNUYxQUExODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5jcHAg
Ki8sCiAJCQkJMEYyNUYxQUIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5oICov
LAogCQkJCTBGMjVGMUFDMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3Bw
ICovLApAQCAtNTk2OCw3ICs1OTYwLDYgQEAKIAkJCQkxNDI5RDhEQzBFRDIyMDVCMDBCODk2MTkg
LyogQ2FsbEZyYW1lLmggKi8sCiAJCQkJQTdGODY5RUMwRjk1QzJFQzAwNTU4Njk3IC8qIENhbGxG
cmFtZUNsb3N1cmUuaCAqLywKIAkJCQlGRUEzQkJBNzIxMkI2NTU4MDBFOTNBRDEgLyogQ2FsbEZy
YW1lSW5saW5lcy5oICovLAotCQkJCTUzMzhFMkE2MjM5NkVGRUMwMEM2MUJBRCAvKiBDaGVja3Bv
aW50T1NSRXhpdFNpZGVTdGF0ZS5oICovLAogCQkJCTE0MjlEODVCMEVEMjE4RTkwMEI4OTYxOSAv
KiBDTG9vcFN0YWNrLmNwcCAqLywKIAkJCQkxNEQ3OTI2NDBEQUEwM0ZCMDAxQTlGMDUgLyogQ0xv
b3BTdGFjay5oICovLAogCQkJCUE3QzFFQUVCMTc5ODdBQjYwMDI5OURCMiAvKiBDTG9vcFN0YWNr
SW5saW5lcy5oICovLApAQCAtODYwOSw5ICs4NjAwLDcgQEAKIAkJCQlBNTI3MDQ4NTFEMDI3Qzg4
MDAzNTRDMzcgLyogR2xvYmFsT3BlcmF0aW9ucy5qcyAqLywKIAkJCQlFMzVFMDM2MTFCN0FCNDg1
MDA3M0FEMkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmpzICovLAogCQkJCUUz
M0Y1MDg4MUI4NDRBMUEwMDQxMzg1NiAvKiBJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5qcyAq
LywKLQkJCQk1MzREOUJGOTIzNjNDNTVEMDA1NDUyNEQgLyogSXRlcmF0b3JIZWxwZXJzLmpzICov
LAogCQkJCTdDRjlCQzVCMUI2NUQ5QTMwMDlEQjFFRiAvKiBJdGVyYXRvclByb3RvdHlwZS5qcyAq
LywKLQkJCQk1MzREOUJGQTIzNjNDNTVEMDA1NDUyNEQgLyogTWFwSXRlcmF0b3JQcm90b3R5cGUu
anMgKi8sCiAJCQkJNzAzNTU4N0MxQzQxODQxOTAwNEJEN0JGIC8qIE1hcFByb3RvdHlwZS5qcyAq
LywKIAkJCQlFMzA2Nzc5NzFCOEJDNkY1MDAzRjg3RjAgLyogTW9kdWxlTG9hZGVyLmpzICovLAog
CQkJCUE1MjcwNDg2MUQwMjdDODgwMDM1NEMzNyAvKiBOdW1iZXJDb25zdHJ1Y3Rvci5qcyAqLywK
QEAgLTg2MjIsNyArODYxMSw2IEBACiAJCQkJN0NGOUJDNUYxQjY1RDlCMTAwOURCMUVGIC8qIFJl
ZmxlY3RPYmplY3QuanMgKi8sCiAJCQkJNjU0Nzg4NDIxQzkzN0QyQzAwMDc4MUEwIC8qIFJlZ0V4
cFByb3RvdHlwZS5qcyAqLywKIAkJCQk4NDkyNUE5QzIyQjMwQ0M4MDBEMURGRkYgLyogUmVnRXhw
U3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCi0JCQkJNTM0RDlCRjgyMzYzQzU1RDAwNTQ1
MjREIC8qIFNldEl0ZXJhdG9yUHJvdG90eXBlLmpzICovLAogCQkJCTcwMzU1ODdEMUM0MTg0MTkw
MDRCRDdCRiAvKiBTZXRQcm90b3R5cGUuanMgKi8sCiAJCQkJN0NGOUJDNjAxQjY1RDlCMTAwOURC
MUVGIC8qIFN0cmluZ0NvbnN0cnVjdG9yLmpzICovLAogCQkJCTdDRjlCQzYxMUI2NUQ5QjEwMDlE
QjFFRiAvKiBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5qcyAqLywKQEAgLTkxMjUsNyArOTExMyw2
IEBACiAJCQkJRkUxQkQwMjExRTcyMDI3OTAwMTM0QkM5IC8qIENlbGxQcm9maWxlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRUMxNjAzMjIzMzlFOUY5MDBBMDRDQjggLyogQ2VsbFNpemUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMUMzRERBMUJCQ0UwOUUwMEU1MjNFNCAvKiBDZWxsU3RhdGUuaCBp
biBIZWFkZXJzICovLAotCQkJCTUzMzhFMkE3MjM5NkVGRkIwMEM2MUJBRCAvKiBDaGVja3BvaW50
T1NSRXhpdFNpZGVTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2QUFBRTUwRTFGNDI2NTAw
QUQ4N0Q4IC8qIENsYXNzSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMjYxQUE5MDk1
NjAwRDMzQjMzIC8qIENsb25lZEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
NUUwRTE2RjVDRDAwQjM0NDYwIC8qIENMb29wU3RhY2suaCBpbiBIZWFkZXJzICovLApAQCAtOTQ3
MSw3ICs5NDU4LDYgQEAKIAkJCQkwRjlENEMxMTFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hw
b2ludEV4Y2VwdGlvbkhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0ODUzMkExODdERkRF
QzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNF
RkFBQzE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuaCBpbiBIZWFkZXJzICovLAot
CQkJCTUzMzhFQkEzMjNBQjA0QjgwMDM4MjY2MiAvKiBGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNUYxQjIxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQ
YXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNUYxQjQxODE2MzVGMzAwNTIyRjM5IC8q
IEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMyMkU1QTcxREE2NDRB
ODAwNkU3NzA5IC8qIEZUTFNuaXBwZXRQYXJhbXMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgKaW5kZXggNjg4NDA4M2UwZmMxNzZhMjEzY2Q2NjgyNzY0YjJmNGViMzBjNmY2Yy4uNTZkOGEw
N2RiZmNkZWZkZWM3NjA4OWExM2RmYjUwMTFiNjRiMjVkMyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCkBAIC0y
MzksNiArMjM5LDEzIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRF
UihtX3ZhbHVlKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgorICAgIGV4cGxp
Y2l0IFJldHVybkFkZHJlc3NQdHIoRnVuY3Rpb25QdHI8dGFnPiBmdW5jdGlvbikKKyAgICAgICAg
OiBtX3ZhbHVlKHVudGFnQ29kZVB0cjx0YWc+KGZ1bmN0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkp
KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUihtX3ZhbHVlKTsKKyAg
ICB9CisKICAgICBjb25zdCB2b2lkKiB2YWx1ZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1
cm4gbV92YWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
UHJvYmVGcmFtZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUZyYW1l
LmgKaW5kZXggNDIyOWEwZDA5OTdhNGIwZjU4M2FjYWVhM2EwZjE2NTcyOWY0NmUwNS4uY2FiMzY4
ZGM3Y2QwZjNiNGY4NWI3NjliNzg4ZDQwZDYzZWE1NjM3NyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUZyYW1lLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUZyYW1lLmgKQEAgLTQ2LDE0ICs0NiwxNCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBnZXQ8VD4oQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVu
dCkgKiBzaXplb2YoUmVnaXN0ZXIpKTsKICAgICB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9
IEpTVmFsdWU+Ci0gICAgVCBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIFQg
b3BlcmFuZChpbnQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBnZXQ8VD4ob3BlcmFu
ZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpOworICAgICAgICByZXR1cm4gZ2V0PFQ+KHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkub2Zmc2V0KCkgKiBzaXplb2YoUmVn
aXN0ZXIpKTsKICAgICB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCA9IEpTVmFsdWU+Ci0gICAg
VCBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0KQorICAg
IFQgb3BlcmFuZChpbnQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBnZXQ8VD4ob3BlcmFuZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBvZmZz
ZXQpOworICAgICAgICByZXR1cm4gZ2V0PFQ+KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
b3BlcmFuZCkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgb2Zmc2V0KTsKICAgICB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtNjIsMTQgKzYyLDE0IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIHNldDxUPihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KSAq
IHNpemVvZihSZWdpc3RlciksIHZhbHVlKTsKICAgICB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLSAgICB2b2lkIHNldE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIFQgdmFsdWUp
CisgICAgdm9pZCBzZXRPcGVyYW5kKGludCBvcGVyYW5kLCBUIHZhbHVlKQogICAgIHsKLSAgICAg
ICAgc2V0PFQ+KG9wZXJhbmQub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpLCB2YWx1ZSk7Cisg
ICAgICAgIHNldDxUPihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpLm9mZnNl
dCgpICogc2l6ZW9mKFJlZ2lzdGVyKSwgdmFsdWUpOwogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotICAgIHZvaWQgc2V0T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgcHRy
ZGlmZl90IG9mZnNldCwgVCB2YWx1ZSkKKyAgICB2b2lkIHNldE9wZXJhbmQoaW50IG9wZXJhbmQs
IHB0cmRpZmZfdCBvZmZzZXQsIFQgdmFsdWUpCiAgICAgewotICAgICAgICBzZXQ8VD4ob3BlcmFu
ZC5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikgKyBvZmZzZXQsIHZhbHVlKTsKKyAgICAgICAg
c2V0PFQ+KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkub2Zmc2V0KCkgKiBz
aXplb2YoUmVnaXN0ZXIpICsgb2Zmc2V0LCB2YWx1ZSk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCA9IEpTVmFsdWU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5kZXggNDFi
Yzk2MWExNTMwODVmYmE4NTUwNjVjMzliNmM2ZGE2ZmIyYTgwZC4uMzVkMDE3NTZkNTMyYTcxZWMw
N2ZlNDAzZWY3YTUyNTBiNWZjNmY2MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApAQCAt
MjYzLDIwICsyNjMsMjAgQEAgaW5saW5lIHZvaWQgY2hlY2tEb2VzTm90VXNlSW5zdHJ1Y3Rpb24o
Q29tcGlsYXRpb24mIGNvbXBpbGF0aW9uLCBjb25zdCBjaGFyKiB0ZXgKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVHlwZT4KLXN0cnVjdCBCM09wZXJhbmQgeworc3RydWN0IE9wZXJhbmQgewogICAg
IGNvbnN0IGNoYXIqIG5hbWU7CiAgICAgVHlwZSB2YWx1ZTsKIH07CiAKLXR5cGVkZWYgQjNPcGVy
YW5kPGludDY0X3Q+IEludDY0T3BlcmFuZDsKLXR5cGVkZWYgQjNPcGVyYW5kPGludDMyX3Q+IElu
dDMyT3BlcmFuZDsKLXR5cGVkZWYgQjNPcGVyYW5kPGludDE2X3Q+IEludDE2T3BlcmFuZDsKLXR5
cGVkZWYgQjNPcGVyYW5kPGludDhfdD4gSW50OE9wZXJhbmQ7Cit0eXBlZGVmIE9wZXJhbmQ8aW50
NjRfdD4gSW50NjRPcGVyYW5kOwordHlwZWRlZiBPcGVyYW5kPGludDMyX3Q+IEludDMyT3BlcmFu
ZDsKK3R5cGVkZWYgT3BlcmFuZDxpbnQxNl90PiBJbnQxNk9wZXJhbmQ7Cit0eXBlZGVmIE9wZXJh
bmQ8aW50OF90PiBJbnQ4T3BlcmFuZDsKIAotI2RlZmluZSBNQUtFX09QRVJBTkQodmFsdWUpIEIz
T3BlcmFuZDxkZWNsdHlwZSh2YWx1ZSk+IHsgI3ZhbHVlLCB2YWx1ZSB9CisjZGVmaW5lIE1BS0Vf
T1BFUkFORCh2YWx1ZSkgT3BlcmFuZDxkZWNsdHlwZSh2YWx1ZSk+IHsgI3ZhbHVlLCB2YWx1ZSB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZsb2F0VHlwZT4KLXZvaWQgcG9wdWxhdGVXaXRoSW50ZXJl
c3RpbmdWYWx1ZXMoVmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFuZHMpCit2b2lk
IHBvcHVsYXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKFZlY3RvcjxPcGVyYW5kPEZsb2F0VHlwZT4+
JiBvcGVyYW5kcykKIHsKICAgICBvcGVyYW5kcy5hcHBlbmQoeyAiMC4iLCBzdGF0aWNfY2FzdDxG
bG9hdFR5cGU+KDAuKSB9KTsKICAgICBvcGVyYW5kcy5hcHBlbmQoeyAiLTAuIiwgc3RhdGljX2Nh
c3Q8RmxvYXRUeXBlPigtMC4pIH0pOwpAQCAtMzAyLDkgKzMwMiw5IEBAIHZvaWQgcG9wdWxhdGVX
aXRoSW50ZXJlc3RpbmdWYWx1ZXMoVmVjdG9yPEIzT3BlcmFuZDxGbG9hdFR5cGU+PiYgb3BlcmFu
ZHMpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZsb2F0VHlwZT4KLVZlY3RvcjxCM09wZXJhbmQ8
RmxvYXRUeXBlPj4gZmxvYXRpbmdQb2ludE9wZXJhbmRzKCkKK1ZlY3RvcjxPcGVyYW5kPEZsb2F0
VHlwZT4+IGZsb2F0aW5nUG9pbnRPcGVyYW5kcygpCiB7Ci0gICAgVmVjdG9yPEIzT3BlcmFuZDxG
bG9hdFR5cGU+PiBvcGVyYW5kczsKKyAgICBWZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiBvcGVy
YW5kczsKICAgICBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhvcGVyYW5kcyk7CiAgICAg
cmV0dXJuIG9wZXJhbmRzOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlLmNwcAppbmRleCA3MWRhODZkZmViZGYyNTg4ZmUyZTAxN2FlN2E1YzlhNmZkYjRk
YWVhLi5jOGI1MmI4ODI2YWU5ODIyOGVlODQ0NDk2YjFlZTdhOGU5YTdkMzNhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC0xNTIwLDcgKzE1
MjAsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lcmF0aW9uU3Rh
dGUmIHN0YXRlKQogCiAgICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5n
T3JPcmlnaW5hbCgpLmJpdHMoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKIAogICAgICAgICBpZiAobV90
eXBlID09IEdldHRlciB8fCBtX3R5cGUgPT0gU2V0dGVyKSB7CiAgICAgICAgICAgICBhdXRvJiBh
Y2Nlc3MgPSB0aGlzLT5hczxHZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlPigpOwpAQCAtMTgwOSw3ICsx
ODA5LDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0
YXRlJiBzdGF0ZSkKICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoCiAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0ZS5jYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFsKCkuYml0
cygpKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBqaXQubWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCk7CiAgICAgICAg
ICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNj
ZXNzQ2FzZVNuaXBwZXRQYXJhbXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0FjY2Vzc0Nhc2VTbmlwcGV0UGFyYW1zLmNwcAppbmRleCA2OWI1ZWUxMDZiMmU4MTc1NTc3Nzk3
MWJlMjcxNGM0YTFhOThjYmJjLi5iMWQ0MDRhMTQ1YmQyMTQxYjNhMGE5YzQzMTkxOGE1OGY5YWYx
ODlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2Fz
ZVNuaXBwZXRQYXJhbXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
Y2Nlc3NDYXNlU25pcHBldFBhcmFtcy5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogCiAg
ICAgICAgIGppdC5zdG9yZTMyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoc3RhdGUuY2FsbFNpdGVJbmRleEZvckV4Y2VwdGlvbkhhbmRsaW5nT3JPcmlnaW5hbCgpLmJp
dHMoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0
YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcykpKTsKIAogICAgICAgICBqaXQubWFrZVNwYWNlT25TdGFja0Zv
ckNDYWxsKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUR1bXBlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVEdW1wZXIuY3BwCmluZGV4IDgzNjUxMTVmNDIxNzkxYTVjNjY0ODNhNWE3OTA1Y2FlNWMwZWUz
ZTEuLjYwNThmYjA2MjAzOTQ2YzRjZDU2ZWY2YTk4Mzg3OWQyZDZjODFmYjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcApAQCAtNjMs
NyArNjMsNyBAQCB2b2lkIEJ5dGVjb2RlRHVtcGVyQmFzZTo6cHJpbnRMb2NhdGlvbkFuZE9wKElu
c3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbG9jYXRpb24sCiAKIHZvaWQgQnl0ZWNvZGVEdW1wZXJC
YXNlOjpkdW1wVmFsdWUoVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsKLSAgICBtX291dC5wcmludGYo
IiVzIiwgcmVnaXN0ZXJOYW1lKHJlZykuZGF0YSgpKTsKKyAgICBtX291dC5wcmludGYoIiVzIiwg
cmVnaXN0ZXJOYW1lKHJlZy5vZmZzZXQoKSkuZGF0YSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVHJhaXRzPgpAQCAtODMsMTIgKzgzLDEyIEBAIHRlbXBsYXRlIHZvaWQgQnl0ZWNvZGVEdW1w
ZXJCYXNlOjpkdW1wVmFsdWUoR2VuZXJpY0JvdW5kTGFiZWw8V2FzbTo6R2VuZXJhdG9yVHJhCiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCiB0ZW1wbGF0ZTxjbGFzcyBCbG9jaz4KLUNT
dHJpbmcgQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpyZWdpc3Rlck5hbWUoVmlydHVhbFJlZ2lzdGVy
IHIpIGNvbnN0CitDU3RyaW5nIEJ5dGVjb2RlRHVtcGVyPEJsb2NrPjo6cmVnaXN0ZXJOYW1lKGlu
dCByKSBjb25zdAogewotICAgIGlmIChyLmlzQ29uc3RhbnQoKSkKKyAgICBpZiAoaXNDb25zdGFu
dFJlZ2lzdGVySW5kZXgocikpCiAgICAgICAgIHJldHVybiBjb25zdGFudE5hbWUocik7CiAKLSAg
ICByZXR1cm4gdG9DU3RyaW5nKHIpOworICAgIHJldHVybiB0b0NTdHJpbmcoVmlydHVhbFJlZ2lz
dGVyKHIpKTsKIH0KIAogdGVtcGxhdGUgPGNsYXNzIEJsb2NrPgpAQCAtOTgsMTAgKzk4LDEwIEBA
IGludCBCeXRlY29kZUR1bXBlcjxCbG9jaz46Om91dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rp
b25TdHJlYW06Ok9mZnNldCBvZmZzZXQpCiB9CiAKIHRlbXBsYXRlPGNsYXNzIEJsb2NrPgotQ1N0
cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZShWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSBjb25zdAorQ1N0cmluZyBCeXRlY29kZUR1bXBlcjxCbG9jaz46OmNvbnN0YW50TmFtZShp
bnQgaW5kZXgpIGNvbnN0CiB7Ci0gICAgYXV0byB2YWx1ZSA9IGJsb2NrKCktPmdldENvbnN0YW50
KHJlZyk7Ci0gICAgcmV0dXJuIHRvQ1N0cmluZyh2YWx1ZSwgIigiLCByZWcsICIpIik7CisgICAg
YXV0byB2YWx1ZSA9IGJsb2NrKCktPmdldENvbnN0YW50KGluZGV4KTsKKyAgICByZXR1cm4gdG9D
U3RyaW5nKHZhbHVlLCAiKCIsIFZpcnR1YWxSZWdpc3RlcihpbmRleCksICIpIik7CiB9CiAKIHRl
bXBsYXRlPGNsYXNzIEJsb2NrPgpAQCAtMzM1LDcgKzMzNSw3IEBAIHZvaWQgQnl0ZWNvZGVEdW1w
ZXI6OmR1bXBDb25zdGFudHMoKQogICAgIH0KIH0KIAotQ1N0cmluZyBCeXRlY29kZUR1bXBlcjo6
Y29uc3RhbnROYW1lKFZpcnR1YWxSZWdpc3RlciBpbmRleCkgY29uc3QKK0NTdHJpbmcgQnl0ZWNv
ZGVEdW1wZXI6OmNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0CiB7CiAgICAgRnVuY3Rpb25D
b2RlQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soKTsKICAgICBhdXRvIHZhbHVlID0gZm9ybWF0
Q29uc3RhbnQoYmxvY2stPmdldENvbnN0YW50VHlwZShpbmRleCksIGJsb2NrLT5nZXRDb25zdGFu
dChpbmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlRHVtcGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVE
dW1wZXIuaAppbmRleCBlZGIxMTI5MjFhZjc1M2U2M2Q4NjEzNzJmYmRlMGVlZjg5ZmNhMTU5Li4w
ZDcxNjc1MDM5NGIxNWQ0ZWI1ZTg3YzVhODgyNTEwNzVlZmUwM2VlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuaApAQCAtNjEsNyArNjEsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wVmFsdWUoVCB2KSB7IG1fb3V0LnByaW50KHYpOyB9CiAK
IHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIENTdHJpbmcgcmVnaXN0ZXJOYW1lKFZpcnR1YWxSZWdp
c3RlcikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQ1N0cmluZyByZWdpc3Rlck5hbWUoaW50KSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlv
blN0cmVhbTo6T2Zmc2V0KSBjb25zdCA9IDA7CiAKICAgICBCeXRlY29kZUR1bXBlckJhc2UoUHJp
bnRTdHJlYW0mIG91dCkKQEAgLTkxLDExICs5MSwxMSBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lk
IGR1bXBCeXRlY29kZShjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBpdCwgY29uc3QgSUNT
dGF0dXNNYXAmKTsKIAotICAgIENTdHJpbmcgcmVnaXN0ZXJOYW1lKFZpcnR1YWxSZWdpc3Rlcikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgQ1N0cmluZyByZWdpc3Rlck5hbWUoaW50IHIpIGNvbnN0IG92
ZXJyaWRlOwogICAgIGludCBvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpP
ZmZzZXQgb2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIENT
dHJpbmcgY29uc3RhbnROYW1lKFZpcnR1YWxSZWdpc3RlcikgY29uc3Q7CisgICAgdmlydHVhbCBD
U3RyaW5nIGNvbnN0YW50TmFtZShpbnQgaW5kZXgpIGNvbnN0OwogCiAgICAgQmxvY2sqIG1fYmxv
Y2s7CiB9OwpAQCAtMTM1LDcgKzEzNSw3IEBAIHByaXZhdGU6CiAgICAgdXNpbmcgSlNDOjpCeXRl
Y29kZUR1bXBlcjxGdW5jdGlvbkNvZGVCbG9jaz46OkJ5dGVjb2RlRHVtcGVyOwogCiAgICAgdm9p
ZCBkdW1wQ29uc3RhbnRzKCk7Ci0gICAgQ1N0cmluZyBjb25zdGFudE5hbWUoVmlydHVhbFJlZ2lz
dGVyIGluZGV4KSBjb25zdCBvdmVycmlkZTsKKyAgICBDU3RyaW5nIGNvbnN0YW50TmFtZShpbnQg
aW5kZXgpIGNvbnN0IG92ZXJyaWRlOwogICAgIENTdHJpbmcgZm9ybWF0Q29uc3RhbnQoVHlwZSwg
dWludDY0X3QpIGNvbnN0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlSW5kZXguY3BwCmluZGV4IGEyYzFmNDE1YjE5N2Q0NmJkNjgxNGEyMDExMWM4
N2M1MDg3MjIyNGYuLjE1ZDYxYmE5MDQwMWE3MTE3ZGMwZjlmMjZlMTkxMzdlYjJjMzE1OWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUluZGV4LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5jcHAK
QEAgLTI1LDcgKzI1LDYgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkJ5dGVj
b2RlSW5kZXguaCIKLQogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsKQEAgLTMzLDggKzMyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEJ5dGVjb2RlSW5k
ZXg6OmR1bXAoV1RGOjpQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludCgi
YmMjIiwgb2Zmc2V0KCkpOwotICAgIGlmIChjaGVja3BvaW50KCkpCi0gICAgICAgIG91dC5wcmlu
dCgiY3AjIiwgY2hlY2twb2ludCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbmRleC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW5kZXguaAppbmRleCAxMGZiYTQ0
MDU4ZWM5ZGZlZDI1NDgwOWE2ZDc4MzM3ZDAxMWE0YjYxLi41Mjk1YzI5YjEyMjgxMzFmNzJhYzIw
NzMxYzFkM2JjZTkzNTE1OGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVJbmRleC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUluZGV4LmgKQEAgLTI2LDcgKzI2LDYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBu
YW1lc3BhY2UgV1RGIHsKIGNsYXNzIFByaW50U3RyZWFtOwpAQCAtMzgsMzMgKzM3LDI0IEBAIGNs
YXNzIEJ5dGVjb2RlSW5kZXggewogcHVibGljOgogICAgIEJ5dGVjb2RlSW5kZXgoKSA9IGRlZmF1
bHQ7CiAgICAgQnl0ZWNvZGVJbmRleChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0g
ICAgICAgIDogbV9wYWNrZWRCaXRzKGRlbGV0ZWRWYWx1ZSgpLmFzQml0cygpKQorICAgICAgICA6
IG1fb2Zmc2V0KGRlbGV0ZWRWYWx1ZSgpLmFzQml0cygpKQogICAgIHsKICAgICB9CisgICAgZXhw
bGljaXQgQnl0ZWNvZGVJbmRleCh1aW50MzJfdCBieXRlY29kZU9mZnNldCkKKyAgICAgICAgOiBt
X29mZnNldChieXRlY29kZU9mZnNldCkKKyAgICB7IH0KIAotICAgIGV4cGxpY2l0IEJ5dGVjb2Rl
SW5kZXgodWludDMyX3QgYnl0ZWNvZGVPZmZzZXQsIHVpbnQ4X3QgY2hlY2twb2ludCA9IDApCi0g
ICAgICAgIDogbV9wYWNrZWRCaXRzKHBhY2soYnl0ZWNvZGVPZmZzZXQsIGNoZWNrcG9pbnQpKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKCp0aGlzKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIHVpbnQzMl90IG51bWJlck9mQ2hlY2twb2ludHMgPSA0OwotICAgIHN0YXRpY19hc3NlcnQo
aGFzT25lQml0U2V0KG51bWJlck9mQ2hlY2twb2ludHMpLCAibnVtYmVyT2ZDaGVja3BvaW50cyBz
aG91bGQgYmUgYSBwb3dlciBvZiAyIik7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBj
aGVja3BvaW50TWFzayA9IG51bWJlck9mQ2hlY2twb2ludHMgLSAxOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgdWludDMyX3QgY2hlY2twb2ludFNoaWZ0ID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIo
bnVtYmVyT2ZDaGVja3BvaW50cyk7Ci0KLSAgICB1aW50MzJfdCBvZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX3BhY2tlZEJpdHMgPj4gY2hlY2twb2ludFNoaWZ0OyB9Ci0gICAgdWludDhfdCBjaGVj
a3BvaW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWNrZWRCaXRzICYgY2hlY2twb2ludE1hc2s7IH0K
LSAgICB1aW50MzJfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBtX3BhY2tlZEJpdHM7IH0KKyAg
ICB1aW50MzJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIHVpbnQz
Ml90IGFzQml0cygpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CiAKLSAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QgeyByZXR1cm4gV1RGOjppbnRIYXNoKG1fcGFja2VkQml0cyk7IH0KKyAgICB1
bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gV1RGOjppbnRIYXNoKG1fb2Zmc2V0KTsgfQog
ICAgIHN0YXRpYyBCeXRlY29kZUluZGV4IGRlbGV0ZWRWYWx1ZSgpIHsgcmV0dXJuIGZyb21CaXRz
KGludmFsaWRPZmZzZXQgLSAxKTsgfQogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUo
KSBjb25zdCB7IHJldHVybiAqdGhpcyA9PSBkZWxldGVkVmFsdWUoKTsgfQogCiAgICAgc3RhdGlj
IEJ5dGVjb2RlSW5kZXggZnJvbUJpdHModWludDMyX3QgYml0cyk7CiAKICAgICAvLyBDb21wYXJp
c29uIG9wZXJhdG9ycy4KLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gbV9wYWNrZWRCaXRzICE9IGludmFsaWRPZmZzZXQgJiYgbV9wYWNrZWRCaXRzICE9IGRlbGV0
ZWRWYWx1ZSgpLm9mZnNldCgpOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2Zmc2V0ICE9IGludmFsaWRPZmZzZXQgJiYgbV9vZmZzZXQgIT0gZGVsZXRl
ZFZhbHVlKCkub2Zmc2V0KCk7IH0KICAgICBib29sIG9wZXJhdG9yID09KGNvbnN0IEJ5dGVjb2Rl
SW5kZXgmIG90aGVyKSBjb25zdCB7IHJldHVybiBhc0JpdHMoKSA9PSBvdGhlci5hc0JpdHMoKTsg
fQogICAgIGJvb2wgb3BlcmF0b3IgIT0oY29uc3QgQnl0ZWNvZGVJbmRleCYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKQEAgLTc5LDIyICs2OSwxMyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgaW52YWxpZE9mZnNl
dCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKIAotICAgIHN0YXRpYyB1
aW50MzJfdCBwYWNrKHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgsIHVpbnQ4X3QgY2hlY2twb2ludCk7
Ci0KLSAgICB1aW50MzJfdCBtX3BhY2tlZEJpdHMgeyBpbnZhbGlkT2Zmc2V0IH07CisgICAgdWlu
dDMyX3QgbV9vZmZzZXQgeyBpbnZhbGlkT2Zmc2V0IH07CiB9OwogCi1pbmxpbmUgdWludDMyX3Qg
Qnl0ZWNvZGVJbmRleDo6cGFjayh1aW50MzJfdCBieXRlY29kZUluZGV4LCB1aW50OF90IGNoZWNr
cG9pbnQpCi17Ci0gICAgQVNTRVJUKGNoZWNrcG9pbnQgPCBudW1iZXJPZkNoZWNrcG9pbnRzKTsK
LSAgICBBU1NFUlQoKGJ5dGVjb2RlSW5kZXggPDwgY2hlY2twb2ludFNoaWZ0KSA+PiBjaGVja3Bv
aW50U2hpZnQgPT0gYnl0ZWNvZGVJbmRleCk7Ci0gICAgcmV0dXJuIGJ5dGVjb2RlSW5kZXggPDwg
Y2hlY2twb2ludFNoaWZ0IHwgY2hlY2twb2ludDsKLX0KLQogaW5saW5lIEJ5dGVjb2RlSW5kZXgg
Qnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHModWludDMyX3QgYml0cykKIHsKICAgICBCeXRlY29kZUlu
ZGV4IHJlc3VsdDsKLSAgICByZXN1bHQubV9wYWNrZWRCaXRzID0gYml0czsKKyAgICByZXN1bHQu
bV9vZmZzZXQgPSBiaXRzOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCmluZGV4IDYwZDk4Y2ZiMTYyODYz
NmZjZWYzNzY3OTJiOWMyMTRmY2M0YWEzNDcuLmE5YmQ0ODM3MWI0ZTMwZGFmNjA0NGQwOTQ5YTA3
MWQxNGExYWQwNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpc3QucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGlzdC5yYgpAQCAtNTksNyArNTksNyBAQCB0eXBlcyBbCiAgICAgOldhdGNocG9pbnRTZXQs
CiAKICAgICA6VmFsdWVQcm9maWxlLAotICAgIDpWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0
ZXJCdWZmZXIsCisgICAgOlZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIsCiAgICAgOlVuYXJ5
QXJpdGhQcm9maWxlLAogICAgIDpCaW5hcnlBcml0aFByb2ZpbGUsCiAgICAgOkFycmF5UHJvZmls
ZSwKQEAgLTc5NiwxMyArNzk2LDYgQEAgb3AgOmNhbGxfdmFyYXJncywKICAgICBtZXRhZGF0YTog
ewogICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwKICAgICAgICAgcHJvZmlsZTog
VmFsdWVQcm9maWxlLAotICAgIH0sCi0gICAgdG1wczogewotICAgICAgICBhcmdDb3VudEluY2x1
ZGluZ1RoaXM6IHVuc2lnbmVkLAotICAgIH0sCi0gICAgY2hlY2twb2ludHM6IHsKLSAgICAgICAg
ZGV0ZXJtaW5pbmdBcmdDb3VudDogbmlsLAotICAgICAgICBtYWtlQ2FsbDogbmlsLAogICAgIH0K
IAogb3AgOnRhaWxfY2FsbF92YXJhcmdzLApAQCAtODE3LDEzICs4MTAsNiBAQCBvcCA6dGFpbF9j
YWxsX3ZhcmFyZ3MsCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJh
eVByb2ZpbGUsCiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKLSAgICB9LAotICAgIHRt
cHM6IHsKLSAgICAgICAgYXJnQ291bnRJbmNsdWRpbmdUaGlzOiB1bnNpZ25lZAotICAgIH0sCi0g
ICAgY2hlY2twb2ludHM6IHsKLSAgICAgICAgZGV0ZXJtaW5pbmdBcmdDb3VudDogbmlsLAotICAg
ICAgICBtYWtlQ2FsbDogbmlsLAogICAgIH0KIAogb3AgOnRhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cywKQEAgLTg2NCwxMyArODUwLDYgQEAgb3AgOmNvbnN0cnVjdF92YXJhcmdzLAogICAgIG1l
dGFkYXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAogICAgICAgICBw
cm9maWxlOiBWYWx1ZVByb2ZpbGUsCi0gICAgfSwKLSAgICB0bXBzOiB7Ci0gICAgICAgIGFyZ0Nv
dW50SW5jbHVkaW5nVGhpczogdW5zaWduZWQKLSAgICB9LAotICAgIGNoZWNrcG9pbnRzOiB7Ci0g
ICAgICAgIGRldGVybWluaW5nQXJnQ291bnQ6IG5pbCwKLSAgICAgICAgbWFrZUNhbGw6IG5pbCwK
ICAgICB9CiAKIG9wIDpyZXQsCkBAIC0xMDE4LDcgKzk5Nyw3IEBAIG9wIDpjYXRjaCwKICAgICAg
ICAgdGhyb3duVmFsdWU6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7
Ci0gICAgICAgIGJ1ZmZlcjogVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyLios
CisgICAgICAgIGJ1ZmZlcjogVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlci4qLAogICAgIH0K
IAogb3AgOnRocm93LApAQCAtMTI2NCw4ICsxMjQzLDYgQEAgb3AgOmxsaW50X25hdGl2ZV9jYWxs
X3RyYW1wb2xpbmUKIG9wIDpsbGludF9uYXRpdmVfY29uc3RydWN0X3RyYW1wb2xpbmUKIG9wIDps
bGludF9pbnRlcm5hbF9mdW5jdGlvbl9jYWxsX3RyYW1wb2xpbmUKIG9wIDpsbGludF9pbnRlcm5h
bF9mdW5jdGlvbl9jb25zdHJ1Y3RfdHJhbXBvbGluZQotb3AgOmNoZWNrcG9pbnRfb3NyX2V4aXRf
ZnJvbV9pbmxpbmVkX2NhbGxfdHJhbXBvbGluZQotb3AgOmNoZWNrcG9pbnRfb3NyX2V4aXRfdHJh
bXBvbGluZQogb3AgOmhhbmRsZVVuY2F1Z2h0RXhjZXB0aW9uCiBvcCA6b3BfY2FsbF9yZXR1cm5f
bG9jYXRpb24KIG9wIDpvcF9jb25zdHJ1Y3RfcmV0dXJuX2xvY2F0aW9uCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwCmluZGV4IDc5NzVmZWYzYzg4MTQzMTgxNTdhNTlkYmU4YmU1NTQ4Mzg4ZmUzNjUuLjkx
OGUxZDIxMzRhNjBiNmNmZjEwMTE0M2FiNTU0MzNiOGI0M2Y0NDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwCkBAIC0yMDEsMzkgKzIwMSw0IEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
OjpkdW1wUmVzdWx0cyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICB9CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIEVudW1UeXBlMSwgdHlwZW5hbWUgRW51bVR5cGUyPgotY29uc3RleHByIGJvb2wg
ZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChFbnVtVHlwZTEgdjEsIEVudW1UeXBlMiB2MikKLXsK
LSAgICB1c2luZyBJbnRUeXBlMSA9IHR5cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPEVudW1U
eXBlMT46OnR5cGU7Ci0gICAgdXNpbmcgSW50VHlwZTIgPSB0eXBlbmFtZSBzdGQ6OnVuZGVybHlp
bmdfdHlwZTxFbnVtVHlwZTI+Ojp0eXBlOwotICAgIGlmIGNvbnN0ZXhwciAoc2l6ZW9mKEludFR5
cGUxKSA+IHNpemVvZihJbnRUeXBlMikpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnRU
eXBlMT4odjEpID09IHN0YXRpY19jYXN0PEludFR5cGUxPih2Mik7Ci0gICAgZWxzZQotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50VHlwZTI+KHYxKSA9PSBzdGF0aWNfY2FzdDxJbnRUeXBl
Mj4odjIpOwotfQotCi1CaXRtYXA8bWF4TnVtQ2hlY2twb2ludFRtcHM+IHRtcExpdmVuZXNzRm9y
Q2hlY2twb2ludChjb25zdCBDb2RlQmxvY2smIGNvZGVCbG9jaywgQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluZGV4KQotewotICAgIEJpdG1hcDxtYXhOdW1DaGVja3BvaW50VG1wcz4gcmVzdWx0Owot
ICAgIHVpbnQ4X3QgY2hlY2twb2ludCA9IGJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpOwotCi0g
ICAgaWYgKCFjaGVja3BvaW50KQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgc3dpdGNo
IChjb2RlQmxvY2suaW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCktPm9wY29kZUlEKCkp
IHsKLSAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKLSAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJh
cmdzOgotICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChlbnVtVmFsdWVzRXF1YWxBc0ludGVncmFsKE9wQ2FsbFZhcmFyZ3M6Om1ha2VDYWxsLCBP
cFRhaWxDYWxsVmFyYXJnczo6bWFrZUNhbGwpICYmIGVudW1WYWx1ZXNFcXVhbEFzSW50ZWdyYWwo
T3BDYWxsVmFyYXJnczo6YXJnQ291bnRJbmNsdWRpbmdUaGlzLCBPcFRhaWxDYWxsVmFyYXJnczo6
YXJnQ291bnRJbmNsdWRpbmdUaGlzKSk7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoZW51bVZhbHVl
c0VxdWFsQXNJbnRlZ3JhbChPcENhbGxWYXJhcmdzOjptYWtlQ2FsbCwgT3BDb25zdHJ1Y3RWYXJh
cmdzOjptYWtlQ2FsbCkgJiYgZW51bVZhbHVlc0VxdWFsQXNJbnRlZ3JhbChPcENhbGxWYXJhcmdz
OjphcmdDb3VudEluY2x1ZGluZ1RoaXMsIE9wQ29uc3RydWN0VmFyYXJnczo6YXJnQ291bnRJbmNs
dWRpbmdUaGlzKSk7Ci0gICAgICAgIGlmIChjaGVja3BvaW50ID09IE9wQ2FsbFZhcmFyZ3M6Om1h
a2VDYWxsKQotICAgICAgICAgICAgcmVzdWx0LnNldChPcENhbGxWYXJhcmdzOjphcmdDb3VudElu
Y2x1ZGluZ1RoaXMpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBkZWZhdWx0
OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgKaW5kZXggM2U1ZWRj
MGE2OGFlNDRkZjY1MTVjZGJmZDRiNDI3ZWY2OWVlZjE4MC4uNzM3OWIzYzliYzcyMzI1OTEwOWM2
MWU3YWRhNTMzZDllN2QyZjJjOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaApAQCAtMjgsNyArMjgsNiBA
QAogI2luY2x1ZGUgIkJ5dGVjb2RlQmFzaWNCbG9jay5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR3Jh
cGguaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlIDx3dGYvQml0bWFwLmg+CiAj
aW5jbHVkZSA8d3RmL0Zhc3RCaXRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC05OCw4
ICs5Nyw2IEBAIHByaXZhdGU6CiAgICAgQnl0ZWNvZGVHcmFwaCBtX2dyYXBoOwogfTsKIAotQml0
bWFwPG1heE51bUNoZWNrcG9pbnRUbXBzPiB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoY29uc3Qg
Q29kZUJsb2NrJiwgQnl0ZWNvZGVJbmRleCk7Ci0KIGlubGluZSBib29sIG9wZXJhbmRJc0Fsd2F5
c0xpdmUoaW50IG9wZXJhbmQpOwogaW5saW5lIGJvb2wgb3BlcmFuZFRoYXRJc05vdEFsd2F5c0xp
dmVJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCk7CiBpbmxpbmUg
Ym9vbCBvcGVyYW5kSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9wZXJhbmQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpc0lubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgKaW5kZXggZGU2Y2E4ZGM5MTA5Yjc4OTY3
ZjEwNTUwMDlkYTMwZTg5OTg0ODI4Mi4uM2QxMmUxOTVjNjk5ZWZiZjk2MzZhMmI5NzRlNzk0NGNk
YWVkNzJjMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCkBAIC0zMywyMiArMzMs
MjIgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSBib29sIHZpcnR1YWxSZWdpc3Rlcklz
QWx3YXlzTGl2ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnKQoraW5saW5lIGJvb2wgb3BlcmFuZElzQWx3
YXlzTGl2ZShpbnQgb3BlcmFuZCkKIHsKLSAgICByZXR1cm4gIXJlZy5pc0xvY2FsKCk7CisgICAg
cmV0dXJuICFWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkuaXNMb2NhbCgpOwogfQogCi1pbmxpbmUg
Ym9vbCB2aXJ0dWFsUmVnaXN0ZXJUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RC
aXRWZWN0b3ImIG91dCwgVmlydHVhbFJlZ2lzdGVyIHJlZykKK2lubGluZSBib29sIG9wZXJhbmRU
aGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGNvbnN0IEZhc3RCaXRWZWN0b3ImIG91dCwgaW50IG9w
ZXJhbmQpCiB7Ci0gICAgdW5zaWduZWQgbG9jYWwgPSByZWcudG9Mb2NhbCgpOworICAgIHVuc2ln
bmVkIGxvY2FsID0gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKTsKICAgICBpZiAo
bG9jYWwgPj0gb3V0Lm51bUJpdHMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVy
biBvdXRbbG9jYWxdOwogfQogCi1pbmxpbmUgYm9vbCB2aXJ0dWFsUmVnaXN0ZXJJc0xpdmUoY29u
c3QgRmFzdEJpdFZlY3RvciYgb3V0LCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKK2lubGluZSBi
b29sIG9wZXJhbmRJc0xpdmUoY29uc3QgRmFzdEJpdFZlY3RvciYgb3V0LCBpbnQgb3BlcmFuZCkK
IHsKLSAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKG9wZXJhbmQpIHx8IHZp
cnR1YWxSZWdpc3RlclRoYXRJc05vdEFsd2F5c0xpdmVJc0xpdmUob3V0LCBvcGVyYW5kKTsKKyAg
ICByZXR1cm4gb3BlcmFuZElzQWx3YXlzTGl2ZShvcGVyYW5kKSB8fCBvcGVyYW5kVGhhdElzTm90
QWx3YXlzTGl2ZUlzTGl2ZShvdXQsIG9wZXJhbmQpOwogfQogCiBpbmxpbmUgYm9vbCBpc1ZhbGlk
UmVnaXN0ZXJGb3JMaXZlbmVzcyhWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggNzhlYjRmN2QxODEwNTAx
ZGI4YzBlMDMyYTk4ZmY2NzVhNGY0OTk5OC4uM2YzMmZlODdlNGMwYWMyNzIyZDY5NGI0MWYxOWJl
YzRkN2Q1OTdkMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNp
bmNsdWRlICJCeXRlY29kZVVzZURlZi5oIgogI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCi0j
aW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJDb2RlQmxv
Y2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiREZHQ2Fw
YWJpbGl0aWVzLmgiCkBAIC00MTAsNyArNDA5LDcgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsK
ICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoY2xvbmVkU3ltYm9sVGFibGUt
Pm1fbG9jayk7CiAgICAgICAgICAgICBjbG9uZWRTeW1ib2xUYWJsZS0+cHJlcGFyZUZvclR5cGVQ
cm9maWxpbmcobG9ja2VyKTsKICAgICAgICAgfQotICAgICAgICByZXBsYWNlQ29uc3RhbnQoVmly
dHVhbFJlZ2lzdGVyKHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+bW9kdWxlRW52aXJv
bm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQoKSksIGNsb25lZFN5bWJvbFRh
YmxlKTsKKyAgICAgICAgcmVwbGFjZUNvbnN0YW50KHVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jay0+bW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZUNvbnN0YW50UmVnaXN0ZXJPZmZzZXQo
KSwgY2xvbmVkU3ltYm9sVGFibGUpOwogICAgIH0KIAogICAgIGJvb2wgc2hvdWxkVXBkYXRlRnVu
Y3Rpb25IYXNFeGVjdXRlZENhY2hlID0gbV91bmxpbmtlZENvZGUtPndhc0NvbXBpbGVkV2l0aFR5
cGVQcm9maWxlck9wY29kZXMoKSB8fCBtX3VubGlua2VkQ29kZS0+d2FzQ29tcGlsZWRXaXRoQ29u
dHJvbEZsb3dQcm9maWxlck9wY29kZXMoKTsKQEAgLTY0NCw3ICs2NDMsNyBAQCBib29sIENvZGVC
bG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1
dGFibGUsIFVubGluawogICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLm1fZ2V0UHV0SW5mby5yZXNv
bHZlVHlwZSgpID09IExvY2FsQ2xvc3VyZVZhcikgewogICAgICAgICAgICAgICAgIC8vIE9ubHkg
ZG8gd2F0Y2hpbmcgaWYgdGhlIHByb3BlcnR5IHdlJ3JlIHB1dHRpbmcgdG8gaXMgbm90IGFub255
bW91cy4KICAgICAgICAgICAgICAgICBpZiAoYnl0ZWNvZGUubV92YXIgIT0gVUlOVF9NQVgpIHsK
LSAgICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0ganNDYXN0PFN5
bWJvbFRhYmxlKj4oZ2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0
aC5zeW1ib2xUYWJsZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1i
b2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3lt
Ym9sVGFibGVPclNjb3BlRGVwdGguc3ltYm9sVGFibGUoKS5vZmZzZXQoKSkpOwogICAgICAgICAg
ICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNvZGUu
bV92YXIpOwogICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN5
bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgPSBzeW1i
b2xUYWJsZS0+ZmluZChsb2NrZXIsIGlkZW50LmltcGwoKSk7CkBAIC03MTIsNyArNzExLDggQEAg
Ym9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSog
b3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVCeXRlY29kZUxvY2FsbHlSZXNvbHZl
ZDogewotICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxT
eW1ib2xUYWJsZSo+KGdldENvbnN0YW50KGJ5dGVjb2RlLm1fc3ltYm9sVGFibGVPclNjb3BlRGVw
dGguc3ltYm9sVGFibGUoKSkpOworICAgICAgICAgICAgICAgIGludCBzeW1ib2xUYWJsZUluZGV4
ID0gYnl0ZWNvZGUubV9zeW1ib2xUYWJsZU9yU2NvcGVEZXB0aC5zeW1ib2xUYWJsZSgpLm9mZnNl
dCgpOworICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGpzQ2FzdDxT
eW1ib2xUYWJsZSo+KGdldENvbnN0YW50KHN5bWJvbFRhYmxlSW5kZXgpKTsKICAgICAgICAgICAg
ICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IGlkZW50aWZpZXIoYnl0ZWNvZGUubV9pZGVu
dGlmaWVyKTsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN5bWJv
bFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgIC8vIElmIG91ciBwYXJlbnQgc2NvcGUg
d2FzIGNyZWF0ZWQgd2hpbGUgcHJvZmlsaW5nIHdhcyBkaXNhYmxlZCwgaXQgd2lsbCBub3QgaGF2
ZSBwcmVwYXJlZCBmb3IgcHJvZmlsaW5nIHlldC4KQEAgLTEwODgsMTUgKzEwODgsNiBAQCBzdGF0
aWMgYm9vbCBzaG91bGRNYXJrVHJhbnNpdGlvbihWTSYgdm0sIERGRzo6V2Vha1JlZmVyZW5jZVRy
YW5zaXRpb24mIHRyYW5zaXRpbwogICAgIAogICAgIHJldHVybiB0cnVlOwogfQotCi1CeXRlY29k
ZUluZGV4IENvZGVCbG9jazo6Ynl0ZWNvZGVJbmRleEZvckV4aXQoQnl0ZWNvZGVJbmRleCBleGl0
SW5kZXgpIGNvbnN0Ci17Ci0gICAgaWYgKGV4aXRJbmRleC5jaGVja3BvaW50KCkpIHsKLSAgICAg
ICAgY29uc3QgYXV0byYgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbnMoKS5hdChleGl0SW5kZXgp
OwotICAgICAgICBleGl0SW5kZXggPSBpbnN0cnVjdGlvbi5uZXh0KCkuaW5kZXgoKTsKLSAgICB9
Ci0gICAgcmV0dXJuIGV4aXRJbmRleDsKLX0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAog
dm9pZCBDb2RlQmxvY2s6OnByb3BhZ2F0ZVRyYW5zaXRpb25zKGNvbnN0IENvbmN1cnJlbnRKU0xv
Y2tlciYsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtMTgyNSwxMCArMTgxNiwxMCBAQCB2b2lk
IENvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tcHV0ZWRGb3JCeXRlY29kZUluZGV4
U2xvdyhjb25zdCBPcENhdGNoJgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1ldGVy
cygpOyArK2kpCiAgICAgICAgIGxpdmVPcGVyYW5kcy5hcHBlbmQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoaSkpOwogCi0gICAgYXV0byBwcm9maWxlcyA9IG1ha2VVbmlxdWU8VmFsdWVQcm9m
aWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyPihsaXZlT3BlcmFuZHMuc2l6ZSgpKTsKKyAgICBh
dXRvIHByb2ZpbGVzID0gbWFrZVVuaXF1ZTxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyPihs
aXZlT3BlcmFuZHMuc2l6ZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVChwcm9maWxlcy0+bV9zaXpl
ID09IGxpdmVPcGVyYW5kcy5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBw
cm9maWxlcy0+bV9zaXplOyArK2kpCi0gICAgICAgIHByb2ZpbGVzLT5tX2J1ZmZlci5nZXQoKVtp
XS5tX29wZXJhbmQgPSBsaXZlT3BlcmFuZHNbaV07CisgICAgICAgIHByb2ZpbGVzLT5tX2J1ZmZl
ci5nZXQoKVtpXS5tX29wZXJhbmQgPSBsaXZlT3BlcmFuZHNbaV0ub2Zmc2V0KCk7CiAKICAgICBj
cmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CiAKQEAgLTI3MjcsNyArMjcxOCw3IEBAIHZvaWQg
Q29kZUJsb2NrOjp1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5l
c3ModW5zaWduZWQmIG51bWJlCiAKICAgICBpZiAoYXV0byogcmFyZURhdGEgPSBtX3JhcmVEYXRh
LmdldCgpKSB7CiAgICAgICAgIGZvciAoYXV0byYgcHJvZmlsZUJ1Y2tldCA6IHJhcmVEYXRhLT5t
X2NhdGNoUHJvZmlsZXMpIHsKLSAgICAgICAgICAgIHByb2ZpbGVCdWNrZXQtPmZvckVhY2goWyZd
IChWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgICAg
IHByb2ZpbGVCdWNrZXQtPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9m
aWxlKSB7CiAgICAgICAgICAgICAgICAgcHJvZmlsZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24o
bG9ja2VyKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggNjhmZDAxZmQ5MTRjNWU0MTllYjg4MzkyNzlm
NTdhZjYwYzRkNjYwYi4uMGY5YmJlYWMyNzYxYTYzZWQ0MDk4ZTIyNWFlOGJlNDY3OGM3ZWNhNyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaApAQCAtMTYzLDcg
KzE2Myw2IEBAIHB1YmxpYzoKICAgICBpbnQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1
cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KIAogICAgIGludCBudW1WYXJzKCkgY29uc3QgeyByZXR1
cm4gbV9udW1WYXJzOyB9Ci0gICAgaW50IG51bVRtcHMoKSBjb25zdCB7IHJldHVybiBtX3VubGlu
a2VkQ29kZS0+aGFzQ2hlY2twb2ludHMoKSAqIG1heE51bUNoZWNrcG9pbnRUbXBzOyB9CiAKICAg
ICBpbnQqIGFkZHJlc3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJz
OyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CkBAIC0yMzIs
MjAgKzIzMSwyMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJbnN0YWxsZWRWTVRyYXBCcmVha3Bv
aW50cygpIGNvbnN0OwogICAgIGJvb2wgaW5zdGFsbFZNVHJhcEJyZWFrcG9pbnRzKCk7CiAKLSAg
ICBpbmxpbmUgYm9vbCBpc0tub3duTm90SW1tZWRpYXRlKFZpcnR1YWxSZWdpc3RlciByZWcpCisg
ICAgaW5saW5lIGJvb2wgaXNLbm93bk5vdEltbWVkaWF0ZShpbnQgaW5kZXgpCiAgICAgewotICAg
ICAgICBpZiAocmVnID09IHRoaXNSZWdpc3RlcigpICYmICFpc1N0cmljdE1vZGUoKSkKKyAgICAg
ICAgaWYgKGluZGV4ID09IHRoaXNSZWdpc3RlcigpLm9mZnNldCgpICYmICFpc1N0cmljdE1vZGUo
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIGlmIChyZWcuaXNDb25zdGFu
dCgpKQotICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0YW50KHJlZykuaXNDZWxsKCk7CisgICAg
ICAgIGlmIChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpCisgICAgICAgICAgICByZXR1
cm4gZ2V0Q29uc3RhbnQoaW5kZXgpLmlzQ2VsbCgpOwogCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNUZW1wb3JhcnlSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgcmVnKQorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RlbXBvcmFyeVJlZ2lz
dGVySW5kZXgoaW50IGluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHJlZy5vZmZzZXQoKSA+
PSBtX251bVZhcnM7CisgICAgICAgIHJldHVybiBpbmRleCA+PSBtX251bVZhcnM7CiAgICAgfQog
CiAgICAgSGFuZGxlckluZm8qIGhhbmRsZXJGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXgs
IFJlcXVpcmVkSGFuZGxlciA9IFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7CkBAIC01ODQs
OSArNTgzLDEwIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJy
aWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVn
aXN0ZXJzOyB9Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZp
cnR1YWxSZWdpc3RlciByZWcpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29u
c3RhbnRJbmRleCgpXTsgfQotICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3Jl
Zy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KLSAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbltyZWcudG9Db25zdGFudEluZGV4KCldOyB9CisgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+JiBjb25zdGFudFJlZ2lzdGVyKGludCBpbmRleCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lz
dGVyc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsgfQorICAgIHN0YXRpYyBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW50IGluZGV4KSB7IHJl
dHVybiBpbmRleCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsgfQorICAgIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0uZ2V0KCk7
IH0KKyAgICBBTFdBWVNfSU5MSU5FIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBjb25zdGFudFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVy
SW5kZXhdOyB9CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5k
ZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KICAgICBpbnQgbnVt
YmVyT2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQpA
QCAtNzc2LDcgKzc3Niw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0T3B0aW1pemF0aW9uVGhy
ZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uUmVzdWx0KTsKICAgICAK
LSAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXhGb3JFeGl0KEJ5dGVjb2RlSW5kZXgpIGNv
bnN0OwogICAgIHVpbnQzMl90IG9zckV4aXRDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9vc3JF
eGl0Q291bnRlcjsgfQogCiAgICAgdm9pZCBjb3VudE9TUkV4aXQoKSB7IG1fb3NyRXhpdENvdW50
ZXIrKzsgfQpAQCAtODc3LDcgKzg3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgVmVjdG9yPFNpbXBs
ZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwogICAgICAgICBWZWN0b3I8U3RyaW5nSnVt
cFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAKLSAgICAgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXI+PiBtX2NhdGNo
UHJvZmlsZXM7CisgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVQcm9maWxlQW5k
T3BlcmFuZEJ1ZmZlcj4+IG1fY2F0Y2hQcm9maWxlczsKIAogICAgICAgICBEaXJlY3RFdmFsQ29k
ZUNhY2hlIG1fZGlyZWN0RXZhbENvZGVDYWNoZTsKICAgICB9OwpAQCAtOTQ0LDEwICs5NDMsMTAg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgVmVjdG9y
PFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgVmVjdG9yPFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiwgU2Ny
aXB0RXhlY3V0YWJsZSogdG9wTGV2ZWxFeGVjdXRhYmxlKTsKIAotICAgIHZvaWQgcmVwbGFjZUNv
bnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcsIEpTVmFsdWUgdmFsdWUpCisgICAgdm9pZCByZXBs
YWNlQ29uc3RhbnQoaW50IGluZGV4LCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgQVNT
RVJUKHJlZy5pc0NvbnN0YW50KCkgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihyZWcudG9Db25zdGFu
dEluZGV4KCkpIDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOwotICAgICAgICBtX2NvbnN0
YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uc2V0KCptX3ZtLCB0aGlzLCB2YWx1
ZSk7CisgICAgICAgIEFTU0VSVChpc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkgJiYgc3Rh
dGljX2Nhc3Q8c2l6ZV90PihpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSA8IG1f
Y29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tp
bmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XS5zZXQoKm1fdm0sIHRoaXMsIHZhbHVl
KTsKICAgICB9CiAKICAgICBib29sIHNob3VsZFZpc2l0U3Ryb25nbHkoY29uc3QgQ29uY3VycmVu
dEpTTG9ja2VyJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZU9yaWdpbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4u
aAppbmRleCBmOTgyOWEyODZmOGFhYmY0ZDMzMmZmZjFlNzFlYTNjODNmOWJjNjBhLi4yMTA2ODEz
ZjBhMWVhYTUxMzRkMGYzOWJkNzUxYzczMThlYmMwNDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKQEAgLTE2MCw5ICsxNjAsNyBAQCBwdWJsaWM6CiAg
ICAgdW5zaWduZWQgYXBwcm94aW1hdGVIYXNoKElubGluZUNhbGxGcmFtZSogdGVybWluYWwgPSBu
dWxscHRyKSBjb25zdDsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KLSAgICB2
b2lkIHdhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1bmN0aW9uJikgY29uc3Q7Ci0KLSAgICBpbmxp
bmUgYm9vbCBpbmxpbmVTdGFja0NvbnRhaW5zQWN0aXZlQ2hlY2twb2ludCgpIGNvbnN0OworICAg
IHZvaWQgd2Fsa1VwSW5saW5lU3RhY2soY29uc3QgRnVuY3Rpb24mKTsKICAgICAKICAgICAvLyBH
ZXQgdGhlIGlubGluZSBzdGFjay4gVGhpcyBpcyBzbG93LCBhbmQgaXMgaW50ZW5kZWQgZm9yIGRl
YnVnZ2luZyBvbmx5LgogICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBpbmxpbmVTdGFjaygpIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29k
ZUxpdmVuZXNzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MuaAppbmRleCA0N2M2NTdjOGRmOTAzODNhZjY1ZWI1YzNiOGE4YjA1OTRkMGM0ZGE3
Li5lNGE1NzViMDNhN2QxYjU5OWFkMGQ1NmNlZGRkYWY0YmEwNTAyZjNhIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaApA
QCAtMjYsMTYgKzI2LDEyIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpcy5oIgotI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSA8d3RmL0Zh
c3RCaXRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpczsKLWNsYXNzIENvZGVCbG9jazsKIAotLy8gTm90ZTogRnVsbCBieXRlY29kZSBs
aXZlbmVzcyBkb2VzIG5vdCB0cmFjayBhbnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpdmVuZXNz
IG9mIHRlbXBzLgotLy8gSWYgeW91IHdhbnQgdG1wIGxpdmVuZXNzIGZvciBhIGNoZWNrcG9pbnQg
YXNrIHRtcExpdmVuZXNzRm9yQ2hlY2twb2ludC4KIGNsYXNzIEZ1bGxCeXRlY29kZUxpdmVuZXNz
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTUxLDE1ICs0Nywx
NSBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
fQogICAgIAotICAgIGJvb2wgdmlydHVhbFJlZ2lzdGVySXNMaXZlKFZpcnR1YWxSZWdpc3RlciBy
ZWcsIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50
IHBvaW50KSBjb25zdAorICAgIGJvb2wgb3BlcmFuZElzTGl2ZShpbnQgb3BlcmFuZCwgQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4LCBMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQgcG9pbnQpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gdmlydHVhbFJlZ2lzdGVySXNBbHdheXNMaXZlKHJl
ZykgfHwgdmlydHVhbFJlZ2lzdGVyVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShnZXRMaXZlbmVz
cyhieXRlY29kZUluZGV4LCBwb2ludCksIHJlZyk7CisgICAgICAgIHJldHVybiBvcGVyYW5kSXNB
bHdheXNMaXZlKG9wZXJhbmQpIHx8IG9wZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKGdl
dExpdmVuZXNzKGJ5dGVjb2RlSW5kZXgsIHBvaW50KSwgb3BlcmFuZCk7CiAgICAgfQogICAgIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOwogICAg
IAotICAgIC8vIEZJWE1FOiBVc2UgRmFzdEJpdFZlY3RvcidzIHZpZXcgbWVjaGFuaXNtIHRvIG1h
a2UgdGhlbSBjb21wYWN0LgorICAgIC8vIEZJWE1FOiBVc2UgRmFzdEJpdFZlY3RvcidzIHZpZXcg
bWVjaGFuc2ltIHRvIG1ha2UgdGhlbSBjb21wYWN0LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ0Mjc8UGFzdGU+CiAgICAgVmVjdG9yPEZhc3RCaXRW
ZWN0b3IsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2JlZm9yZVVzZVZlY3RvcjsKICAgICBW
ZWN0b3I8RmFzdEJpdFZlY3RvciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fYWZ0ZXJVc2VW
ZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5l
Q2FsbEZyYW1lLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZy
YW1lLmgKaW5kZXggZTI5ZjM4NGQxZDA2NzJmZWVhMDcxMjA1YmNhYTI4MWE2NDliMjIyOS4uOTc1
MDhiYmYwYzQ1Y2I5N2E0Nzg1MTU5NzA0MTcxZGRmNmRkMWRhMyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaApAQCAtMTc5LDggKzE3OSw3
IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+
IGJhc2VsaW5lQ29kZUJsb2NrOwogICAgIENvZGVPcmlnaW4gZGlyZWN0Q2FsbGVyOwogCi0gICAg
dW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgOiAyMjsgLy8gRG8gbm90IGluY2x1
ZGUgZml4dXBzLgotICAgIHVuc2lnbmVkIHRtcE9mZnNldCA6IDEwOworICAgIHVuc2lnbmVkIGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIHsgMCB9OyAvLyBEbyBub3QgaW5jbHVkZSBmaXh1cHMu
CiAgICAgc2lnbmVkIHN0YWNrT2Zmc2V0IDogMjg7CiAgICAgdW5zaWduZWQga2luZCA6IDM7IC8v
IHJlYWwgdHlwZSBpcyBLaW5kCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsIDogMTsgLy8gSWYgZmFs
c2UgdGhlbiB3ZSBrbm93IHRoYXQgY2FsbGVlL3Njb3BlIGFyZSBjb25zdGFudHMgYW5kIHRoZSBE
Rkcgd29uJ3QgdHJlYXQgdGhlbSBhcyB2YXJpYWJsZXMsIGkuZS4gdGhleSBoYXZlIHRvIGJlIHJl
Y292ZXJlZCBtYW51YWxseS4KQEAgLTE5Miw5ICsxOTEsNyBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZy
YW1lIHsKICAgICAvLyBJbmxpbmVDYWxsRnJhbWUncyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3Ig
aXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25mdXNpb24gaWYKICAgICAvLyB3ZSBmb3Jnb3QgdG8g
aW5pdGlhbGl6ZSBleHBsaWNpdGx5LgogICAgIElubGluZUNhbGxGcmFtZSgpCi0gICAgICAgIDog
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoMCkKLSAgICAgICAgLCB0bXBPZmZzZXQoMCkKLSAg
ICAgICAgLCBzdGFja09mZnNldCgwKQorICAgICAgICA6IHN0YWNrT2Zmc2V0KDApCiAgICAgICAg
ICwga2luZChDYWxsKQogICAgICAgICAsIGlzQ2xvc3VyZUNhbGwoZmFsc2UpCiAgICAgewpAQCAt
MjIyLDEyICsyMTksNiBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3RhdGljX2Nhc3Q8c2lnbmVkPihzdGFja09mZnNldCkgPT0gb2Zmc2V0KTsKICAg
ICB9CiAKLSAgICB2b2lkIHNldFRtcE9mZnNldCh1bnNpZ25lZCBvZmZzZXQpCi0gICAgewotICAg
ICAgICB0bXBPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRpY19j
YXN0PHVuc2lnbmVkPih0bXBPZmZzZXQpID09IG9mZnNldCk7Ci0gICAgfQotCiAgICAgcHRyZGlm
Zl90IGNhbGxlckZyYW1lT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXpl
b2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpOyB9CiAgICAgcHRy
ZGlmZl90IHJldHVyblBDT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gc3RhY2tPZmZzZXQgKiBzaXpl
b2YoUmVnaXN0ZXIpICsgQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpOyB9CiAKQEAgLTI1Niw5
ICsyNDcsOSBAQCBpbmxpbmUgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFu
ZEJhc2VsaW5lQ29kZUJsb2NrKGNvbnN0IENvZGVPcmlnaQogICAgIHJldHVybiBiYXNlbGluZUNv
ZGVCbG9jazsKIH0KIAotLy8gVGhlc2UgZnVuY3Rpb24gaXMgZGVmaW5lZCBoZXJlIGFuZCBub3Qg
aW4gQ29kZU9yaWdpbiBiZWNhdXNlIGl0IG5lZWRzIGFjY2VzcyB0byB0aGUgZGlyZWN0Q2FsbGVy
IGZpZWxkIGluIElubGluZUNhbGxGcmFtZQorLy8gVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGhl
cmUgYW5kIG5vdCBpbiBDb2RlT3JpZ2luIGJlY2F1c2UgaXQgbmVlZHMgYWNjZXNzIHRvIHRoZSBk
aXJlY3RDYWxsZXIgZmllbGQgaW4gSW5saW5lQ2FsbEZyYW1lCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
RnVuY3Rpb24+Ci1pbmxpbmUgdm9pZCBDb2RlT3JpZ2luOjp3YWxrVXBJbmxpbmVTdGFjayhjb25z
dCBGdW5jdGlvbiYgZnVuY3Rpb24pIGNvbnN0CitpbmxpbmUgdm9pZCBDb2RlT3JpZ2luOjp3YWxr
VXBJbmxpbmVTdGFjayhjb25zdCBGdW5jdGlvbiYgZnVuY3Rpb24pCiB7CiAgICAgQ29kZU9yaWdp
biBjb2RlT3JpZ2luID0gKnRoaXM7CiAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTI3MCwzOCArMjYx
LDExIEBAIGlubGluZSB2b2lkIENvZGVPcmlnaW46OndhbGtVcElubGluZVN0YWNrKGNvbnN0IEZ1
bmN0aW9uJiBmdW5jdGlvbikgY29uc3QKICAgICB9CiB9CiAKLWlubGluZSBib29sIENvZGVPcmln
aW46OmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVDaGVja3BvaW50KCkgY29uc3QKLXsKLSAgICBi
b29sIHJlc3VsdCA9IGZhbHNlOwotICAgIHdhbGtVcElubGluZVN0YWNrKFsmXSAoQ29kZU9yaWdp
biBvcmlnaW4pIHsKLSAgICAgICAgaWYgKG9yaWdpbi5ieXRlY29kZUluZGV4KCkuY2hlY2twb2lu
dCgpKQotICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICB9KTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1BTFdBWVNfSU5MSU5FIE9wZXJhbmQgcmVtYXBPcGVyYW5kKElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJhbmQpCi17Ci0gICAgaWYgKGlubGlu
ZUNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIG9wZXJhbmQuaXNUbXAoKSA/IE9wZXJhbmQ6OnRt
cChvcGVyYW5kLnZhbHVlKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCkgOiBvcGVyYW5k
LnZpcnR1YWxSZWdpc3RlcigpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKLSAgICBy
ZXR1cm4gb3BlcmFuZDsKLX0KLQotQUxXQVlTX0lOTElORSBPcGVyYW5kIHJlbWFwT3BlcmFuZChJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKLXsK
LSAgICByZXR1cm4gcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZChyZWcpKTsK
LX0KLQotQUxXQVlTX0lOTElORSBPcGVyYW5kIHVubWFwT3BlcmFuZChJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSwgT3BlcmFuZCBvcGVyYW5kKQorQUxXQVlTX0lOTElORSBWaXJ0dWFs
UmVnaXN0ZXIgcmVtYXBPcGVyYW5kKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVnKQogewogICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCi0gICAgICAg
IHJldHVybiBvcGVyYW5kLmlzVG1wKCkgPyBPcGVyYW5kOjp0bXAob3BlcmFuZC52YWx1ZSgpIC0g
aW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQpIDogT3BlcmFuZChvcGVyYW5kLnZpcnR1YWxSZWdp
c3RlcigpIC0gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCk7Ci0gICAgcmV0dXJuIG9wZXJh
bmQ7Ci19Ci0KLUFMV0FZU19JTkxJTkUgT3BlcmFuZCB1bm1hcE9wZXJhbmQoSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciByZWcpCi17Ci0gICAgcmV0dXJu
IHVubWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQocmVnKSk7CisgICAgICAgIHJl
dHVybiBWaXJ0dWFsUmVnaXN0ZXIocmVnLm9mZnNldCgpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCk7CisgICAgcmV0dXJuIHJlZzsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZS5oCmluZGV4IDgxZjVhMGM0ODljNGVmNmRkY2JhNmUxYjQ2MmQ3MmQ5ZTk4NjQ2ZDcu
LmJmYjk0YjM1ZmNkNjM5YTRhMWYxZDAwYzhhYmIxNDVlYjFjNjRhNTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZS5oCkBAIC0yNiw3ICsyNiw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNvbmN1cnJl
bnRKU0xvY2suaCIKLSNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmls
ZS5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CkBAIC01MCw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIExh
enlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCwgT3Bl
cmFuZCBvcGVyYW5kKQorICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KEJ5dGVjb2RlSW5k
ZXggYnl0ZWNvZGVJbmRleCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgICAgIDogbV9i
eXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICwgbV9vcGVyYW5kKG9wZXJhbmQp
CiAgICAgewpAQCAtNzAsNyArNjksNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4Lmhhc2goKSAr
IG1fb3BlcmFuZC52YWx1ZSgpICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3BlcmFuZC5raW5k
KCkpOworICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4Lmhhc2goKSArIG1fb3BlcmFuZC5v
ZmZzZXQoKTsKICAgICB9CiAgICAgCiAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkg
Y29uc3QKQEAgLTc5LDcgKzc4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9ieXRlY29k
ZUluZGV4OwogICAgIH0KIAotICAgIE9wZXJhbmQgb3BlcmFuZCgpIGNvbnN0CisgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKCEhKnRoaXMp
OwogICAgICAgICByZXR1cm4gbV9vcGVyYW5kOwpAQCAtOTEsNyArOTAsNyBAQCBwdWJsaWM6CiAg
ICAgfQogcHJpdmF0ZTogCiAgICAgQnl0ZWNvZGVJbmRleCBtX2J5dGVjb2RlSW5kZXg7Ci0gICAg
T3BlcmFuZCBtX29wZXJhbmQ7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKIH07CiAK
IHN0cnVjdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleUhhc2ggewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUuY3BwCmluZGV4IDcwMWMzMzA4OWI5NTZmNzk3ODZlYzg3YWEyYzY5YThiYzA2NzA0
NzIuLjJiNjlmMzZjN2ZiZGExMDU1Nzg5ZGZmZGU2N2YzOTZmODZlMmI1MDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZS5jcHAKQEAgLTQyLDcgKzQyLDcgQEAgTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZSBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpmcm9tTGF6eU9wZXJhbmQo
CiAgICAgcmVzdWx0Lm1fa2luZCA9IExhenlPcGVyYW5kOwogICAgIHJlc3VsdC51LmxhenlPcGVy
YW5kLmNvZGVCbG9jayA9IGNvZGVCbG9jazsKICAgICByZXN1bHQudS5sYXp5T3BlcmFuZC5ieXRl
Y29kZU9mZnNldCA9IGtleS5ieXRlY29kZUluZGV4KCk7Ci0gICAgcmVzdWx0LnUubGF6eU9wZXJh
bmQub3BlcmFuZCA9IGtleS5vcGVyYW5kKCk7CisgICAgcmVzdWx0LnUubGF6eU9wZXJhbmQub3Bl
cmFuZCA9IGtleS5vcGVyYW5kKCkub2Zmc2V0KCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApA
QCAtNTcsNyArNTcsNyBAQCB2b2lkIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6OmVtaXRS
ZXBvcnRWYWx1ZShDQ2FsbEhlbHBlcnMmIGppdCwgSlNWYWx1ZVJlZwogICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgIGNhc2UgTGF6eU9wZXJhbmQ6IHsKLSAgICAgICAgTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQsIHUubGF6eU9w
ZXJhbmQub3BlcmFuZCk7CisgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1
LmxhenlPcGVyYW5kLmJ5dGVjb2RlT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIodS5sYXp5T3BlcmFu
ZC5vcGVyYW5kKSk7CiAgICAgICAgIAogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KHUubGF6eU9wZXJhbmQuY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICBMYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZSogcHJvZmlsZSA9CkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZTo6cmVwb3J0VmFsdWUoSlNWYWx1ZSB2YWx1ZSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgY2FzZSBMYXp5T3BlcmFuZDogewotICAgICAgICBMYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZUtleSBrZXkodS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCwgdS5sYXp5T3BlcmFu
ZC5vcGVyYW5kKTsKKyAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkga2V5KHUubGF6
eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQsIFZpcnR1YWxSZWdpc3Rlcih1LmxhenlPcGVyYW5kLm9w
ZXJhbmQpKTsKIAogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHUubGF6eU9wZXJh
bmQuY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSog
cHJvZmlsZSA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaAppbmRleCBlOGI2NWVhZDQ2ZTQ3NTA1
MzVjZDBhOWRiZjgwYWUzOWIwYjRhMWNiLi41N2I0YjE3NzJmMDRmYmRmMzM2ODUwNTQzNjU3YzE1
ZDljNDFkYjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgKQEAgLTEwNyw3ICsxMDcsNyBA
QCBwcml2YXRlOgogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2s7CiAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0OwotICAgICAg
ICAgICAgT3BlcmFuZCBvcGVyYW5kOworICAgICAgICAgICAgaW50IG9wZXJhbmQ7CiAgICAgICAg
IH0gbGF6eU9wZXJhbmQ7CiAgICAgfSB1OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09wZXJhbmRzLmgKaW5kZXggZDQ3YTY4ZjY0MDM4ZTNiMWRjNTU3YTQ0ZDcwODUwNDAyNzQy
MGJmZS4uZjI5ZmY5Zjk3MzZhZWIzNzM0NTk0NDZkYzc0Y2QxMjAyNzU2MjU3NiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwyMjcgKzM1LDExMSBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IE9wZXJhbmRW
YWx1ZVRyYWl0czsKIAotY29uc3RleHByIHVuc2lnbmVkIG1heE51bUNoZWNrcG9pbnRUbXBzID0g
NDsKLQotLy8gQSBPcGVyYW5kS2luZDo6VG1wIGlzIG9uZSB0aGF0IGV4aXN0cyBmb3IgZXhpdGlu
ZyB0byBhIGNoZWNrcG9pbnQgYnV0IGRvZXMgbm90IGV4aXN0IGJldHdlZW4gYnl0ZWNvZGVzLgot
ZW51bSBjbGFzcyBPcGVyYW5kS2luZCB7IEFyZ3VtZW50LCBMb2NhbCwgVG1wIH07Ci0KLWNsYXNz
IE9wZXJhbmQgewotcHVibGljOgotICAgIE9wZXJhbmQoKSA9IGRlZmF1bHQ7Ci0gICAgT3BlcmFu
ZChjb25zdCBPcGVyYW5kJikgPSBkZWZhdWx0OwotCi0gICAgT3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkKLSAgICAgICAgOiBtX2tpbmQob3BlcmFuZC5pc0xvY2FsKCkgPyBPcGVyYW5k
S2luZDo6TG9jYWwgOiBPcGVyYW5kS2luZDo6QXJndW1lbnQpCi0gICAgICAgICwgbV9vcGVyYW5k
KG9wZXJhbmQub2Zmc2V0KCkpCi0gICAgeyB9Ci0KLSAgICBPcGVyYW5kKE9wZXJhbmRLaW5kIGtp
bmQsIGludCBvcGVyYW5kKQotICAgICAgICA6IG1fa2luZChraW5kKQotICAgICAgICAsIG1fb3Bl
cmFuZChvcGVyYW5kKQotICAgIHsgCi0gICAgICAgIEFTU0VSVChraW5kID09IE9wZXJhbmRLaW5k
OjpUbXAgfHwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLmlzTG9jYWwoKSA9PSAoa2luZCA9PSBP
cGVyYW5kS2luZDo6TG9jYWwpKTsKLSAgICB9Ci0gICAgc3RhdGljIE9wZXJhbmQgdG1wKHVpbnQz
Ml90IGluZGV4KSB7IHJldHVybiBPcGVyYW5kKE9wZXJhbmRLaW5kOjpUbXAsIGluZGV4KTsgfQot
Ci0gICAgT3BlcmFuZEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotICAgIGlu
dCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmFuZDsgfQotICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fa2luZCAh
PSBPcGVyYW5kS2luZDo6VG1wKTsKLSAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX29w
ZXJhbmQpOwotICAgIH0KLSAgICB1aW50NjRfdCBhc0JpdHMoKSBjb25zdCB7IHJldHVybiBiaXR3
aXNlX2Nhc3Q8dWludDY0X3Q+KCp0aGlzKTsgfQotICAgIHN0YXRpYyBPcGVyYW5kIGZyb21CaXRz
KHVpbnQ2NF90IHZhbHVlKTsKLQotICAgIGJvb2wgaXNUbXAoKSBjb25zdCB7IHJldHVybiBraW5k
KCkgPT0gT3BlcmFuZEtpbmQ6OlRtcDsgfQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsg
cmV0dXJuIGtpbmQoKSA9PSBPcGVyYW5kS2luZDo6QXJndW1lbnQ7IH0KLSAgICBib29sIGlzTG9j
YWwoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gT3BlcmFuZEtpbmQ6OkxvY2FsICYmIHZpcnR1
YWxSZWdpc3RlcigpLmlzTG9jYWwoKTsgfQotICAgIGJvb2wgaXNIZWFkZXIoKSBjb25zdCB7IHJl
dHVybiBraW5kKCkgIT0gT3BlcmFuZEtpbmQ6OlRtcCAmJiB2aXJ0dWFsUmVnaXN0ZXIoKS5pc0hl
YWRlcigpOyB9Ci0gICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9
IE9wZXJhbmRLaW5kOjpUbXAgJiYgdmlydHVhbFJlZ2lzdGVyKCkuaXNDb25zdGFudCgpOyB9Ci0K
LSAgICBpbnQgdG9Bcmd1bWVudCgpIGNvbnN0IHsgQVNTRVJUKGlzQXJndW1lbnQoKSk7IHJldHVy
biB2aXJ0dWFsUmVnaXN0ZXIoKS50b0FyZ3VtZW50KCk7IH0KLSAgICBpbnQgdG9Mb2NhbCgpIGNv
bnN0IHsgQVNTRVJUKGlzTG9jYWwoKSk7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXIoKS50b0xvY2Fs
KCk7IH0KLQotICAgIGlubGluZSBib29sIGlzVmFsaWQoKSBjb25zdDsKLQotICAgIGlubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgT3BlcmFuZCYpIGNvbnN0OwotCi0gICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgT3BlcmFuZEtpbmQgbV9raW5kIHsg
T3BlcmFuZEtpbmQ6OkFyZ3VtZW50IH07Ci0gICAgaW50IG1fb3BlcmFuZCB7IFZpcnR1YWxSZWdp
c3Rlcjo6aW52YWxpZFZpcnR1YWxSZWdpc3RlciB9OwotfTsKLQotQUxXQVlTX0lOTElORSBib29s
IE9wZXJhbmQ6Om9wZXJhdG9yPT0oY29uc3QgT3BlcmFuZCYgb3RoZXIpIGNvbnN0Ci17Ci0gICAg
aWYgKGtpbmQoKSAhPSBvdGhlci5raW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoaXNUbXAoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlKCkgPT0gb3RoZXIudmFsdWUoKTsKLSAg
ICByZXR1cm4gdmlydHVhbFJlZ2lzdGVyKCkgPT0gb3RoZXIudmlydHVhbFJlZ2lzdGVyKCk7Ci19
Ci0KLWlubGluZSBib29sIE9wZXJhbmQ6OmlzVmFsaWQoKSBjb25zdAotewotICAgIGlmIChpc1Rt
cCgpKQotICAgICAgICByZXR1cm4gdmFsdWUoKSA+PSAwOwotICAgIHJldHVybiB2aXJ0dWFsUmVn
aXN0ZXIoKS5pc1ZhbGlkKCk7Ci19Ci0KLWlubGluZSBPcGVyYW5kIE9wZXJhbmQ6OmZyb21CaXRz
KHVpbnQ2NF90IHZhbHVlKQotewotICAgIE9wZXJhbmQgcmVzdWx0ID0gYml0d2lzZV9jYXN0PE9w
ZXJhbmQ+KHZhbHVlKTsKLSAgICBBU1NFUlQocmVzdWx0LmlzVmFsaWQoKSk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotc3RhdGljX2Fzc2VydChzaXplb2YoT3BlcmFuZCkgPT0gc2l6ZW9mKHVp
bnQ2NF90KSwgIk9wZXJhbmQ6OmFzQml0cygpIHJlbGllcyBvbiB0aGlzLiIpOworZW51bSBPcGVy
YW5kS2luZCB7IEFyZ3VtZW50T3BlcmFuZCwgTG9jYWxPcGVyYW5kIH07CiAKIGVudW0gT3BlcmFu
ZHNMaWtlVGFnIHsgT3BlcmFuZHNMaWtlIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFz
cyBPcGVyYW5kcyB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgU3RvcmFnZSA9IHN0ZDo6Y29uZGl0aW9u
YWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFZlY3RvciwgVmVjdG9yPFQsIDAs
IFVuc2FmZVZlY3Rvck92ZXJmbG93Pj47Ci0gICAgdXNpbmcgUmVmVHlwZSA9IHN0ZDo6Y29uZGl0
aW9uYWxfdDxzdGQ6OmlzX3NhbWVfdjxULCBib29sPiwgRmFzdEJpdFJlZmVyZW5jZSwgVCY+Owot
ICAgIHVzaW5nIENvbnN0UmVmVHlwZSA9IHN0ZDo6Y29uZGl0aW9uYWxfdDxzdGQ6OmlzX3NhbWVf
djxULCBib29sPiwgYm9vbCwgY29uc3QgVCY+OwotCi0gICAgT3BlcmFuZHMoKSA9IGRlZmF1bHQ7
Ci0KLSAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVt
TG9jYWxzLCBzaXplX3QgbnVtVG1wcykKKyAgICBPcGVyYW5kcygpCisgICAgICAgIDogbV9udW1B
cmd1bWVudHMoMCkgeyB9CisgICAgCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFy
Z3VtZW50cywgc2l6ZV90IG51bUxvY2FscykKICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1B
cmd1bWVudHMpCi0gICAgICAgICwgbV9udW1Mb2NhbHMobnVtTG9jYWxzKQogICAgIHsKLSAgICAg
ICAgc2l6ZV90IHNpemUgPSBudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzOwotICAg
ICAgICBtX3ZhbHVlcy5ncm93KHNpemUpOwotICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRz
PFQ+OjpuZWVkc0luaXRpYWxpemF0aW9uKQotICAgICAgICAgICAgbV92YWx1ZXMuZmlsbChUKCkp
OworICAgICAgICBpZiAoV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24p
IHsKKyAgICAgICAgICAgIG1fdmFsdWVzLnJlc2l6ZShudW1Bcmd1bWVudHMgKyBudW1Mb2NhbHMp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV92YWx1ZXMuZmlsbChUKCksIG51bUFy
Z3VtZW50cyArIG51bUxvY2Fscyk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBleHBsaWNpdCBP
cGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzLCBzaXplX3QgbnVt
VG1wcywgY29uc3QgVCYgaW5pdGlhbFZhbHVlKQorICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVf
dCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2NhbHMsIGNvbnN0IFQmIGluaXRpYWxWYWx1ZSkK
ICAgICAgICAgOiBtX251bUFyZ3VtZW50cyhudW1Bcmd1bWVudHMpCi0gICAgICAgICwgbV9udW1M
b2NhbHMobnVtTG9jYWxzKQogICAgIHsKLSAgICAgICAgbV92YWx1ZXMuZ3JvdyhudW1Bcmd1bWVu
dHMgKyBudW1Mb2NhbHMgKyBudW1UbXBzKTsKLSAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFs
VmFsdWUpOworICAgICAgICBtX3ZhbHVlcy5maWxsKGluaXRpYWxWYWx1ZSwgbnVtQXJndW1lbnRz
ICsgbnVtTG9jYWxzKTsKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAg
ICBleHBsaWNpdCBPcGVyYW5kcyhPcGVyYW5kc0xpa2VUYWcsIGNvbnN0IE9wZXJhbmRzPFU+JiBv
dGhlciwgY29uc3QgVCYgaW5pdGlhbFZhbHVlID0gVCgpKQorICAgIGV4cGxpY2l0IE9wZXJhbmRz
KE9wZXJhbmRzTGlrZVRhZywgY29uc3QgT3BlcmFuZHM8VT4mIG90aGVyKQogICAgICAgICA6IG1f
bnVtQXJndW1lbnRzKG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpCi0gICAgICAgICwgbV9udW1M
b2NhbHMob3RoZXIubnVtYmVyT2ZMb2NhbHMoKSkKICAgICB7Ci0gICAgICAgIG1fdmFsdWVzLmdy
b3cob3RoZXIuc2l6ZSgpKTsKLSAgICAgICAgbV92YWx1ZXMuZmlsbChpbml0aWFsVmFsdWUpOwor
ICAgICAgICBtX3ZhbHVlcy5maWxsKFQoKSwgb3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSArIG90
aGVyLm51bWJlck9mTG9jYWxzKCkpOwogICAgIH0KLQorICAgIAogICAgIHNpemVfdCBudW1iZXJP
ZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQXJndW1lbnRzOyB9Ci0gICAgc2l6ZV90
IG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Mb2NhbHM7IH0KLSAgICBzaXpl
X3QgbnVtYmVyT2ZUbXBzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpIC0gbnVtYmVy
T2ZBcmd1bWVudHMoKSAtIG51bWJlck9mTG9jYWxzKCk7IH0KLQotICAgIHNpemVfdCB0bXBJbmRl
eChzaXplX3QgaWR4KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlkeCA8IG51bWJlck9m
VG1wcygpKTsKLSAgICAgICAgcmV0dXJuIGlkeCArIG51bWJlck9mQXJndW1lbnRzKCkgKyBudW1i
ZXJPZkxvY2FscygpOwotICAgIH0KKyAgICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlcy5zaXplKCkgLSBtX251bUFyZ3VtZW50czsgfQorICAgIAogICAgIHNp
emVfdCBhcmd1bWVudEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NF
UlQoaWR4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSk7CisgICAgICAgIEFTU0VSVChpZHggPCBtX251
bUFyZ3VtZW50cyk7CiAgICAgICAgIHJldHVybiBpZHg7CiAgICAgfQogICAgIAogICAgIHNpemVf
dCBsb2NhbEluZGV4KHNpemVfdCBpZHgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaWR4
IDwgbnVtYmVyT2ZMb2NhbHMoKSk7Ci0gICAgICAgIHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygp
ICsgaWR4OworICAgICAgICByZXR1cm4gbV9udW1Bcmd1bWVudHMgKyBpZHg7CiAgICAgfQotCi0g
ICAgUmVmVHlwZSB0bXAoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV92YWx1ZXNbdG1wSW5kZXgoaWR4
KV07IH0KLSAgICBDb25zdFJlZlR5cGUgdG1wKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWVzW3RtcEluZGV4KGlkeCldOyB9CiAgICAgCi0gICAgUmVmVHlwZSBhcmd1bWVudChzaXpl
X3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1thcmd1bWVudEluZGV4KGlkeCldOyB9Ci0gICAgQ29u
c3RSZWZUeXBlIGFyZ3VtZW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2Fy
Z3VtZW50SW5kZXgoaWR4KV07IH0KKyAgICBUJiBhcmd1bWVudChzaXplX3QgaWR4KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fdmFsdWVzW2FyZ3VtZW50SW5kZXgoaWR4KV07CisgICAgfQorICAg
IGNvbnN0IFQmIGFyZ3VtZW50KHNpemVfdCBpZHgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV92YWx1ZXNbYXJndW1lbnRJbmRleChpZHgpXTsKKyAgICB9CiAgICAgCi0gICAgUmVmVHlw
ZSBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVybiBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9
Ci0gICAgQ29uc3RSZWZUeXBlIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVzW2xvY2FsSW5kZXgoaWR4KV07IH0KKyAgICBUJiBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVy
biBtX3ZhbHVlc1tsb2NhbEluZGV4KGlkeCldOyB9CisgICAgY29uc3QgVCYgbG9jYWwoc2l6ZV90
IGlkeCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbbG9jYWxJbmRleChpZHgpXTsgfQogICAgIAog
ICAgIHRlbXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIHNpemVfdCBzaXplRm9y
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKLSAgICAgICAg
Y2FzZSBPcGVyYW5kS2luZDo6VG1wOgotICAgICAgICAgICAgcmV0dXJuIG51bWJlck9mVG1wcygp
OwotICAgICAgICBjYXNlIE9wZXJhbmRLaW5kOjpBcmd1bWVudDoKKyAgICAgICAgaWYgKG9wZXJh
bmRLaW5kID09IEFyZ3VtZW50T3BlcmFuZCkKICAgICAgICAgICAgIHJldHVybiBudW1iZXJPZkFy
Z3VtZW50cygpOwotICAgICAgICBjYXNlIE9wZXJhbmRLaW5kOjpMb2NhbDoKLSAgICAgICAgICAg
IHJldHVybiBudW1iZXJPZkxvY2FscygpOwotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVt
YmVyT2ZMb2NhbHMoKTsKICAgICB9CiAgICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtp
bmQ+Ci0gICAgUmVmVHlwZSBhdEZvcihzaXplX3QgaWR4KQorICAgIFQmIGF0Rm9yKHNpemVfdCBp
ZHgpCiAgICAgewotICAgICAgICBzd2l0Y2ggKG9wZXJhbmRLaW5kKSB7Ci0gICAgICAgIGNhc2Ug
T3BlcmFuZEtpbmQ6OlRtcDoKLSAgICAgICAgICAgIHJldHVybiB0bXAoaWR4KTsKLSAgICAgICAg
Y2FzZSBPcGVyYW5kS2luZDo6QXJndW1lbnQ6CisgICAgICAgIGlmIChvcGVyYW5kS2luZCA9PSBB
cmd1bWVudE9wZXJhbmQpCiAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnQoaWR4KTsKLSAgICAg
ICAgY2FzZSBPcGVyYW5kS2luZDo6TG9jYWw6Ci0gICAgICAgICAgICByZXR1cm4gbG9jYWwoaWR4
KTsKLSAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm4gdG1wKDApOworICAgICAgICByZXR1cm4gbG9jYWwoaWR4KTsKICAgICB9CiAg
ICAgdGVtcGxhdGU8T3BlcmFuZEtpbmQgb3BlcmFuZEtpbmQ+Ci0gICAgQ29uc3RSZWZUeXBlIGF0
Rm9yKHNpemVfdCBpZHgpIGNvbnN0CisgICAgY29uc3QgVCYgYXRGb3Ioc2l6ZV90IGlkeCkgY29u
c3QKICAgICB7Ci0gICAgICAgIHN3aXRjaCAob3BlcmFuZEtpbmQpIHsKLSAgICAgICAgY2FzZSBP
cGVyYW5kS2luZDo6VG1wOgotICAgICAgICAgICAgcmV0dXJuIHRtcChpZHgpOwotICAgICAgICBj
YXNlIE9wZXJhbmRLaW5kOjpBcmd1bWVudDoKKyAgICAgICAgaWYgKG9wZXJhbmRLaW5kID09IEFy
Z3VtZW50T3BlcmFuZCkKICAgICAgICAgICAgIHJldHVybiBhcmd1bWVudChpZHgpOwotICAgICAg
ICBjYXNlIE9wZXJhbmRLaW5kOjpMb2NhbDoKLSAgICAgICAgICAgIHJldHVybiBsb2NhbChpZHgp
OwotICAgICAgICB9Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiB0bXAoMCk7CisgICAgICAgIHJldHVybiBsb2NhbChpZHgpOwogICAgIH0KLQot
ICAgIHZvaWQgZW5zdXJlTG9jYWxzKHNpemVfdCBzaXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUg
PSBUKCkpCisgICAgCisgICAgdm9pZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUpCiAgICAgewot
ICAgICAgICBpZiAoc2l6ZSA8PSBudW1iZXJPZkxvY2FscygpKQorICAgICAgICBzaXplX3Qgb2xk
U2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBtX251bUFy
Z3VtZW50cyArIHNpemU7CisgICAgICAgIGlmIChuZXdTaXplIDw9IG9sZFNpemUpCiAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50
cygpICsgbnVtYmVyT2ZUbXBzKCkgKyBzaXplOwotICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxz
ID0gbnVtYmVyT2ZMb2NhbHMoKTsKLSAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJP
ZlRtcHMoKTsKICAgICAgICAgbV92YWx1ZXMuZ3JvdyhuZXdTaXplKTsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBvbGROdW1UbXBzOyArK2kpCi0gICAgICAgICAgICBtX3ZhbHVlc1tu
ZXdTaXplIC0gMSAtIGldID0gbV92YWx1ZXNbdG1wSW5kZXgob2xkTnVtVG1wcyAtIDEgLSBpKV07
Ci0KLSAgICAgICAgbV9udW1Mb2NhbHMgPSBzaXplOwotICAgICAgICBpZiAoZW5zdXJlZFZhbHVl
ICE9IFQoKSB8fCAhV1RGOjpWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24pIHsK
LSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSAtIG9sZE51bUxvY2Fsczsg
KytpKQotICAgICAgICAgICAgICAgIG1fdmFsdWVzW2xvY2FsSW5kZXgob2xkTnVtTG9jYWxzICsg
aSldID0gZW5zdXJlZFZhbHVlOworICAgICAgICBpZiAoIVdURjo6VmVjdG9yVHJhaXRzPFQ+Ojpu
ZWVkc0luaXRpYWxpemF0aW9uKSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6
ZTsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIG1fdmFsdWVzW2ld
ID0gVCgpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBlbnN1cmVUbXBzKHNpemVfdCBz
aXplLCBjb25zdCBUJiBlbnN1cmVkVmFsdWUgPSBUKCkpCisgICAgdm9pZCBlbnN1cmVMb2NhbHMo
c2l6ZV90IHNpemUsIGNvbnN0IFQmIGVuc3VyZWRWYWx1ZSkKICAgICB7Ci0gICAgICAgIGlmIChz
aXplIDw9IG51bWJlck9mVG1wcygpKQorICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVz
LnNpemUoKTsKKyAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBtX251bUFyZ3VtZW50cyArIHNpemU7
CisgICAgICAgIGlmIChuZXdTaXplIDw9IG9sZFNpemUpCiAgICAgICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX3ZhbHVlcy5zaXplKCk7Ci0gICAgICAgIHNpemVf
dCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCkgKyBzaXpl
OwogICAgICAgICBtX3ZhbHVlcy5ncm93KG5ld1NpemUpOwotCi0gICAgICAgIGlmIChlbnN1cmVk
VmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlv
bikgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBuZXdTaXplOyAr
K2kpCi0gICAgICAgICAgICAgICAgbV92YWx1ZXNbaV0gPSBlbnN1cmVkVmFsdWU7Ci0gICAgICAg
IH0KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX3ZhbHVlcy5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgIG1fdmFsdWVzW2ldID0gZW5zdXJlZFZhbHVlOwogICAgIH0KICAg
ICAKICAgICB2b2lkIHNldExvY2FsKHNpemVfdCBpZHgsIGNvbnN0IFQmIHZhbHVlKQpAQCAtMjgw
LDc2ICsxNjQsODQgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoaWR4ID49IG51bWJlck9mTG9j
YWxzKCkgfHwgbG9jYWwoaWR4KSA9PSBUKCkpOwogICAgICAgICBzZXRMb2NhbChpZHgsIHZhbHVl
KTsKICAgICB9Ci0KLSAgICBSZWZUeXBlIGdldEZvck9wZXJhbmRJbmRleChzaXplX3QgaW5kZXgp
IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQotICAgIENvbnN0UmVmVHlwZSBnZXRGb3JPcGVy
YW5kSW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PE9wZXJhbmRz
Kj4odGhpcyktPmdldEZvck9wZXJhbmRJbmRleChpbmRleCk7IH0KLQotICAgIHNpemVfdCBvcGVy
YW5kSW5kZXgoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNvbnN0CisgICAgCisgICAgc2l6ZV90
IG9wZXJhbmRJbmRleChpbnQgb3BlcmFuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVy
YW5kLmlzQXJndW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBhcmd1bWVudEluZGV4KG9wZXJh
bmQudG9Bcmd1bWVudCgpKTsKLSAgICAgICAgcmV0dXJuIGxvY2FsSW5kZXgob3BlcmFuZC50b0xv
Y2FsKCkpOworICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCisgICAgICAg
ICAgICByZXR1cm4gYXJndW1lbnRJbmRleChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Bcmd1
bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIGxvY2FsSW5kZXgoVmlydHVhbFJlZ2lzdGVyKG9wZXJh
bmQpLnRvTG9jYWwoKSk7CiAgICAgfQogICAgIAotICAgIHNpemVfdCBvcGVyYW5kSW5kZXgoT3Bl
cmFuZCBvcCkgY29uc3QKKyAgICBzaXplX3Qgb3BlcmFuZEluZGV4KFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIpIGNvbnN0CiAgICAgewotICAgICAgICBpZiAoIW9wLmlzVG1wKCkpCi0g
ICAgICAgICAgICByZXR1cm4gb3BlcmFuZEluZGV4KG9wLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAg
ICAgICAgcmV0dXJuIHRtcEluZGV4KG9wLnZhbHVlKCkpOworICAgICAgICByZXR1cm4gb3BlcmFu
ZEluZGV4KHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSk7CiAgICAgfQogICAgIAotICAgIFJlZlR5
cGUgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICBUJiBvcGVyYW5kKGludCBv
cGVyYW5kKQogICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGFyZ3VtZW50KG9wZXJhbmQudG9Bcmd1bWVudCgpKTsKLSAgICAgICAgcmV0
dXJuIGxvY2FsKG9wZXJhbmQudG9Mb2NhbCgpKTsKKyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3Vt
ZW50KG9wZXJhbmQpKQorICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50KFZpcnR1YWxSZWdpc3Rl
cihvcGVyYW5kKS50b0FyZ3VtZW50KCkpOworICAgICAgICByZXR1cm4gbG9jYWwoVmlydHVhbFJl
Z2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSk7CiAgICAgfQogCi0gICAgUmVmVHlwZSBvcGVyYW5k
KE9wZXJhbmQgb3ApCisgICAgVCYgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyKQogICAgIHsKLSAgICAgICAgaWYgKCFvcC5pc1RtcCgpKQotICAgICAgICAgICAgcmV0dXJu
IG9wZXJhbmQob3AudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICByZXR1cm4gdG1wKG9wLnZh
bHVlKCkpOworICAgICAgICByZXR1cm4gb3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkp
OwogICAgIH0KIAotICAgIENvbnN0UmVmVHlwZSBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQo
b3BlcmFuZCk7IH0KLSAgICBDb25zdFJlZlR5cGUgb3BlcmFuZChPcGVyYW5kIG9wZXJhbmQpIGNv
bnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5k
KTsgfQorICAgIGNvbnN0IFQmIG9wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNv
bnN0X2Nhc3Q8Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChv
cGVyYW5kKSk7IH0KKyAgICBjb25zdCBUJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFQmPihjb25zdF9jYXN0PE9wZXJhbmRz
Kj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCkpOyB9CiAgICAgCi0gICAgYm9vbCBoYXNPcGVyYW5k
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdAorICAgIGJvb2wgaGFzT3BlcmFuZChpbnQg
b3BlcmFuZCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkK
KyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KG9wZXJhbmQudG9M
b2NhbCgpKSA8IG51bWJlck9mTG9jYWxzKCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxz
aXplX3Q+KFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkpIDwgbnVtYmVyT2ZMb2Nh
bHMoKTsKICAgICB9Ci0gICAgYm9vbCBoYXNPcGVyYW5kKE9wZXJhbmQgb3ApIGNvbnN0CisgICAg
Ym9vbCBoYXNPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CiAgICAgewotICAgICAg
ICBpZiAob3AuaXNUbXAoKSkgewotICAgICAgICAgICAgQVNTRVJUKG9wLnZhbHVlKCkgPj0gMCk7
Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcC52YWx1ZSgpKSA8IG51
bWJlck9mVG1wcygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBoYXNPcGVyYW5kKG9wLnZp
cnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgcmV0dXJuIGhhc09wZXJhbmQocmVnLm9mZnNldCgp
KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRPcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCwgY29u
c3QgVCYgdmFsdWUpCisgICAgdm9pZCBzZXRPcGVyYW5kKGludCBvcGVyYW5kLCBjb25zdCBUJiB2
YWx1ZSkKICAgICB7CiAgICAgICAgIHRoaXMtPm9wZXJhbmQob3BlcmFuZCkgPSB2YWx1ZTsKICAg
ICB9CisgICAgCisgICAgdm9pZCBzZXRPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIsIGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0T3BlcmFuZCh2aXJ0dWFs
UmVnaXN0ZXIub2Zmc2V0KCksIHZhbHVlKTsKKyAgICB9CiAKICAgICBzaXplX3Qgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQotICAgIENvbnN0UmVmVHlwZSBhdChzaXpl
X3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQotICAgIFJlZlR5cGUg
YXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KLSAgICBDb25zdFJl
ZlR5cGUgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsg
fQotICAgIFJlZlR5cGUgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4
KTsgfQotCi0gICAgT3BlcmFuZCBvcGVyYW5kRm9ySW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAor
ICAgIGNvbnN0IFQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5k
ZXhdOyB9CisgICAgVCYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07
IH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4g
YXQoaW5kZXgpOyB9CisgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0
KGluZGV4KTsgfQorCisgICAgYm9vbCBpc0FyZ3VtZW50KHNpemVfdCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gaW5kZXggPCBtX251bUFyZ3VtZW50czsgfQorICAgIGJvb2wgaXNMb2NhbChzaXplX3Qg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuICFpc0FyZ3VtZW50KGluZGV4KTsgfQorICAgIGludCBvcGVy
YW5kRm9ySW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGluZGV4
IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSkKLSAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudChpbmRleCk7Ci0gICAgICAgIGVsc2UgaWYgKGluZGV4IDwgbnVtYmVyT2ZM
b2NhbHMoKSArIG51bWJlck9mQXJndW1lbnRzKCkpCi0gICAgICAgICAgICByZXR1cm4gdmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAg
cmV0dXJuIE9wZXJhbmQ6OnRtcChpbmRleCAtIChudW1iZXJPZkxvY2FscygpICsgbnVtYmVyT2ZB
cmd1bWVudHMoKSkpOworICAgICAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGluZGV4KS5vZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGluZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKSkub2Zmc2V0KCk7CiAgICAgfQotCisgICAg
VmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckluZGV4KHNpemVfdCBpbmRleCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZEZvckluZGV4
KGluZGV4KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0T3BlcmFuZEZpcnN0VGltZShpbnQg
b3BlcmFuZCwgY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAob3BlcmFuZElzQXJn
dW1lbnQob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIHNldEFyZ3VtZW50Rmlyc3RUaW1lKFZpcnR1
YWxSZWdpc3RlcihvcGVyYW5kKS50b0FyZ3VtZW50KCksIHZhbHVlKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2V0TG9jYWxGaXJzdFRpbWUoVmly
dHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSwgdmFsdWUpOworICAgIH0KKyAgICAKICAg
ICB2b2lkIGZpbGwoVCB2YWx1ZSkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV92YWx1ZXMuc2l6ZSgpOyArK2kpCkBAIC0zNjUsNyArMjU3LDYgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgQVNTRVJUKG51bWJlck9mQXJndW1lbnRzKCkgPT0gb3RoZXIubnVtYmVyT2ZB
cmd1bWVudHMoKSk7CiAgICAgICAgIEFTU0VSVChudW1iZXJPZkxvY2FscygpID09IG90aGVyLm51
bWJlck9mTG9jYWxzKCkpOwotICAgICAgICBBU1NFUlQobnVtYmVyT2ZUbXBzKCkgPT0gb3RoZXIu
bnVtYmVyT2ZUbXBzKCkpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1fdmFsdWVzID09IG90
aGVyLm1fdmFsdWVzOwogICAgIH0KQEAgLTM3NCwxMCArMjY1LDkgQEAgcHVibGljOgogICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAKIHByaXZhdGU6Ci0gICAgLy8g
VGhlIGZpcnN0IG1fbnVtQXJndW1lbnRzIG9mIG1fdmFsdWVzIGFyZSBhcmd1bWVudHMsIHRoZSBu
ZXh0IG1fbnVtTG9jYWxzIGFyZSBsb2NhbHMsIGFuZCB0aGUgcmVzdCBhcmUgdG1wcy4KLSAgICBT
dG9yYWdlIG1fdmFsdWVzOwotICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzIHsgMCB9OwotICAg
IHVuc2lnbmVkIG1fbnVtTG9jYWxzIHsgMCB9OworICAgIC8vIFRoZSBmaXJzdCBtX251bUFyZ3Vt
ZW50cyBvZiBtX3ZhbHVlcyBhcmUgYXJndW1lbnRzLCB0aGUgcmVzdCBhcmUgbG9jYWxzLgorICAg
IFZlY3RvcjxULCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV92YWx1ZXM7CisgICAgdW5zaWdu
ZWQgbV9udW1Bcmd1bWVudHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAppbmRleCAwYjFjYzFm
MmQxOTdhZDA4MzY1YThmNzg1NjFmZGY2N2E3ZDllZGRkLi42NWZlZGRhMDczMGE4MzkxZjgzMTU2
M2RiZGViODE2YWY5MjU2NmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09wZXJhbmRzSW5saW5lcy5oCkBAIC0zMCwxNCArMzAsNiBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotaW5saW5lIHZvaWQgT3BlcmFuZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAot
ewotICAgIGlmIChpc1RtcCgpKQotICAgICAgICBvdXQucHJpbnQoInRtcCIsIHZhbHVlKCkpOwot
ICAgIGVsc2UKLSAgICAgICAgb3V0LnByaW50KHZpcnR1YWxSZWdpc3RlcigpKTsKLX0KLQogdGVt
cGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQgT3BlcmFuZHM8VD46OmR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CkBAIC01MiwxMSArNDQs
NiBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1
bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IG91dC5wcmludChjb21tYSwgImxvYyIsIGxvY2FsSW5kZXgsICI6IiwgaW5Db250ZXh0KGxvY2Fs
KGxvY2FsSW5kZXgpLCBjb250ZXh0KSk7CiAgICAgfQotICAgIGZvciAoc2l6ZV90IHRtcEluZGV4
ID0gMDsgdG1wSW5kZXggPCBudW1iZXJPZlRtcHMoKTsgKyt0bXBJbmRleCkgewotICAgICAgICBp
ZiAoIXRtcCh0bXBJbmRleCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgsICI6IiwgaW5Db250ZXh0KHRtcCh0bXBJbmRleCks
IGNvbnRleHQpKTsKLSAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC03MywxMSAr
NjAsNiBAQCB2b2lkIE9wZXJhbmRzPFQ+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibG9jIiwgbG9j
YWxJbmRleCwgIjoiLCBsb2NhbChsb2NhbEluZGV4KSk7CiAgICAgfQotICAgIGZvciAoc2l6ZV90
IHRtcEluZGV4ID0gMDsgdG1wSW5kZXggPCBudW1iZXJPZlRtcHMoKTsgKyt0bXBJbmRleCkgewot
ICAgICAgICBpZiAoIXRtcCh0bXBJbmRleCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCAidG1wIiwgdG1wSW5kZXgsICI6IiwgdG1wKHRtcEluZGV4KSk7
Ci0gICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCmluZGV4IDdlOTMyNjJkZmIw
OTU5ZGVjMmE5MjQxZmY4YzYxMWYzM2I5MmI0NDcuLmQ1ZGRlZThkNTYwNzcwMzIzYjFmZDVmMWFj
Y2NjYzA1MDJjMTI2NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApAQCAtNzIsNyArNzIsNiBAQCBVbmxpbmtlZENvZGVC
bG9jazo6VW5saW5rZWRDb2RlQmxvY2soVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29k
ZVR5cGUgY29kZQogICAgICwgbV9jb2RlVHlwZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY29kZVR5
cGUpKQogICAgICwgbV9kaWRPcHRpbWl6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTWl4ZWRUcmlT
dGF0ZSkpCiAgICAgLCBtX2FnZSgwKQotICAgICwgbV9oYXNDaGVja3BvaW50cyhmYWxzZSkKICAg
ICAsIG1fcGFyc2VNb2RlKGluZm8ucGFyc2VNb2RlKCkpCiAgICAgLCBtX2NvZGVHZW5lcmF0aW9u
TW9kZShjb2RlR2VuZXJhdGlvbk1vZGUpCiAgICAgLCBtX21ldGFkYXRhKFVubGlua2VkTWV0YWRh
dGFUYWJsZTo6Y3JlYXRlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9VbmxpbmtlZENvZGVCbG9jay5oCmluZGV4IDMwODJiMGEyNjNjMzA2NTUyNTRhZDg2Zjk3ZmEy
MzIwZGM1MGI0MTcuLmFkMWY5MGI3MGJlYjk4MTdmMzJiYjgwYzU0N2FlNGJhYjY2NTUxYTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5oCkBAIC0xNDEsOSArMTQxLDYgQEAgcHVibGljOgogICAgIGJvb2wgaGFzRXhwcmVzc2lvbklu
Zm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvLnNpemUoKTsgfQogICAgIGNvbnN0IFZlY3Rv
cjxFeHByZXNzaW9uUmFuZ2VJbmZvPiYgZXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJl
c3Npb25JbmZvOyB9CiAKLSAgICBib29sIGhhc0NoZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4g
bV9oYXNDaGVja3BvaW50czsgfQotICAgIHZvaWQgc2V0SGFzQ2hlY2twb2ludHMoKSB7IG1faGFz
Q2hlY2twb2ludHMgPSB0cnVlOyB9Ci0KICAgICAvLyBTcGVjaWFsIHJlZ2lzdGVycwogICAgIHZv
aWQgc2V0VGhpc1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV90aGlz
UmVnaXN0ZXIgPSB0aGlzUmVnaXN0ZXI7IH0KICAgICB2b2lkIHNldFNjb3BlUmVnaXN0ZXIoVmly
dHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIpIHsgbV9zY29wZVJlZ2lzdGVyID0gc2NvcGVSZWdp
c3RlcjsgfQpAQCAtMjAxLDggKzE5OCw5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBjb25zdCBW
ZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9Ci0gICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+
JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1f
Y29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQotICAgIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJl
dHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0K
KyAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoaW50IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXhdOyB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzQ29uc3RhbnRS
ZWdpc3RlckluZGV4KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPj0gRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXg7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3Rh
bnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0g
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdLmdldCgpOyB9CiAgICAgY29uc3QgVmVjdG9yPFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOyB9CiAKICAg
ICB1bnNpZ25lZCBudW1iZXJPZkNvbnN0YW50SWRlbnRpZmllclNldHMoKSBjb25zdCB7IHJldHVy
biBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9jb25zdGFudElkZW50aWZpZXJTZXRzLnNpemUo
KSA6IDA7IH0KQEAgLTQyMSw3ICs0MTksNiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fZGlk
T3B0aW1pemUgOiAyOwogICAgIHVuc2lnbmVkIG1fYWdlIDogMzsKICAgICBzdGF0aWNfYXNzZXJ0
KCgoMVUgPDwgMykgLSAxKSA+PSBtYXhBZ2UpOwotICAgIGJvb2wgbV9oYXNDaGVja3BvaW50cyA6
IDE7CiBwdWJsaWM6CiAgICAgQ29uY3VycmVudEpTTG9jayBtX2xvY2s7CiBwcml2YXRlOgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCmluZGV4IDkwZjkz
ZGQxYzkxMTFjZTNiY2FmYjBhYjNiMDNkOGI3ZGJiZjlmZGQuLmRmYTA3NzY0YTZhYjAyMTlkNzhh
ZDdhYmVmZWE2YTNiN2M4MTdiZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYWx1ZVByb2ZpbGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVmFsdWVQcm9maWxlLmgKQEAgLTE3NiwyOCArMTc2LDI4IEBAIGlubGluZSBCeXRlY29kZUlu
ZGV4IGdldFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlSW5kZXgoUmFyZUNhc2VQcm9maWxlKiByYXJl
Q2FzZVByCiAgICAgcmV0dXJuIHJhcmVDYXNlUHJvZmlsZS0+bV9ieXRlY29kZUluZGV4OwogfQog
Ci1zdHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyIDogcHVibGljIFZhbHVlUHJv
ZmlsZSB7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG1fb3BlcmFuZDsKK3N0cnVjdCBWYWx1ZVByb2Zp
bGVBbmRPcGVyYW5kIDogcHVibGljIFZhbHVlUHJvZmlsZSB7CisgICAgaW50IG1fb3BlcmFuZDsK
IH07CiAKLXN0cnVjdCBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIgeworc3Ry
dWN0IFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIgewogICAgIFdURl9NQUtFX1NUUlVDVF9G
QVNUX0FMTE9DQVRFRDsKIAotICAgIFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlckJ1ZmZl
cih1bnNpZ25lZCBzaXplKQorICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIodW5zaWdu
ZWQgc2l6ZSkKICAgICAgICAgOiBtX3NpemUoc2l6ZSkKICAgICB7CiAgICAgICAgIC8vIEZJWE1F
OiBWYWx1ZVByb2ZpbGUgaGFzIG1vcmUgc3R1ZmYgdGhhbiB3ZSBuZWVkLiBXZSBjb3VsZCBvcHRp
bWl6ZSB0aGVzZSB2YWx1ZSBwcm9maWxlcwogICAgICAgICAvLyB0byBiZSBtb3JlIHNwYWNlIGVm
ZmljaWVudC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NTQxMwotICAgICAgICBtX2J1ZmZlciA9IE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRW
aXJ0dWFsUmVnaXN0ZXIsIFZNTWFsbG9jPjo6bWFsbG9jKG1fc2l6ZSAqIHNpemVvZihWYWx1ZVBy
b2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXIpKTsKKyAgICAgICAgbV9idWZmZXIgPSBNYWxsb2NQdHI8
VmFsdWVQcm9maWxlQW5kT3BlcmFuZCwgVk1NYWxsb2M+OjptYWxsb2MobV9zaXplICogc2l6ZW9m
KFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fc2l6ZTsgKytpKQotICAgICAgICAgICAgbmV3ICgmbV9idWZmZXIuZ2V0KClbaV0pIFZh
bHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAgbmV3ICgmbV9idWZm
ZXIuZ2V0KClbaV0pIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQoKTsKICAgICB9CiAKLSAgICB+VmFs
dWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKCkKKyAgICB+VmFsdWVQcm9maWxlQW5k
T3BlcmFuZEJ1ZmZlcigpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9zaXplOyArK2kpCi0gICAgICAgICAgICBtX2J1ZmZlci5nZXQoKVtpXS5+VmFsdWVQcm9maWxl
QW5kVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBtX2J1ZmZlci5nZXQoKVtpXS5+VmFs
dWVQcm9maWxlQW5kT3BlcmFuZCgpOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBG
dW5jdGlvbj4KQEAgLTIwOCw3ICsyMDgsNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlQW5kVmlydHVh
bFJlZ2lzdGVyQnVmZmVyIHsKICAgICB9CiAKICAgICB1bnNpZ25lZCBtX3NpemU7Ci0gICAgTWFs
bG9jUHRyPFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciwgVk1NYWxsb2M+IG1fYnVmZmVy
OworICAgIE1hbGxvY1B0cjxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kLCBWTU1hbGxvYz4gbV9idWZm
ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcAppbmRleCBiMTM5NDdmMGUxOGRmMDYzYTg4YjNm
MjI3Y2RjZGJmZWZmZWRjMzA4Li5jNWNhNGRlMWU0YjM2MTEyMTRjMzVhYjFlYTMyZGMxY2JmNDVm
M2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNv
dmVyeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3Zl
cnkuY3BwCkBAIC0zNSwyMiArMzUsMjIgQEAgSlNWYWx1ZSBWYWx1ZVJlY292ZXJ5OjpyZWNvdmVy
KENhbGxGcmFtZSogY2FsbEZyYW1lKSBjb25zdAogewogICAgIHN3aXRjaCAodGVjaG5pcXVlKCkp
IHsKICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGNhbGxGcmFt
ZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkuanNWYWx1ZSgpOworICAgICAgICByZXR1cm4gY2FsbEZy
YW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCk7CiAgICAgY2FzZSBJ
bnQzMkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFt
ZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZEludDMyKCkpOworICAgICAgICByZXR1cm4g
anNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJveGVk
SW50MzIoKSk7CiAgICAgY2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0
dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZEludDUy
KCkpOworICAgICAgICByZXR1cm4ganNOdW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3Rl
cigpLm9mZnNldCgpKS51bmJveGVkSW50NTIoKSk7CiAgICAgY2FzZSBTdHJpY3RJbnQ1MkRpc3Bs
YWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGNhbGxGcmFtZS0+cih2aXJ0
dWFsUmVnaXN0ZXIoKSkudW5ib3hlZFN0cmljdEludDUyKCkpOworICAgICAgICByZXR1cm4ganNO
dW1iZXIoY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJveGVkU3Ry
aWN0SW50NTIoKSk7CiAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAg
IHJldHVybiBqc051bWJlcihwdXJpZnlOYU4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3Rlcigp
KS51bmJveGVkRG91YmxlKCkpKTsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHB1cmlmeU5hTihj
YWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCkpLnVuYm94ZWREb3VibGUoKSkp
OwogICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgcmV0dXJuIGNhbGxG
cmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZENlbGwoKTsKKyAgICAgICAgcmV0dXJu
IGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSkudW5ib3hlZENlbGwoKTsK
ICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6CiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+cih2aXJ0dWFsUmVnaXN0ZXIoKSkuanNWYWx1ZSgp
OworICAgICAgICByZXR1cm4gY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgp
KS5qc1ZhbHVlKCk7CiAjZWxzZQotICAgICAgICByZXR1cm4ganNCb29sZWFuKGNhbGxGcmFtZS0+
cih2aXJ0dWFsUmVnaXN0ZXIoKSkudW5ib3hlZEJvb2xlYW4oKSk7CisgICAgICAgIHJldHVybiBq
c0Jvb2xlYW4oY2FsbEZyYW1lLT5yKHZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpKS51bmJveGVk
Qm9vbGVhbigpKTsKICNlbmRpZgogICAgIGNhc2UgQ29uc3RhbnQ6CiAgICAgICAgIHJldHVybiBj
b25zdGFudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Zh
bHVlUmVjb3ZlcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292
ZXJ5LmgKaW5kZXggNWU0M2JjNzJiYmNjNGZmOTdhNjhmODNkYTgzMDk0ZTU4ZGEzYjMxNC4uZDhm
MThjM2ZlODU1OTRmMzJhMjkzYWZkODkwOTIyMzYxMzYyZWE2MyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAppbmRleCBmZDE3MDA3
MTdjM2JmZjNiYWYwYzNiMDAzMTc2ZmU2NjU5MjRkZjRiLi4zNjE5NTI5NDJkMmI4NmJhYjEyZjZj
Y2M3Y2MxYmEwMjFmNWFkMDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZpcnR1YWxSZWdpc3Rlci5oCkBAIC0zMSwxMiArMzEsMTIgQEAKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLWlubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzTG9jYWwoaW50IG9wZXJhbmQpCitp
bmxpbmUgYm9vbCBvcGVyYW5kSXNMb2NhbChpbnQgb3BlcmFuZCkKIHsKICAgICByZXR1cm4gb3Bl
cmFuZCA8IDA7CiB9CiAKLWlubGluZSBib29sIHZpcnR1YWxSZWdpc3RlcklzQXJndW1lbnQoaW50
IG9wZXJhbmQpCitpbmxpbmUgYm9vbCBvcGVyYW5kSXNBcmd1bWVudChpbnQgb3BlcmFuZCkKIHsK
ICAgICByZXR1cm4gb3BlcmFuZCA+PSAwOwogfQpAQCAtNDksMzIgKzQ5LDI1IEBAIHB1YmxpYzoK
ICAgICBmcmllbmQgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGludCk7
CiAgICAgZnJpZW5kIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChp
bnQsIGludCk7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIGludCBpbnZhbGlkVmlydHVhbFJlZ2lz
dGVyID0gMHgzZmZmZmZmZjsKLSAgICBzdGF0aWMgY29uc3RleHByIGludCBmaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleCA9IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OwotCiAgICAgVmlydHVh
bFJlZ2lzdGVyKFJlZ2lzdGVySUQqKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIoUmVmUHRyPFJlZ2lz
dGVySUQ+KTsKIAogICAgIFZpcnR1YWxSZWdpc3RlcigpCi0gICAgICAgIDogbV92aXJ0dWFsUmVn
aXN0ZXIoaW52YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgOiBtX3ZpcnR1YWxSZWdpc3Rl
cihzX2ludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgeyB9CiAKICAgICBleHBsaWNpdCBWaXJ0
dWFsUmVnaXN0ZXIoaW50IHZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgOiBtX3ZpcnR1YWxSZWdp
c3Rlcih2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgeyB9CiAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIoQ2Fs
bEZyYW1lU2xvdCBzbG90KQotICAgICAgICA6IG1fdmlydHVhbFJlZ2lzdGVyKHN0YXRpY19jYXN0
PGludD4oc2xvdCkpCi0gICAgeyB9Ci0KLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVy
biAobV92aXJ0dWFsUmVnaXN0ZXIgIT0gaW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0KLSAgICBi
b29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsUmVnaXN0ZXJJc0xvY2FsKG1fdmly
dHVhbFJlZ2lzdGVyKTsgfQotICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIHZp
cnR1YWxSZWdpc3RlcklzQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9vbCBp
c1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gKG1fdmlydHVhbFJlZ2lzdGVyICE9IHNfaW52YWxpZFZp
cnR1YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiBvcGVy
YW5kSXNMb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBj
b25zdCB7IHJldHVybiBvcGVyYW5kSXNBcmd1bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KICAg
ICBib29sIGlzSGVhZGVyKCkgY29uc3QgeyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gMCAm
JiBtX3ZpcnR1YWxSZWdpc3RlciA8IENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudDsgfQotICAg
IGJvb2wgaXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyID49IGZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CisgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Qg
eyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gc19maXJzdENvbnN0YW50UmVnaXN0ZXJJbmRl
eDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJu
IG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGludCB0b0FyZ3VtZW50
KCkgY29uc3QgeyBBU1NFUlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIG9wZXJhbmRUb0FyZ3VtZW50
KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQotICAgIGludCB0b0NvbnN0YW50SW5kZXgoKSBjb25zdCB7
IEFTU0VSVChpc0NvbnN0YW50KCkpOyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgLSBmaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleDsgfQorICAgIGludCB0b0NvbnN0YW50SW5kZXgoKSBjb25zdCB7
IEFTU0VSVChpc0NvbnN0YW50KCkpOyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgLSBzX2ZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CiAgICAgaW50IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fdmlydHVhbFJlZ2lzdGVyOyB9CiAgICAgaW50IG9mZnNldEluQnl0ZXMoKSBjb25zdCB7IHJl
dHVybiBtX3ZpcnR1YWxSZWdpc3RlciAqIHNpemVvZihSZWdpc3Rlcik7IH0KIApAQCAtMTEzLDYg
KzEwNiw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7
CiAKIHByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgc19pbnZhbGlkVmlydHVhbFJl
Z2lzdGVyID0gMHgzZmZmZmZmZjsKKyAgICBzdGF0aWMgY29uc3RleHByIGludCBzX2ZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4ID0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7CisKICAgICBz
dGF0aWMgaW50IGxvY2FsVG9PcGVyYW5kKGludCBsb2NhbCkgeyByZXR1cm4gLTEgLSBsb2NhbDsg
fQogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvTG9jYWwoaW50IG9wZXJhbmQpIHsgcmV0dXJuIC0x
IC0gb3BlcmFuZDsgfQogICAgIHN0YXRpYyBpbnQgb3BlcmFuZFRvQXJndW1lbnQoaW50IG9wZXJh
bmQpIHsgcmV0dXJuIG9wZXJhbmQgLSBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCmluZGV4IGNjODE0M2UxOTlmNjRmOWNiNzZjNmU4MDU0Mzg4OGJiZTlh
ZDNiZjcuLmI1MmZjNjIzNTQzYjRjMWMzN2YyMTRlNzIxNzRiOTJlMjlhNTQ1NGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCkBAIC0xMTg3LDcgKzExODcsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6aW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIoKQogICAgIFZpcnR1YWxSZWdpc3RlciByZWcg
PSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
KTsKICAgICBtX3BhcmFtZXRlcnMuZ3JvdyhtX3BhcmFtZXRlcnMuc2l6ZSgpICsgMSk7CiAgICAg
YXV0byYgcGFyYW1ldGVyID0gcmVnaXN0ZXJGb3IocmVnKTsKLSAgICBwYXJhbWV0ZXIuc2V0SW5k
ZXgocmVnKTsKKyAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocmVnLm9mZnNldCgpKTsKICAgICBtX2Nv
ZGVCbG9jay0+YWRkUGFyYW1ldGVyKCk7CiAgICAgcmV0dXJuICZwYXJhbWV0ZXI7CiB9CkBAIC0x
MTk2LDcgKzExOTYsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplUGFyYW1l
dGVycyhGdW5jdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgLy8gTWFrZSBzdXJl
IHRoZSBjb2RlIGJsb2NrIGtub3dzIGFib3V0IGFsbCBvZiBvdXIgcGFyYW1ldGVycywgYW5kIG1h
a2Ugc3VyZSB0aGF0IHBhcmFtZXRlcnMKICAgICAvLyBuZWVkaW5nIGRlc3RydWN0dXJpbmcgYXJl
IG5vdGVkLgotICAgIG1fdGhpc1JlZ2lzdGVyLnNldEluZGV4KFZpcnR1YWxSZWdpc3Rlcihpbml0
aWFsaXplTmV4dFBhcmFtZXRlcigpLT5pbmRleCgpKSk7IC8vIHRoaXMKKyAgICBtX3RoaXNSZWdp
c3Rlci5zZXRJbmRleChpbml0aWFsaXplTmV4dFBhcmFtZXRlcigpLT5pbmRleCgpKTsgLy8gdGhp
cwogCiAgICAgYm9vbCBub25TaW1wbGVBcmd1bWVudHMgPSBmYWxzZTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVycy5zaXplKCk7ICsraSkgewpAQCAtMTYzNywxMSArMTYz
NywxMSBAQCBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWxpdHlPcEltcGwoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMxLCBSZQogCiAgICAgaWYgKG1fbGFzdEluc3RydWN0
aW9uLT5pczxPcFR5cGVvZj4oKSkgewogICAgICAgICBhdXRvIG9wID0gbV9sYXN0SW5zdHJ1Y3Rp
b24tPmFzPE9wVHlwZW9mPigpOwotICAgICAgICBpZiAoc3JjMS0+dmlydHVhbFJlZ2lzdGVyKCkg
PT0gb3AubV9kc3QKKyAgICAgICAgaWYgKHNyYzEtPmluZGV4KCkgPT0gb3AubV9kc3Qub2Zmc2V0
KCkKICAgICAgICAgICAgICYmIHNyYzEtPmlzVGVtcG9yYXJ5KCkKLSAgICAgICAgICAgICYmIHNy
YzItPnZpcnR1YWxSZWdpc3RlcigpLmlzQ29uc3RhbnQoKQotICAgICAgICAgICAgJiYgbV9jb2Rl
QmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+dmlydHVhbFJlZ2lzdGVyKCkpLmdldCgpLmlz
U3RyaW5nKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhc1N0cmluZyht
X2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihzcmMyLT52aXJ0dWFsUmVnaXN0ZXIoKSkuZ2V0
KCkpLT50cnlHZXRWYWx1ZSgpOworICAgICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmlzQ29uc3Rh
bnRSZWdpc3RlckluZGV4KHNyYzItPmluZGV4KCkpCisgICAgICAgICAgICAmJiBtX2NvZGVCbG9j
ay0+Y29uc3RhbnRSZWdpc3RlcihzcmMyLT5pbmRleCgpKS5nZXQoKS5pc1N0cmluZygpKSB7Cisg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXNTdHJpbmcobV9jb2RlQmxvY2stPmNv
bnN0YW50UmVnaXN0ZXIoc3JjMi0+aW5kZXgoKSkuZ2V0KCkpLT50cnlHZXRWYWx1ZSgpOwogICAg
ICAgICAgICAgaWYgKHZhbHVlID09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICAgcmV3
aW5kKCk7CiAgICAgICAgICAgICAgICAgT3BJc1VuZGVmaW5lZDo6ZW1pdCh0aGlzLCBkc3QsIG9w
Lm1fdmFsdWUpOwpAQCAtMzIzNSw4ICszMjM1LDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRDYWxsVmFyYXJncyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMK
ICAgICAvLyBFbWl0IGNhbGwuCiAgICAgQVNTRVJUKGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkpOwog
ICAgIFZhcmFyZ3NPcDo6ZW1pdCh0aGlzLCBkc3QsIGZ1bmMsIHRoaXNSZWdpc3RlciwgYXJndW1l
bnRzID8gYXJndW1lbnRzIDogVmlydHVhbFJlZ2lzdGVyKDApLCBmaXJzdEZyZWVSZWdpc3Rlciwg
Zmlyc3RWYXJBcmdPZmZzZXQpOwotICAgIGlmIChWYXJhcmdzT3A6Om9wY29kZUlEICE9IG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5o
YXNDaGVja3BvaW50cygpKTsKICAgICByZXR1cm4gZHN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXgg
YTVmMzY2YmRhZmM4MWZkZDNiYTMyZWM4MGJhY2QwNTBlZGQxZmNjZC4uYTgyYWZkZjUxZGQwN2Mx
YzFiMzFkMmRlMDA3ZjEyMGFlMTc0NTA3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtMTAxMCw3ICsxMDEw
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgc2hvdWxkRW1pdENvbnRyb2xGbG93
UHJvZmlsZXJIb29rcygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUdlbmVyYXRpb25Nb2RlLmNvbnRh
aW5zKENvZGVHZW5lcmF0aW9uTW9kZTo6Q29udHJvbEZsb3dQcm9maWxlcik7IH0KICAgICAgICAg
CiAgICAgICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2st
PmlzU3RyaWN0TW9kZSgpOyB9Ci0gICAgICAgIHZvaWQgc2V0VXNlc0NoZWNrcG9pbnRzKCkgeyBt
X2NvZGVCbG9jay0+c2V0SGFzQ2hlY2twb2ludHMoKTsgfQogCiAgICAgICAgIFNvdXJjZVBhcnNl
TW9kZSBwYXJzZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+cGFyc2VNb2RlKCk7
IH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL1JlZ2lzdGVySUQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVn
aXN0ZXJJRC5oCmluZGV4IDczYjQzMjA2MzhjMzQ4Zjk1NTRhYWU5YTNhMzIwMjMyODNiZGIzYzgu
LmRhM2ZlMTI4MDA5MGY0MGU3M2Y4MWQyMTIwZGZjZDVlZjkwZDNjZWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oCkBAIC02OSwxMiArNjks
MTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZv
aWQgc2V0SW5kZXgoVmlydHVhbFJlZ2lzdGVyIGluZGV4KQorICAgICAgICB2b2lkIHNldEluZGV4
KGludCBpbmRleCkKICAgICAgICAgewogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgICAgICAgICBt
X2RpZFNldEluZGV4ID0gdHJ1ZTsKICNlbmRpZgotICAgICAgICAgICAgbV92aXJ0dWFsUmVnaXN0
ZXIgPSBpbmRleDsKKyAgICAgICAgICAgIG1fdmlydHVhbFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lz
dGVyKGluZGV4KTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgc2V0VGVtcG9yYXJ5KCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmNwcAppbmRleCBlNjQw
NzFiMWFhMGUzNDg5NDQzNDM5ZmYyOGZjYTI1MWI2MmI5NjVjLi5iODNmZWUwZDNjMDlkMTQ5N2Fh
N2VhMWRlM2UwNDkwNjJmMjI2YzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SGVhcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEhlYXAuY3BwCkBAIC00MCwxNCArNDAsNiBAQCB2b2lkIEFic3RyYWN0SGVhcDo6
UGF5bG9hZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgICAgICBvdXQucHJpbnQo
dmFsdWUoKSk7CiB9CiAKLXZvaWQgQWJzdHJhY3RIZWFwOjpQYXlsb2FkOjpkdW1wQXNPcGVyYW5k
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgaWYgKGlzVG9wKCkpCi0gICAgICAgIG91
dC5wcmludCgiVE9QIik7Ci0gICAgZWxzZQotICAgICAgICBvdXQucHJpbnQoT3BlcmFuZDo6ZnJv
bUJpdHModmFsdWUoKSkpOwotfQotCiB2b2lkIEFic3RyYWN0SGVhcDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludChraW5kKCkpOwpAQCAtNTcsMTMgKzQ5LDYg
QEAgdm9pZCBBYnN0cmFjdEhlYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICAg
ICAgb3V0LnByaW50KCIoIiwgRE9NSklUOjpIZWFwUmFuZ2U6OmZyb21SYXcocGF5bG9hZCgpLnZh
bHVlMzIoKSksICIpIik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKGtpbmQoKSA9
PSBTdGFjaykgewotICAgICAgICBvdXQucHJpbnQoIigiKTsKLSAgICAgICAgcGF5bG9hZCgpLmR1
bXBBc09wZXJhbmQob3V0KTsKLSAgICAgICAgb3V0LnByaW50KCIpIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KICAgICBvdXQucHJpbnQoIigiLCBwYXlsb2FkKCksICIpIik7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCmluZGV4IDNjNGNlM2Q1
ZDAyZGMzYTgxZjNhYTQyNGNmYzNmZDFjNDQ3YzUyOTAuLmJmOTkzNzc5NzA0NzAyZDhkNWIyMGI2
YzJmNmY3Mzk1YWZlNmI4NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RIZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEhlYXAuaApAQCAtMjgsNyArMjgsNiBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5j
bHVkZSAiRE9NSklUSGVhcFJhbmdlLmgiCi0jaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KQEAgLTEyNCwxNSArMTIzLDEwIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICwgbV92YWx1ZShiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKQog
ICAgICAgICB7CiAgICAgICAgIH0KLQotICAgICAgICBQYXlsb2FkKE9wZXJhbmQgb3BlcmFuZCkK
LSAgICAgICAgICAgIDogbV9pc1RvcChmYWxzZSkKLSAgICAgICAgICAgICwgbV92YWx1ZShvcGVy
YW5kLmFzQml0cygpKQotICAgICAgICB7Ci0gICAgICAgIH0KLQorICAgICAgICAKICAgICAgICAg
UGF5bG9hZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKLSAgICAgICAgICAgIDogUGF5bG9hZChP
cGVyYW5kKG9wZXJhbmQpKQorICAgICAgICAgICAgOiBtX2lzVG9wKGZhbHNlKQorICAgICAgICAg
ICAgLCBtX3ZhbHVlKG9wZXJhbmQub2Zmc2V0KCkpCiAgICAgICAgIHsKICAgICAgICAgfQogICAg
ICAgICAKQEAgLTE4OSw3ICsxODMsNiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwotICAgICAgICB2b2lkIGR1bXBB
c09wZXJhbmQoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgYm9vbCBtX2lzVG9wOwpAQCAtMjExLDcgKzIwNCw2IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIEFTU0VSVChraW5kICE9IEludmFsaWRBYnN0cmFjdEhlYXAgJiYga2luZCAhPSBXb3Js
ZCAmJiBraW5kICE9IEhlYXAgJiYga2luZCAhPSBTaWRlU3RhdGUpOwogICAgICAgICBtX3ZhbHVl
ID0gZW5jb2RlKGtpbmQsIHBheWxvYWQpOwotICAgICAgICBBU1NFUlQodGhpcy0+a2luZCgpID09
IGtpbmQgJiYgdGhpcy0+cGF5bG9hZCgpID09IHBheWxvYWQpOwogICAgIH0KICAgICAKICAgICBB
YnN0cmFjdEhlYXAoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQpAQCAtMjI3LDExICsy
MTksNiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChraW5kKCkgIT0gV29ybGQgJiYga2luZCgp
ICE9IEludmFsaWRBYnN0cmFjdEhlYXApOwogICAgICAgICByZXR1cm4gcGF5bG9hZEltcGwoKTsK
ICAgICB9Ci0gICAgT3BlcmFuZCBvcGVyYW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChraW5kKCkgPT0gU3RhY2sgJiYgIXBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgcmV0dXJu
IE9wZXJhbmQ6OmZyb21CaXRzKHBheWxvYWQoKS52YWx1ZSgpKTsKLSAgICB9CiAgICAgCiAgICAg
QWJzdHJhY3RIZWFwIHN1cGVydHlwZSgpIGNvbnN0CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmlu
ZGV4IDViYjI3OGQyY2Y3MmU0NzE1YmQ4ZmNjMjQwODZmNTZjZGUxZDU4NjEuLmMyNmMyNGFmZWJl
MWNmN2VkZTFhMDc4NDBkMGM2NmQ5NzQ2NjgwMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTM4
OCw3ICszODgsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgCiAgICAg
Y2FzZSBHZXRMb2NhbDogewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBBYnN0cmFjdFZh
bHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgp
KTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZCh2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmxvY2FsKCkub2Zmc2V0KCkpOwogICAgICAgICAvLyBUaGUgdmFsdWUgaW4g
dGhlIGxvY2FsIHNob3VsZCBhbHJlYWR5IGJlIGNoZWNrZWQuCiAgICAgICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbm9kZSwgdmFsdWUuaXNUeXBlKHR5cGVGaWx0ZXJGb3IodmFyaWFibGVBY2Nlc3NE
YXRhLT5mbHVzaEZvcm1hdCgpKSkpOwogICAgICAgICBpZiAodmFsdWUudmFsdWUoKSkKQEAgLTM5
OSw3ICszOTksNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAKICAgICBjYXNl
IEdldFN0YWNrOiB7CiAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNr
QWNjZXNzRGF0YSgpOwotICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS5vcGVy
YW5kKGRhdGEtPm9wZXJhbmQpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0
ZS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKICAgICAgICAgLy8gVGhlIHZhbHVlIGluIHRoZSBsb2Nh
bCBzaG91bGQgYWxyZWFkeSBiZSBjaGVja2VkLgogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG5vZGUsIHZhbHVlLmlzVHlwZSh0eXBlRmlsdGVyRm9yKGRhdGEtPmZvcm1hdCkpKTsKICAgICAg
ICAgaWYgKHZhbHVlLnZhbHVlKCkpCkBAIC00MDksMTIgKzQwOSwxMiBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBj
bG9iYmVyTGltaQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDogewotICAgICAg
ICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNl
IFB1dFN0YWNrOiB7Ci0gICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0Rh
dGEoKS0+b3BlcmFuZCkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbV9zdGF0
ZS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkgPSBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTQzNiw3ICs0
MzYsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVj
dXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAvLyBBc3NlcnQgdGhhdCB0
aGUgc3RhdGUgb2YgYXJndW1lbnRzIGhhcyBiZWVuIHNldC4gU2V0QXJndW1lbnREZWZpbml0ZWx5
L1NldEFyZ3VtZW50TWF5YmUgbWVhbnMKICAgICAgICAgLy8gdGhhdCBzb21lb25lIHNldCB0aGUg
YXJndW1lbnQgdmFsdWVzIG91dC1vZi1iYW5kLCBhbmQgY3VycmVudGx5IHRoaXMgYWx3YXlzIG1l
YW5zIHNldHRpbmcgdG8gYQogICAgICAgICAvLyBub24tY2xlYXIgdmFsdWUuCi0gICAgICAgIEFT
U0VSVCghbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPm9wZXJhbmQoKSkuaXNDbGVhcigpKTsKKyAgICAg
ICAgQVNTRVJUKCFtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkuaXNDbGVhcigpKTsKICAg
ICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEluaXRpYWxpemVFbnRyeXBvaW50QXJndW1lbnRzOiB7
CkBAIC00NjUsMTIgKzQ2NSw2IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIAotICAgIGNhc2UgVmFyYXJnc0xlbmd0aDogewotICAgICAgICBjbG9iYmVy
V29ybGQoKTsKLSAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBG
b3J3YXJkVmFyYXJnczogewogICAgICAgICAvLyBGSVhNRTogRm9yd2FyZFZhcmFyZ3Mgc2hvdWxk
IGNoZWNrIGlmIHRoZSBjb3VudCBiZWNvbWVzIGtub3duLCBhbmQgaWYgaXQgZG9lcywgaXQgc2hv
dWxkIHR1cm4KQEAgLTQ4OSw3ICs0ODMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAg
ICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKICAg
ICAgICAgbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPmNvdW50KS5zZXROb25DZWxsVHlwZShTcGVjSW50
MzJPbmx5KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQgLSAxOyBpLS07
KQotICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5kKGRhdGEtPnN0YXJ0ICsgaSkubWFrZUhlYXBU
b3AoKTsKKyAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChkYXRhLT5zdGFydC5vZmZzZXQoKSAr
IGkpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjM3MSw3ICsy
MzY1LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhl
Y3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgIHVuc2lnbmVkIGFy
Z3VtZW50SW5kZXg7CiAgICAgICAgICAgICBpZiAoYXJndW1lbnRJbmRleENoZWNrZWQuc2FmZUdl
dChhcmd1bWVudEluZGV4KSAhPSBDaGVja2VkU3RhdGU6OkRpZE92ZXJmbG93KSB7CiAgICAgICAg
ICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
YXJndW1lbnRJbmRleCA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGFyZ3VtZW50SW5kZXggPCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzIC0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBtX3N0
YXRlLm9wZXJhbmQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoYXJndW1lbnRJbmRleCArIDEpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRTaG91bGRUcnlDb25z
dGFudEZvbGRpbmcodHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FyZ3VtZW50UG9zaXRpb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRQb3NpdGlvbi5oCmluZGV4IDg5YzA4ZmEwODBjZWEzMmZkOWM1OTFmMzBmMWU3ZGQ0NmYx
ZDEyNWUuLmQ3MzI0N2I5M2M1ZGM3ODZiNjE3YWE1YWFkYzJiMGY2MTUyODZiNWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRQb3NpdGlvbi5oCkBAIC0xMjAs
NyArMTIwLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZXNbaV0tPmZpbmQoKTsKLSAgICAgICAgICAgIE9w
ZXJhbmQgb3BlcmFuZCA9IHZhcmlhYmxlLT5vcGVyYW5kKCk7CisgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCA9IHZhcmlhYmxlLT5sb2NhbCgpOwogCiAgICAgICAgICAgICBpZiAo
aSkKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCmlu
ZGV4IDFmZTIwZmVmN2Q1NWZlMTc3ZWZlMzljNGU2OWFmYzM2NmY4YzQxM2MuLjcxM2U3OTk5YTdi
ZmNhMjFkZGNlYThlMzQ2MjYwZjM0MzFlNGQ5NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcApAQCAt
MzU4LDEyICszNTgsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXlC
dWZmZXI6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotCiAgICAgICAgICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpLT5vZmZzZXQgJiYgKG5vZGUtPmFy
Z3VtZW50c0NoaWxkKCktPm9wKCkgPT0gTmV3QXJyYXlXaXRoU3ByZWFkIHx8IG5vZGUtPmFyZ3Vt
ZW50c0NoaWxkKCktPm9wKCkgPT0gU3ByZWFkIHx8IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9w
KCkgPT0gTmV3QXJyYXlCdWZmZXIpKQotICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG5v
ZGUtPmFyZ3VtZW50c0NoaWxkKCksIG5vZGUpOworICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+bG9hZFZhcmFyZ3NEYXRhKCktPm9mZnNldCAmJiAobm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0g
TmV3QXJyYXlXaXRoU3ByZWFkIHx8IG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFNwcmVhZCB8fCBu
b2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBOZXdBcnJheUJ1ZmZlcikpCisgICAgICAgICAgICAgICAg
ICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQxKCksIG5vZGUpOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBDYWxs
VmFyYXJnczoKQEAgLTQ5NiwxMCArNDkzLDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGhlYXAub3BlcmFuZCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyhoZWFwLnBheWxvYWQoKS52YWx1
ZTMyKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHJlZ2lzdGVyIG1heSBub3Qg
cG9pbnQgdG8gYW4gYXJndW1lbnQgb3IgbG9jYWwsIGZvciBleGFtcGxlIGlmIHdlIGFyZSBsb29r
aW5nIGF0IFNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLgotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFvcGVyYW5kLmlzSGVhZGVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2xvYmJlcmVkQnlUaGlzQmxvY2sub3BlcmFuZChvcGVyYW5kKSA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIXJlZy5pc0hlYWRlcigpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsb2JiZXJlZEJ5VGhpc0Jsb2NrLm9wZXJhbmQocmVnKSA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgIE5vT3BDbG9iYmVyaXplKCkp
OwogICAgICAgICAgICAgfQpAQCAtNTYzLDE2ICs1NjAsMTYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpc0Nsb2JiZXJlZEJ5QmxvY2sgfD0gY2xvYmJlcmVkQnlU
aGlzQmxvY2sub3BlcmFuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xv
dDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Nsb2JiZXJlZEJ5Qmxv
Y2sgfHwgaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlzQ2xvYmJlcmVkQnlCbG9jayB8PSBjbG9iYmVyZWRCeVRoaXNCbG9j
ay5vcGVyYW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxs
ZWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDbG9i
YmVyZWRCeUJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOyArK2kpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0KSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpKTsKQEAgLTYzMCw3ICs2MjcsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBOb09wQ2xv
YmJlcml6ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKEFic3RyYWN0
SGVhcCBoZWFwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVh
cC5raW5kKCkgPT0gU3RhY2sgJiYgIWhlYXAucGF5bG9hZCgpLmlzVG9wKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNr
U2xvdChpbmxpbmVDYWxsRnJhbWUsIGhlYXAub3BlcmFuZCgpKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChpbmxp
bmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcihoZWFwLnBheWxvYWQoKS52YWx1ZTMyKCkpKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVl
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTgwOSw3ICs4MDYsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHNhZmVUb0dldFN0YWNrID0gaW5kZXggPj0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNhZmVUb0dldFN0YWNrICY9IGluZGV4IDwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlVG9HZXRTdGFjayAmPSBpbmRleCA8IGlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOwogICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZVRv
R2V0U3RhY2sgJj0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkgLSAxOwpAQCAt
ODQ4LDIzICs4NDUsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9JZGVudGl0eU9uKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIFZh
cmFyZ3NMZW5ndGg6IHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9k
ZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNF
bGltaW5hdGVkQWxsb2NhdGlvbihjYW5kaWRhdGUpKQotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gVmFyYXJnc0xlbmd0aCBjYW4gZXhpdCwg
c28gaXQgYmV0dGVyIGJlIGV4aXRPSy4KLSAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVCht
X2dyYXBoLCBub2RlLCBub2RlLT5vcmlnaW4uZXhpdE9LKTsKLSAgICAgICAgICAgICAgICAgICAg
Tm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyh0cnVlKTsKLQotCi0g
ICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5T24oZW1pdENvZGVUb0dl
dEFyZ3VtZW50c0FycmF5TGVuZ3RoKGluc2VydGlvblNldCwgY2FuZGlkYXRlLCBub2RlSW5kZXgs
IG9yaWdpbiwgLyogYWRkVGhpcyA9ICovIHRydWUpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotCisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogY2Fu
ZGlkYXRlID0gbm9kZS0+YXJndW1lbnRzQ2hpbGQoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpc0VsaW1pbmF0ZWRBbGxvY2F0aW9uKGNhbmRpZGF0ZSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCkBAIC04NzksMTAg
Kzg2MiwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzTnVtYmVy
KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
SW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNh
bkV4aXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+
Y291bnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEt
PmNvdW50Lm9mZnNldCgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNO
b25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50KSwgRWRnZShh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpc05vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8odmFyYXJnc0RhdGEtPmNvdW50Lm9mZnNldCgpKSwgRWRnZShhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpc05vZGUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwg
U3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0
YS5hZGQodmFyYXJnc0RhdGEtPmNvdW50LCBGbHVzaGVkSW50MzIpKSwKQEAgLTg5MSwxNSArODc0
LDE0IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICAgICAgYXV0byBzdG9yZVZhbHVlID0g
WyZdIChOb2RlKiB2YWx1ZSwgdW5zaWduZWQgc3RvcmVJbmRleCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZhcmFyZ3NEYXRhLT5zdGFydCArIHN0b3Jl
SW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVnLmlzTG9jYWwoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHJlZywgRmx1
c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUtPm9yaWdpbi50YWtlVmFs
aWRFeGl0KGNhbkV4aXQpLCBPcEluZm8ocmVnKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbFN0YWNrLCBub2RlLT5vcmlnaW4udGFrZVZhbGlk
RXhpdChjYW5FeGl0KSwgT3BJbmZvKHJlZy5vZmZzZXQoKSkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3JpZ2luLnRha2VWYWxpZEV4
aXQoY2FuRXhpdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHJlZyksIEVk
Z2UodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8ocmVnLm9mZnNl
dCgpKSwgRWRnZSh2YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVj
Tm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhkYXRhKSwgRWRnZSh2YWx1ZSkpOwpAQCAtOTUz
LDcgKzkzNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChjYW5kaWRhdGUtPm9wKCkgPT0gUGhhbnRvbUNyZWF0ZVJlc3QpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IGNh
bmRpZGF0ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjYW5kaWRhdGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVBcmd1bWVudENvdW50ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZnJhbWVBcmd1bWVudENv
dW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDE7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZUFyZ3VtZW50Q291bnQgPj0g
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZnJhbWVBcmd1bWVudENvdW50IC0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMTAwMSw3ICs5
ODMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKGNhbmRpZGF0ZS0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9
IGNhbmRpZGF0ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2Fu
ZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmcmFtZUFyZ3VtZW50Q291bnQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyAtIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
ZnJhbWVBcmd1bWVudENvdW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyAtIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGxvYWRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzVG9Ta2lwOyBsb2FkSW5kZXggPCBm
cmFtZUFyZ3VtZW50Q291bnQ7ICsrbG9hZEluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGxvYWRJbmRleCArIDEpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEq
IGRhdGEgPSBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChyZWcsIEZsdXNoZWRKU1ZhbHVl
KTsKQEAgLTEwMzcsNyArMTAxOSw5IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICAgICAg
ICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY2FuZGlkYXRlLT5vcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgeworCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA+IHZh
cmFyZ3NEYXRhLT5vZmZzZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzIC09IHZhcmFyZ3NEYXRhLT5vZmZzZXQ7CkBAIC0xMDQ2LDYg
KzEwMzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID49IDEpOwogCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDw9IHZhcmFyZ3NE
YXRhLT5saW1pdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YXJhcmdzRGF0YS0+bGltaXQgLSAxID49
IHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtLCB2YXJhcmdzRGF0YS0+bGltaXQsIHZhcmFy
Z3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzVXRpbGl0aWVzLmNwcAppbmRleCAxZmRjMzA5OTQ4OGZhOTk2ZWZh
MmNjMGE2OTgzNThjMGE0OTE1YzZiLi5mZjFkNTY4MGZhZTBhMjAwMTRkMWYxZTEzZGMzZTQ4ZDhj
NTQzMzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c1V0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVu
dHNVdGlsaXRpZXMuY3BwCkBAIC0zMiwxNSArMzIsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCi1ib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZCkKK2Jvb2wgYXJndW1lbnRz
SW52b2x2ZVN0YWNrU2xvdChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSwgVmlydHVh
bFJlZ2lzdGVyIHJlZykKIHsKLSAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVn
aXN0ZXIoKTsKICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuIChyZWcu
aXNBcmd1bWVudCgpICYmIHJlZy50b0FyZ3VtZW50KCkpIHx8IHJlZy5pc0hlYWRlcigpOwotCisg
ICAgCiAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbAogICAgICAgICAmJiBy
ZWcgPT0gVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTUwLDE5ICs0Niwx
OSBAQCBib29sIGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUsIE9wZXJhbmQgb3BlcmFuZAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAK
ICAgICAvLyBXZSBkbyBub3QgaW5jbHVkZSBmaXh1cHMgaGVyZSBzaW5jZSBpdCBpcyBub3QgcmVs
YXRlZCB0byB8YXJndW1lbnRzfCwgcmVzdCBwYXJhbWV0ZXJzLCBhbmQgdmFyYXJncy4KLSAgICB1
bnNpZ25lZCBudW1Bcmd1bWVudHMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOworICAgIHVuc2lnbmVkIG51bUFy
Z3VtZW50cyA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAx
OwogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudFN0YXJ0ID0KICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpICsgQ2FsbEZyYW1lOjphcmd1bWVu
dE9mZnNldCgwKTsKICAgICByZXR1cm4gcmVnID49IGFyZ3VtZW50U3RhcnQgJiYgcmVnIDwgYXJn
dW1lbnRTdGFydCArIG51bUFyZ3VtZW50czsKIH0KIAotYm9vbCBhcmd1bWVudHNJbnZvbHZlU3Rh
Y2tTbG90KE5vZGUqIGNhbmRpZGF0ZSwgT3BlcmFuZCBvcGVyYW5kKQorYm9vbCBhcmd1bWVudHNJ
bnZvbHZlU3RhY2tTbG90KE5vZGUqIGNhbmRpZGF0ZSwgVmlydHVhbFJlZ2lzdGVyIHJlZykKIHsK
LSAgICByZXR1cm4gYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKSwgb3BlcmFuZCk7CisgICAgcmV0dXJuIGFyZ3VtZW50
c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZy
YW1lKCksIHJlZyk7CiB9CiAKIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0
aCgKLSAgICBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgTm9kZSogYXJndW1lbnRzLCB1bnNp
Z25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBib29sIGFkZFRoaXMpCisgICAgSW5z
ZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIE5vZGUqIGFyZ3VtZW50cywgdW5zaWduZWQgbm9kZUlu
ZGV4LCBOb2RlT3JpZ2luIG9yaWdpbikKIHsKICAgICBHcmFwaCYgZ3JhcGggPSBpbnNlcnRpb25T
ZXQuZ3JhcGgoKTsKIApAQCAtNzMsMTQgKzY5LDExIEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1
bWVudHNBcnJheUxlbmd0aCgKICAgICAgICAgfHwgYXJndW1lbnRzLT5vcCgpID09IE5ld0FycmF5
QnVmZmVyCiAgICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tRGlyZWN0QXJndW1l
bnRzIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzCiAgICAgICAg
IHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCB8fCBhcmd1bWVudHMtPm9w
KCkgPT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyCi0gICAgICAgIHx8IGFyZ3VtZW50cy0+b3AoKSA9
PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9t
U3ByZWFkLAorICAgICAgICB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0
aFNwcmVhZCwKICAgICAgICAgYXJndW1lbnRzLT5vcCgpKTsKIAotICAgIGlmIChhcmd1bWVudHMt
Pm9wKCkgPT0gUGhhbnRvbVNwcmVhZCkKLSAgICAgICAgcmV0dXJuIGVtaXRDb2RlVG9HZXRBcmd1
bWVudHNBcnJheUxlbmd0aChpbnNlcnRpb25TZXQsIGFyZ3VtZW50cy0+Y2hpbGQxKCkubm9kZSgp
LCBub2RlSW5kZXgsIG9yaWdpbiwgYWRkVGhpcyk7Ci0KICAgICBpZiAoYXJndW1lbnRzLT5vcCgp
ID09IFBoYW50b21OZXdBcnJheVdpdGhTcHJlYWQpIHsKLSAgICAgICAgdW5zaWduZWQgbnVtYmVy
T2ZOb25TcHJlYWRBcmd1bWVudHMgPSBhZGRUaGlzOworICAgICAgICB1bnNpZ25lZCBudW1iZXJP
Zk5vblNwcmVhZEFyZ3VtZW50cyA9IDA7CiAgICAgICAgIEJpdFZlY3RvciogYml0VmVjdG9yID0g
YXJndW1lbnRzLT5iaXRWZWN0b3IoKTsKICAgICAgICAgTm9kZSogY3VycmVudFN1bSA9IG51bGxw
dHI7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudHMtPm51bUNoaWxk
cmVuKCk7IGkrKykgewpAQCAtMTEwLDcgKzEwMyw3IEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1
bWVudHNBcnJheUxlbmd0aCgKIAogICAgIGlmIChhcmd1bWVudHMtPm9wKCkgPT0gTmV3QXJyYXlC
dWZmZXIgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21OZXdBcnJheUJ1ZmZlcikgewogICAg
ICAgICByZXR1cm4gaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAotICAgICAgICAgICAgbm9k
ZUluZGV4LCBvcmlnaW4sIGpzTnVtYmVyKGFyZ3VtZW50cy0+Y2FzdE9wZXJhbmQ8SlNJbW11dGFi
bGVCdXR0ZXJmbHkqPigpLT5sZW5ndGgoKSArIGFkZFRoaXMpKTsKKyAgICAgICAgICAgIG5vZGVJ
bmRleCwgb3JpZ2luLCBqc051bWJlcihhcmd1bWVudHMtPmNhc3RPcGVyYW5kPEpTSW1tdXRhYmxl
QnV0dGVyZmx5Kj4oKS0+bGVuZ3RoKCkpKTsKICAgICB9CiAgICAgCiAgICAgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBhcmd1bWVudHMtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVD
YWxsRnJhbWUoKTsKQEAgLTEyMCw3ICsxMTMsNyBAQCBOb2RlKiBlbWl0Q29kZVRvR2V0QXJndW1l
bnRzQXJyYXlMZW5ndGgoCiAgICAgICAgIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwID0gYXJndW1l
bnRzLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpOwogICAgIAogICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAgdW5zaWdu
ZWQgYXJndW1lbnRzU2l6ZSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMgLSAhYWRkVGhpczsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzU2l6ZSA9IGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOwogICAgICAgICBpZiAo
YXJndW1lbnRzU2l6ZSA+PSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkKICAgICAgICAgICAgIGFy
Z3VtZW50c1NpemUgLT0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7CiAgICAgICAgIGVsc2UKQEAg
LTEzNiwxNCArMTI5LDE0IEBAIE5vZGUqIGVtaXRDb2RlVG9HZXRBcmd1bWVudHNBcnJheUxlbmd0
aCgKICAgICAgICAgbm9kZUluZGV4LCBTcGVjSW50MzJPbmx5LCBBcml0aFN1Yiwgb3JpZ2luLCBP
cEluZm8oQXJpdGg6OlVuY2hlY2tlZCksCiAgICAgICAgIEVkZ2UoYXJndW1lbnRDb3VudCwgSW50
MzJVc2UpLAogICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnRGb3JVc2UoCi0gICAg
ICAgICAgICBub2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIobnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAgKyAhYWRkVGhpcyksIEludDMyVXNlKSk7CisgICAgICAgICAgICBub2RlSW5kZXgsIG9yaWdp
biwganNOdW1iZXIoMSArIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSwgSW50MzJVc2UpKTsKIAog
ICAgIGlmIChudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkgewogICAgICAgICAvLyBUaGUgYWJvdmUg
c3VidHJhY3Rpb24gbWF5IHByb2R1Y2UgYSBuZWdhdGl2ZSBudW1iZXIgaWYgdGhpcyBudW1iZXIg
aXMgbm9uLXplcm8uIFdlIGNvcnJlY3QgdGhhdCBoZXJlLgogICAgICAgICByZXN1bHQgPSBpbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY0ludDMyT25s
eSwgQXJpdGhNYXgsIG9yaWdpbiwgCiAgICAgICAgICAgICBFZGdlKHJlc3VsdCwgSW50MzJVc2Up
LCAKLSAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudEZvclVzZShub2RlSW5k
ZXgsIG9yaWdpbiwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFkZFRoaXMpKSwgSW50
MzJVc2UpKTsKKyAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRDb25zdGFudEZvclVzZShu
b2RlSW5kZXgsIG9yaWdpbiwganNOdW1iZXIoMCksIEludDMyVXNlKSk7CiAgICAgICAgIHJlc3Vs
dC0+c2V0UmVzdWx0KE5vZGVSZXN1bHRJbnQzMik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1V0aWxpdGllcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNVdGlsaXRpZXMuaAppbmRleCA3NGY5MzllODE2
MjJkNDAyNDZlMjM1NWQ1MDk4YTllZDJhODUyMTBkLi45YTc3MThmYmJmNTQ3YjJmNmFlMTAxZGFm
Mzc0YTA2YTJjM2RkZjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyZ3VtZW50c1V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRzVXRpbGl0aWVzLmgKQEAgLTMxLDExICszMSwxMSBAQAogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChJbmxp
bmVDYWxsRnJhbWUqLCBPcGVyYW5kKTsKLWJvb2wgYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChO
b2RlKiBjYW5kaWRhdGUsIE9wZXJhbmQpOworYm9vbCBhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90
KElubGluZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3Rlcik7Citib29sIGFyZ3VtZW50c0ludm9s
dmVTdGFja1Nsb3QoTm9kZSogY2FuZGlkYXRlLCBWaXJ0dWFsUmVnaXN0ZXIpOwogCiBOb2RlKiBl
bWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5ndGgoCi0gICAgSW5zZXJ0aW9uU2V0JiwgTm9k
ZSogYXJndW1lbnRzLCB1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4sIGJvb2wgYWRkVGhp
cyA9IGZhbHNlKTsKKyAgICBJbnNlcnRpb25TZXQmLCBOb2RlKiBhcmd1bWVudHMsIHVuc2lnbmVk
IG5vZGVJbmRleCwgTm9kZU9yaWdpbik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0
YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUu
aAppbmRleCA4OTdjNzBkZmZiYTA2NmI2NDljYWZkY2MxZWYwOTMzNzY4MTA0ZDEzLi45NmRhYzM5
YTQ0NGZmYmQzY2U1NDNmNTdmMzZjZDYxZGVjYzI4YmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaApAQCAtMTM5LDcgKzEzOSw4
IEBAIHB1YmxpYzoKICAgICAKICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0
IHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyB9CiAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrLT52YWx1
ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgfQotICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQo
T3BlcmFuZCBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWwub3BlcmFuZChv
cGVyYW5kKTsgfQorICAgIEFic3RyYWN0VmFsdWUmIG9wZXJhbmQoaW50IG9wZXJhbmQpIHsgcmV0
dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpOyB9CisgICAgQWJzdHJh
Y3RWYWx1ZSYgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeyByZXR1cm4gbV9ibG9j
ay0+dmFsdWVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7IH0KICAgICBBYnN0cmFjdFZhbHVlJiBs
b2NhbChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5sb2NhbChp
bmRleCk7IH0KICAgICBBYnN0cmFjdFZhbHVlJiBhcmd1bWVudChzaXplX3QgaW5kZXgpIHsgcmV0
dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVudChpbmRleCk7IH0KICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFwLmNwcAppbmRleCBj
MmI1NWFhNWM0YTUyMjliMWIxYTQ0MzFjMTg3YWRlZjQ2YzNkYjI1Li43NzQzZTdkMDFmMWNhZDc4
MWQ4NGFiMDNkM2MwOWM3N2Y4MDI5YmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuY3BwCkBAIC02NSwxMCArNjUsMTAgQEAgdm9pZCBBdmFp
bGFiaWxpdHlNYXA6OnBydW5lSGVhcCgpCiAKIHZvaWQgQXZhaWxhYmlsaXR5TWFwOjpwcnVuZUJ5
TGl2ZW5lc3MoR3JhcGgmIGdyYXBoLCBDb2RlT3JpZ2luIHdoZXJlKQogewotICAgIE9wZXJhbmRz
PEF2YWlsYWJpbGl0eT4gbG9jYWxzQ29weShPcGVyYW5kc0xpa2UsIG1fbG9jYWxzLCBBdmFpbGFi
aWxpdHk6OnVuYXZhaWxhYmxlKCkpOworICAgIE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4gbG9jYWxz
Q29weShtX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLCBtX2xvY2Fscy5udW1iZXJPZkxvY2Fs
cygpLCBBdmFpbGFiaWxpdHk6OnVuYXZhaWxhYmxlKCkpOwogICAgIGdyYXBoLmZvckFsbExpdmVJ
bkJ5dGVjb2RlKAogICAgICAgICB3aGVyZSwKLSAgICAgICAgWyZdIChPcGVyYW5kIHJlZykgewor
ICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKICAgICAgICAgICAgIGxvY2Fsc0Nv
cHkub3BlcmFuZChyZWcpID0gbV9sb2NhbHMub3BlcmFuZChyZWcpOwogICAgICAgICB9KTsKICAg
ICBtX2xvY2FscyA9IFdURk1vdmUobG9jYWxzQ29weSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eU1hcC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdmFpbGFiaWxpdHlNYXAuaAppbmRleCA4MGMxMmJmMTgwMjVhNTYxMDU5NmRh
MjRlMjNjMDI1ZjJhYmU0ZjIwLi41MzU1MjU2MDIzZGRjZjI4MGRjNTk1YjMzYTdjN2ZkZWM1NGU2
NGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0
eU1hcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXZhaWxhYmlsaXR5TWFw
LmgKQEAgLTY2LDkgKzY2LDkgQEAgc3RydWN0IEF2YWlsYWJpbGl0eU1hcCB7CiAgICAgfQogICAg
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc0Z1bmN0b3IsIHR5cGVuYW1lIEFkZEZ1bmN0b3I+
Ci0gICAgdm9pZCBjbG9zZVN0YXJ0aW5nV2l0aExvY2FsKE9wZXJhbmQgb3AsIGNvbnN0IEhhc0Z1
bmN0b3ImIGhhcywgY29uc3QgQWRkRnVuY3RvciYgYWRkKQorICAgIHZvaWQgY2xvc2VTdGFydGlu
Z1dpdGhMb2NhbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBjb25zdCBIYXNGdW5jdG9yJiBoYXMsIGNv
bnN0IEFkZEZ1bmN0b3ImIGFkZCkKICAgICB7Ci0gICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFi
aWxpdHkgPSBtX2xvY2Fscy5vcGVyYW5kKG9wKTsKKyAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWls
YWJpbGl0eSA9IG1fbG9jYWxzLm9wZXJhbmQocmVnKTsKICAgICAgICAgaWYgKCFhdmFpbGFiaWxp
dHkuaGFzTm9kZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCmluZGV4IGU0OGUwYzI0ZjAzOTdmNTEx
N2RjZmE3MjE4MjQ3ZTcyOWQ2NWM5M2MuLmM4ZDFkMTdkNmQ5Yzc1NTBjNGIxYmU1MGYwZWQ5Zjcy
NjE3NmYyMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNw
cApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIERF
RklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoQmFzaWNCbG9jayk7CiAKLUJhc2lj
QmxvY2s6OkJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNpZ25lZCBu
dW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscywgdW5zaWduZWQgbnVtVG1wcywgZmxvYXQg
ZXhlY3V0aW9uQ291bnQpCitCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0
ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMsIGZs
b2F0IGV4ZWN1dGlvbkNvdW50KQogICAgIDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQog
ICAgICwgaW5kZXgoTm9CbG9jaykKICAgICAsIGNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0SGVh
ZChTdHJ1Y3R1cmVzQXJlV2F0Y2hlZCkKQEAgLTUwLDExICs1MCwxMSBAQCBCYXNpY0Jsb2NrOjpC
YXNpY0Jsb2NrKEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVCZWdpbiwgdW5zaWduZWQgbnVtQXJndW1l
bnRzLCB1bnNpZwogICAgICwgaXNMaW5rZWQoZmFsc2UpCiAjZW5kaWYKICAgICAsIGlzUmVhY2hh
YmxlKGZhbHNlKQotICAgICwgdmFyaWFibGVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxz
LCBudW1UbXBzKQotICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxz
LCBudW1UbXBzKQotICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBu
dW1UbXBzKQotICAgICwgdmFsdWVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzLCBudW1U
bXBzKQotICAgICwgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywg
bnVtTG9jYWxzLCBudW1UbXBzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpCisgICAgLCB2YXJp
YWJsZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCisgICAgLCB2YXJpYWJsZXNBdFRh
aWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCisgICAgLCB2YWx1ZXNBdEhlYWQobnVtQXJndW1l
bnRzLCBudW1Mb2NhbHMpCisgICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2Nh
bHMpCisgICAgLCBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBu
dW1Mb2NhbHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSkKICAgICAsIGV4ZWN1dGlvbkNvdW50
KGV4ZWN1dGlvbkNvdW50KQogewogfQpAQCAtNzIsMTUgKzcyLDYgQEAgdm9pZCBCYXNpY0Jsb2Nr
OjplbnN1cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxzKQogICAgIGludGVyc2VjdGlvbk9m
UGFzdFZhbHVlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzLCBBYnN0cmFjdFZhbHVl
OjpmdWxsVG9wKCkpOwogfQogCi12b2lkIEJhc2ljQmxvY2s6OmVuc3VyZVRtcHModW5zaWduZWQg
bmV3TnVtVG1wcykKLXsKLSAgICB2YXJpYWJsZXNBdEhlYWQuZW5zdXJlVG1wcyhuZXdOdW1UbXBz
KTsKLSAgICB2YXJpYWJsZXNBdFRhaWwuZW5zdXJlVG1wcyhuZXdOdW1UbXBzKTsKLSAgICB2YWx1
ZXNBdEhlYWQuZW5zdXJlVG1wcyhuZXdOdW1UbXBzKTsKLSAgICB2YWx1ZXNBdFRhaWwuZW5zdXJl
VG1wcyhuZXdOdW1UbXBzKTsKLSAgICBpbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQuZW5z
dXJlVG1wcyhuZXdOdW1UbXBzLCBBYnN0cmFjdFZhbHVlOjpmdWxsVG9wKCkpOwotfQotCiB2b2lk
IEJhc2ljQmxvY2s6OnJlcGxhY2VUZXJtaW5hbChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiB7
CiAgICAgTm9kZUFuZEluZGV4IHJlc3VsdCA9IGZpbmRUZXJtaW5hbCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAppbmRleCBkMmM1YWU5YzEzZjNiNGU3NzlmOThh
MTRjMTcwMzdkOThmOTZkOWFhLi5kNDU3MTc1ZThiNzE1MjM1ZmM3OWRkMTIyOTBjOWVmZDk3NWVi
N2NiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2su
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaApAQCAtNDks
MTIgKzQ5LDExIEBAIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEJhc2lj
QmxvY2spOwogc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvY2s+IHsKICAg
ICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIoQmFz
aWNCbG9jayk7CiAgICAgQmFzaWNCbG9jaygKLSAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29k
ZUJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscywgdW5zaWdu
ZWQgbnVtVG1wcywKKyAgICAgICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUJlZ2luLCB1bnNpZ25l
ZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscywKICAgICAgICAgZmxvYXQgZXhlY3V0
aW9uQ291bnQpOwogICAgIH5CYXNpY0Jsb2NrKCk7CiAgICAgCiAgICAgdm9pZCBlbnN1cmVMb2Nh
bHModW5zaWduZWQgbmV3TnVtTG9jYWxzKTsKLSAgICB2b2lkIGVuc3VyZVRtcHModW5zaWduZWQg
bmV3TnVtVG1wcyk7CiAgICAgCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX25v
ZGVzLnNpemUoKTsgfQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmxvY2tJbnNlcnRp
b25TZXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNl
dC5jcHAKaW5kZXggMDA4Y2Y1MjI2OTU3YzlhODM1ODVjNWU1ZTJjMTI1ZjJmOGNlNGIyZS4uNzUw
OGUyMTlkYzdjNTgzZGI5ZWE4ZmNlNjQ2ODU4OTk5ZTA0NjBmOSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja0luc2VydGlvblNldC5jcHAKQEAgLTUxLDcgKzUx
LDcgQEAgdm9pZCBCbG9ja0luc2VydGlvblNldDo6aW5zZXJ0KHNpemVfdCBpbmRleCwgUmVmPEJh
c2ljQmxvY2s+JiYgYmxvY2spCiAKIEJhc2ljQmxvY2sqIEJsb2NrSW5zZXJ0aW9uU2V0OjppbnNl
cnQoc2l6ZV90IGluZGV4LCBmbG9hdCBleGVjdXRpb25Db3VudCkKIHsKLSAgICBSZWY8QmFzaWNC
bG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBt
X2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwgbV9n
cmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCksIG1fZ3JhcGgu
YmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZlRtcHMoKSwgZXhlY3V0aW9uQ291bnQp
KTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2so
Qnl0ZWNvZGVJbmRleCgpLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVy
T2ZBcmd1bWVudHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9m
TG9jYWxzKCksIGV4ZWN1dGlvbkNvdW50KSk7CiAgICAgYmxvY2stPmlzUmVhY2hhYmxlID0gdHJ1
ZTsKICAgICBhdXRvKiByZXN1bHQgPSBibG9jay5wdHIoKTsKICAgICBpbnNlcnQoaW5kZXgsIFdU
Rk1vdmUoYmxvY2spKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAKaW5kZXggOTNiZTBlZGIxYTcyMmU3Mzg1MjJjZWE2YzAzZTc0ZjkzZDNjZDI0
Ni4uN2VmZmFkMDdmMjI0MjU4ZjA3YTJlMDRmNmFiZmVlMDYwYjJmYWQ1MCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTExMyw3ICsx
MTMsNiBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9jb25zdGFudE9uZShncmFwaC5mcmVlemUoanNO
dW1iZXIoMSkpKQogICAgICAgICAsIG1fbnVtQXJndW1lbnRzKG1fY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCkpCiAgICAgICAgICwgbV9udW1Mb2NhbHMobV9jb2RlQmxvY2stPm51bUNhbGxlZUxv
Y2FscygpKQotICAgICAgICAsIG1fbnVtVG1wcyhtX2NvZGVCbG9jay0+bnVtVG1wcygpKQogICAg
ICAgICAsIG1fcGFyYW1ldGVyU2xvdHMoMCkKICAgICAgICAgLCBtX251bVBhc3NlZFZhckFyZ3Mo
MCkKICAgICAgICAgLCBtX2lubGluZVN0YWNrVG9wKDApCkBAIC0xNDIsMTcgKzE0MSw2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBtX2dyYXBoLmJsb2NrKGkpLT5lbnN1cmVMb2NhbHMobmV3TnVt
TG9jYWxzKTsKICAgICB9CiAKLSAgICB2b2lkIGVuc3VyZVRtcHModW5zaWduZWQgbmV3TnVtVG1w
cykKLSAgICB7Ci0gICAgICAgIFZFUkJPU0VfTE9HKCIgICBlbnN1cmVUbXBzOiB0cnlpbmcgdG8g
cmFpc2UgbV9udW1UbXBzIGZyb20gIiwgbV9udW1UbXBzLCAiIHRvICIsIG5ld051bVRtcHMsICJc
biIpOwotICAgICAgICBpZiAobmV3TnVtVG1wcyA8PSBtX251bVRtcHMpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIG1fbnVtVG1wcyA9IG5ld051bVRtcHM7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytpKQotICAgICAgICAgICAgbV9n
cmFwaC5ibG9jayhpKS0+ZW5zdXJlVG1wcyhuZXdOdW1UbXBzKTsKLSAgICB9Ci0KLQogICAgIC8v
IEhlbHBlciBmb3IgbWluIGFuZCBtYXguCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tzRnVu
Y3Rvcj4KICAgICBib29sIGhhbmRsZU1pbk1heChWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBOb2Rl
VHlwZSBvcCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIGNvbnN0IENoZWNrc0Z1bmN0b3ImIGluc2VydENoZWNrcyk7CkBAIC0yODQsMTcgKzI3Miw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBsaW5rQmxvY2soQmFzaWNCbG9jayosIFZlY3RvcjxCYXNp
Y0Jsb2NrKj4mIHBvc3NpYmxlVGFyZ2V0cyk7CiAgICAgdm9pZCBsaW5rQmxvY2tzKFZlY3RvcjxC
YXNpY0Jsb2NrKj4mIHVubGlua2VkQmxvY2tzLCBWZWN0b3I8QmFzaWNCbG9jayo+JiBwb3NzaWJs
ZVRhcmdldHMpOwogICAgIAotICAgIHZvaWQgcHJvZ3Jlc3NUb05leHRDaGVja3BvaW50KCkKLSAg
ICB7Ci0gICAgICAgIG1fY3VycmVudEluZGV4ID0gQnl0ZWNvZGVJbmRleChtX2N1cnJlbnRJbmRl
eC5vZmZzZXQoKSwgbV9jdXJyZW50SW5kZXguY2hlY2twb2ludCgpICsgMSk7Ci0gICAgICAgIC8v
IEF0IHRoaXMgcG9pbnQsIGl0J3MgYWdhaW4gT0sgdG8gT1NSIGV4aXQuCi0gICAgICAgIG1fZXhp
dE9LID0gdHJ1ZTsKLSAgICAgICAgYWRkVG9HcmFwaChFeGl0T0spOwotCi0gICAgICAgIHByb2Nl
c3NTZXRMb2NhbFF1ZXVlKCk7Ci0gICAgfQotCi0gICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdW
YXJpYWJsZUFjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kKQorICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIApAQCAtMzAz
LDE0ICsyODEsMTYgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgLy8gR2V0L1NldCB0aGUg
b3BlcmFuZHMvcmVzdWx0IG9mIGEgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uCi0gICAgTm9kZSogZ2V0
RGlyZWN0KE9wZXJhbmQgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXREaXJlY3QoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCiAgICAgewogICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgp
KTsKIAorICAgICAgICAvLyBJcyB0aGlzIGFuIGFyZ3VtZW50PwogICAgICAgICBpZiAob3BlcmFu
ZC5pc0FyZ3VtZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0QXJndW1lbnQob3BlcmFuZC52
aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICByZXR1cm4gZ2V0QXJndW1lbnQob3BlcmFu
ZCk7CiAKLSAgICAgICAgcmV0dXJuIGdldExvY2FsT3JUbXAob3BlcmFuZCk7CisgICAgICAgIC8v
IE11c3QgYmUgYSBsb2NhbC4KKyAgICAgICAgcmV0dXJuIGdldExvY2FsKG9wZXJhbmQpOwogICAg
IH0KIAogICAgIE5vZGUqIGdldChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKQEAgLTMyMCw4ICsz
MDAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgdW5zaWduZWQgb2xkU2l6ZSA9IG1fY29uc3Rh
bnRzLnNpemUoKTsKICAgICAgICAgICAgIGlmIChjb25zdGFudEluZGV4ID49IG9sZFNpemUgfHwg
IW1fY29uc3RhbnRzW2NvbnN0YW50SW5kZXhdKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgQ29k
ZUJsb2NrJiBjb2RlQmxvY2sgPSAqbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2s7Ci0gICAg
ICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNvZGVCbG9jay5nZXRDb25zdGFudChvcGVyYW5k
KTsKLSAgICAgICAgICAgICAgICBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gc291cmNlQ29kZVJl
cHJlc2VudGF0aW9uID0gY29kZUJsb2NrLmNvbnN0YW50U291cmNlQ29kZVJlcHJlc2VudGF0aW9u
KG9wZXJhbmQpOworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjb2RlQmxvY2suZ2V0
Q29uc3RhbnQob3BlcmFuZC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uIHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiA9IGNvZGVCbG9jay5jb25zdGFu
dFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbihvcGVyYW5kLm9mZnNldCgpKTsKICAgICAgICAgICAg
ICAgICBpZiAoY29uc3RhbnRJbmRleCA+PSBvbGRTaXplKSB7CiAgICAgICAgICAgICAgICAgICAg
IG1fY29uc3RhbnRzLmdyb3coY29uc3RhbnRJbmRleCArIDEpOwogICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRTaXplOyBpIDwgbV9jb25zdGFudHMuc2l6ZSgpOyArK2kp
CkBAIC0zODAsMTAgKzM2MCw5IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGluaXRpYWxpemluZyBs
b2NhbHMgYXQgdGhlIHRvcCBvZiBhIGZ1bmN0aW9uLgogICAgICAgICBJbW1lZGlhdGVOYWtlZFNl
dAogICAgIH07Ci0KLSAgICBOb2RlKiBzZXREaXJlY3QoT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2
YWx1ZSwgU2V0TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorICAgIE5vZGUqIHNldERpcmVjdChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFsdWUsIFNldE1vZGUgc2V0TW9kZSA9IE5v
cm1hbFNldCkKICAgICB7Ci0gICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9wZXJh
bmQpLCB2YWx1ZSk7CisgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9wZXJhbmQu
b2Zmc2V0KCkpLCB2YWx1ZSk7CiAKICAgICAgICAgLy8gV2UgY2FuJ3QgZXhpdCBhbnltb3JlIGJl
Y2F1c2Ugb3VyIE9TUiBleGl0IHN0YXRlIGhhcyBjaGFuZ2VkLgogICAgICAgICBtX2V4aXRPSyA9
IGZhbHNlOwpAQCAtMzk3LDcgKzM3Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBy
ZXR1cm4gZGVsYXllZC5leGVjdXRlKHRoaXMpOwogICAgIH0KLQorICAgIAogICAgIHZvaWQgcHJv
Y2Vzc1NldExvY2FsUXVldWUoKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fc2V0TG9jYWxRdWV1ZS5zaXplKCk7ICsraSkKQEAgLTQxNSwxNyArMzk0LDE4IEBAIHBy
aXZhdGU6CiAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEdldExvY2FsKTsKICAgICAgICAg
QVNTRVJUKG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCkgPT0gbV9jdXJyZW50
SW5kZXgpOwogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGVLZXkga2V5KG1fY3VycmVudEluZGV4LCBub2RlLT5vcGVyYW5kKCkpOworICAgICAgICBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkobV9jdXJyZW50SW5kZXgsIG5vZGUtPmxvY2Fs
KCkpOwogICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9pbmxpbmVTdGFja1Rv
cC0+bV9sYXp5T3BlcmFuZHMucHJlZGljdGlvbihsb2NrZXIsIGtleSk7CiAgICAgICAgIG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0KHByZWRpY3Rpb24pOwogICAgICAgICByZXR1
cm4gbm9kZTsKICAgICB9CiAKICAgICAvLyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBh
Ym92ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMgYSBsb2NhbCB2YXJpYWJsZS4KLSAgICBOb2RlKiBn
ZXRMb2NhbE9yVG1wKE9wZXJhbmQgb3BlcmFuZCkKKyAgICBOb2RlKiBnZXRMb2NhbChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChvcGVyYW5kLmlzVG1wKCkg
fHwgb3BlcmFuZC5pc0xvY2FsKCkpOwotICAgICAgICBOb2RlKiYgbm9kZSA9IG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgdW5zaWduZWQg
bG9jYWwgPSBvcGVyYW5kLnRvTG9jYWwoKTsKKworICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCk7CiAgICAgICAgIAogICAgICAg
ICAvLyBUaGlzIGhhcyB0d28gZ29hbHM6IDEpIGxpbmsgdG9nZXRoZXIgdmFyaWFibGUgYWNjZXNz
IGRhdGFzLCBhbmQgMikKICAgICAgICAgLy8gdHJ5IHRvIGF2b2lkIGNyZWF0aW5nIHJlZHVuZGFu
dCBHZXRMb2NhbHMuICgxKSBpcyByZXF1aXJlZCBmb3IKQEAgLTQ1MCwyNiArNDMwLDIwIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVy
YW5kKTsKICAgICAgICAgCiAgICAgICAgIG5vZGUgPSBpbmplY3RMYXp5T3BlcmFuZFNwZWN1bGF0
aW9uKGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZSkpKTsKKyAgICAgICAgbV9j
dXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkgPSBub2RlOwogICAgICAg
ICByZXR1cm4gbm9kZTsKICAgICB9Ci0gICAgTm9kZSogc2V0TG9jYWxPclRtcChjb25zdCBDb2Rl
T3JpZ2luJiBzZW1hbnRpY09yaWdpbiwgT3BlcmFuZCBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0
TW9kZSBzZXRNb2RlID0gTm9ybWFsU2V0KQorICAgIE5vZGUqIHNldExvY2FsKGNvbnN0IENvZGVP
cmlnaW4mIHNlbWFudGljT3JpZ2luLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogdmFs
dWUsIFNldE1vZGUgc2V0TW9kZSA9IE5vcm1hbFNldCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChv
cGVyYW5kLmlzVG1wKCkgfHwgb3BlcmFuZC5pc0xvY2FsKCkpOwogICAgICAgICBTZXRGb3JTY29w
ZTxDb2RlT3JpZ2luPiBvcmlnaW5DaGFuZ2UobV9jdXJyZW50U2VtYW50aWNPcmlnaW4sIHNlbWFu
dGljT3JpZ2luKTsKIAotICAgICAgICBpZiAob3BlcmFuZC5pc1RtcCgpICYmIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihvcGVyYW5kLnZhbHVlKCkpID49IG1fbnVtVG1wcykgewotICAgICAgICAgICAg
aWYgKGlubGluZUNhbGxGcmFtZSgpKQotICAgICAgICAgICAgICAgIGRhdGFMb2dMbigqaW5saW5l
Q2FsbEZyYW1lKCkpOwotICAgICAgICAgICAgZGF0YUxvZ0xuKCJCYWQgb3BlcmFuZDogIiwgb3Bl
cmFuZCwgIiBidXQgY3VycmVudCBudW1iZXIgb2YgdG1wcyBpczogIiwgbV9udW1UbXBzLCAiIGNv
ZGUgYmxvY2sgaGFzOiAiLCBtX3Byb2ZpbGVkQmxvY2stPm51bVRtcHMoKSwgIiB0bXBzLiIpOwot
ICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzZXRNb2RlICE9
IEltbWVkaWF0ZU5ha2VkU2V0ICYmICFvcGVyYW5kLmlzVG1wKCkpIHsKLSAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciByZWcgPSBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOwotICAgICAgICAg
ICAgQXJndW1lbnRQb3NpdGlvbiogYXJndW1lbnRQb3NpdGlvbiA9IGZpbmRBcmd1bWVudFBvc2l0
aW9uRm9yTG9jYWwocmVnKTsKKyAgICAgICAgdW5zaWduZWQgbG9jYWwgPSBvcGVyYW5kLnRvTG9j
YWwoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzZXRNb2RlICE9IEltbWVkaWF0ZU5ha2VkU2V0
KSB7CisgICAgICAgICAgICBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uID0gZmlu
ZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbChvcGVyYW5kKTsKICAgICAgICAgICAgIGlmIChhcmd1
bWVudFBvc2l0aW9uKQogICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KG9wZXJhbmQsIGFyZ3Vt
ZW50UG9zaXRpb24pOwotICAgICAgICAgICAgZWxzZSBpZiAobV9ncmFwaC5uZWVkc1Njb3BlUmVn
aXN0ZXIoKSAmJiByZWcgPT0gbV9jb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSkKKyAgICAgICAg
ICAgIGVsc2UgaWYgKG1fZ3JhcGgubmVlZHNTY29wZVJlZ2lzdGVyKCkgJiYgb3BlcmFuZCA9PSBt
X2NvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpKQogICAgICAgICAgICAgICAgIGZsdXNoKG9wZXJh
bmQpOwogICAgICAgICB9CiAKQEAgLTQ3OSw3ICs0NTMsNyBAQCBwcml2YXRlOgogICAgICAgICB2
YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlQ2hlY2tBcnJheUhvaXN0aW5nRmFpbGVkKAogICAgICAg
ICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShzZW1hbnRp
Y09yaWdpbi5ieXRlY29kZUluZGV4KCksIEJhZEluZGV4aW5nVHlwZSkpOwogICAgICAgICBOb2Rl
KiBub2RlID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSks
IHZhbHVlKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5k
KG9wZXJhbmQpID0gbm9kZTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5sb2NhbChsb2NhbCkgPSBub2RlOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAKQEAg
LTUxMSwyMSArNDg1LDIwIEBAIHByaXZhdGU6CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZTsKICAgICAgICAgcmV0dXJuIG5v
ZGU7CiAgICAgfQotICAgIE5vZGUqIHNldEFyZ3VtZW50KGNvbnN0IENvZGVPcmlnaW4mIHNlbWFu
dGljT3JpZ2luLCBPcGVyYW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUg
PSBOb3JtYWxTZXQpCisgICAgTm9kZSogc2V0QXJndW1lbnQoY29uc3QgQ29kZU9yaWdpbiYgc2Vt
YW50aWNPcmlnaW4sIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9k
ZSBzZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKICAgICAgICAgU2V0Rm9yU2NvcGU8Q29kZU9y
aWdpbj4gb3JpZ2luQ2hhbmdlKG1fY3VycmVudFNlbWFudGljT3JpZ2luLCBzZW1hbnRpY09yaWdp
bik7CiAKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmQudmlydHVhbFJlZ2lz
dGVyKCk7Ci0gICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gcmVnLnRvQXJndW1lbnQoKTsKKyAg
ICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5kLnRvQXJndW1lbnQoKTsKICAgICAgICAg
QVNTRVJUKGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHMpOwogICAgICAgICAKLSAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0Rh
dGEocmVnKTsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAKICAgICAgICAgLy8gQWx3YXlzIGZs
dXNoIGFyZ3VtZW50cywgZXhjZXB0IGZvciAndGhpcycuIElmICd0aGlzJyBpcyBjcmVhdGVkIGJ5
IHVzLAogICAgICAgICAvLyB0aGVuIG1ha2Ugc3VyZSB0aGF0IGl0J3MgbmV2ZXIgdW5ib3hlZC4K
ICAgICAgICAgaWYgKGFyZ3VtZW50IHx8IG1fZ3JhcGgubmVlZHNGbHVzaGVkVGhpcygpKSB7CiAg
ICAgICAgICAgICBpZiAoc2V0TW9kZSAhPSBJbW1lZGlhdGVOYWtlZFNldCkKLSAgICAgICAgICAg
ICAgICBmbHVzaERpcmVjdChyZWcpOworICAgICAgICAgICAgICAgIGZsdXNoRGlyZWN0KG9wZXJh
bmQpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIWFyZ3VtZW50ICYmIG1fY29k
ZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KQpAQCAtNTYx
LDE2ICs1MzQsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGludCBhcmd1bWVudCA9IFZpcnR1
YWxSZWdpc3RlcihvcGVyYW5kLm9mZnNldCgpIC0gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCkudG9Bcmd1bWVudCgpOwogICAgICAgICAgICAgcmV0dXJuIHN0YWNrLT5tX2FyZ3VtZW50UG9z
aXRpb25zW2FyZ3VtZW50XTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIEFyZ3VtZW50UG9zaXRpb24qIGZpbmRB
cmd1bWVudFBvc2l0aW9uKE9wZXJhbmQgb3BlcmFuZCkKKyAgICBBcmd1bWVudFBvc2l0aW9uKiBm
aW5kQXJndW1lbnRQb3NpdGlvbihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAg
ICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGZpbmRB
cmd1bWVudFBvc2l0aW9uRm9yQXJndW1lbnQob3BlcmFuZC50b0FyZ3VtZW50KCkpOwotICAgICAg
ICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbChvcGVyYW5kLnZpcnR1YWxSZWdp
c3RlcigpKTsKKyAgICAgICAgcmV0dXJuIGZpbmRBcmd1bWVudFBvc2l0aW9uRm9yTG9jYWwob3Bl
cmFuZCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQWRkRmx1c2hEaXJlY3RGdW5j
PgpAQCAtNTgxLDkgKzU1Miw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBBU1NFUlQoIW1fZ3Jh
cGguaGFzRGVidWdnZXJFbmFibGVkKCkpOwogICAgICAgICAgICAgbnVtQXJndW1lbnRzID0gaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNXaXRoRml4dXAuc2l6ZSgpOwogICAgICAgICAgICAgaWYg
KGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgICAgICBhZGRGbHVz
aERpcmVjdChpbmxpbmVDYWxsRnJhbWUsIHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlu
bGluZUNhbGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgVmlydHVhbFJlZ2lz
dGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUtPmlzVmFyYXJncygpKQotICAgICAgICAgICAgICAgIGFkZEZsdXNoRGlyZWN0KGlubGlu
ZUNhbGxGcmFtZSwgcmVtYXBPcGVyYW5kKGlubGluZUNhbGxGcmFtZSwgQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKKyAgICAgICAgICAgICAgICBhZGRGbHVzaERp
cmVjdChpbmxpbmVDYWxsRnJhbWUsIHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsK
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBudW1Bcmd1bWVudHMgPSBtX2dyYXBoLmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSktPm51bVBhcmFtZXRlcnMoKTsKIApAQCAt
NjA2LDcgKzU3Nyw2IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsK
ICAgICAgICAgICAgICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgZnVsbExpdmVuZXNzID0gbV9n
cmFwaC5saXZlbmVzc0Zvcihjb2RlQmxvY2spOwotICAgICAgICAgICAgICAgIC8vIE5vdGU6IFdl
IGRvbid0IG5lZWQgdG8gaGFuZGxlIHRtcHMgaGVyZSBiZWNhdXNlIHRtcHMgYXJlIG5vdCByZXF1
aXJlZCB0byBiZSBmbHVzaGVkIHRvIHRoZSBzdGFjay4KICAgICAgICAgICAgICAgICBjb25zdCBh
dXRvJiBsaXZlbmVzc0F0Qnl0ZWNvZGUgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoYnl0ZWNv
ZGVJbmRleCwgbV9ncmFwaC5hcHByb3ByaWF0ZUxpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludChvcmln
aW4sIGlzQ2FsbGVyT3JpZ2luKSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb2Nh
bCA9IGNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7IGxvY2FsLS07KSB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChsaXZlbmVzc0F0Qnl0ZWNvZGVbbG9jYWxdKQpAQCAtNjE2LDI3ICs1ODYs
MjcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0pOwogICAgIH0KIAotICAgIHZvaWQgZmx1c2go
T3BlcmFuZCBvcGVyYW5kKQorICAgIHZvaWQgZmx1c2goVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
CiAgICAgewogICAgICAgICBmbHVzaERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJh
bmQob3BlcmFuZCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGZsdXNoRGlyZWN0KE9wZXJhbmQg
b3BlcmFuZCkKKyAgICB2b2lkIGZsdXNoRGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQog
ICAgIHsKICAgICAgICAgZmx1c2hEaXJlY3Qob3BlcmFuZCwgZmluZEFyZ3VtZW50UG9zaXRpb24o
b3BlcmFuZCkpOwogICAgIH0KIAotICAgIHZvaWQgZmx1c2hEaXJlY3QoT3BlcmFuZCBvcGVyYW5k
LCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQorICAgIHZvaWQgZmx1c2hEaXJl
Y3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIEFyZ3VtZW50UG9zaXRpb24qIGFyZ3VtZW50UG9z
aXRpb24pCiAgICAgewogICAgICAgICBhZGRGbHVzaE9yUGhhbnRvbUxvY2FsPEZsdXNoPihvcGVy
YW5kLCBhcmd1bWVudFBvc2l0aW9uKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxOb2RlVHlwZSBu
b2RlVHlwZT4KLSAgICB2b2lkIGFkZEZsdXNoT3JQaGFudG9tTG9jYWwoT3BlcmFuZCBvcGVyYW5k
LCBBcmd1bWVudFBvc2l0aW9uKiBhcmd1bWVudFBvc2l0aW9uKQorICAgIHZvaWQgYWRkRmx1c2hP
clBoYW50b21Mb2NhbChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQXJndW1lbnRQb3NpdGlvbiog
YXJndW1lbnRQb3NpdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0
YW50KCkpOwogICAgICAgICAKLSAgICAgICAgTm9kZSomIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIE5vZGUqIG5vZGUgPSBt
X2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAg
IAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlOwogICAgICAgICAKQEAgLTY0
NiwyNSArNjE2LDI2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB2YXJpYWJsZSA9IG5ld1Zhcmlh
YmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKICAgICAgICAgCiAgICAgICAgIG5vZGUgPSBhZGRUb0dy
YXBoKG5vZGVUeXBlLCBPcEluZm8odmFyaWFibGUpKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZTsKICAgICAgICAgaWYgKGFy
Z3VtZW50UG9zaXRpb24pCiAgICAgICAgICAgICBhcmd1bWVudFBvc2l0aW9uLT5hZGRWYXJpYWJs
ZSh2YXJpYWJsZSk7CiAgICAgfQogCi0gICAgdm9pZCBwaGFudG9tTG9jYWxEaXJlY3QoT3BlcmFu
ZCBvcGVyYW5kKQorICAgIHZvaWQgcGhhbnRvbUxvY2FsRGlyZWN0KFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQogICAgIHsKICAgICAgICAgYWRkRmx1c2hPclBoYW50b21Mb2NhbDxQaGFudG9tTG9j
YWw+KG9wZXJhbmQsIGZpbmRBcmd1bWVudFBvc2l0aW9uKG9wZXJhbmQpKTsKICAgICB9CiAKICAg
ICB2b2lkIGZsdXNoKElubGluZVN0YWNrRW50cnkqIGlubGluZVN0YWNrRW50cnkpCiAgICAgewot
ICAgICAgICBhdXRvIGFkZEZsdXNoRGlyZWN0ID0gWyZdIChJbmxpbmVDYWxsRnJhbWUqLCBPcGVy
YW5kIG9wZXJhbmQpIHsgZmx1c2hEaXJlY3Qob3BlcmFuZCk7IH07CisgICAgICAgIGF1dG8gYWRk
Rmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciByZWcp
IHsgZmx1c2hEaXJlY3QocmVnKTsgfTsKICAgICAgICAgZmx1c2hJbXBsKGlubGluZVN0YWNrRW50
cnktPm1faW5saW5lQ2FsbEZyYW1lLCBhZGRGbHVzaERpcmVjdCk7CiAgICAgfQogCiAgICAgdm9p
ZCBmbHVzaEZvclRlcm1pbmFsKCkKICAgICB7Ci0gICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3Qg
PSBbJl0gKElubGluZUNhbGxGcmFtZSosIE9wZXJhbmQgb3BlcmFuZCkgeyBmbHVzaERpcmVjdChv
cGVyYW5kKTsgfTsKLSAgICAgICAgYXV0byBhZGRQaGFudG9tTG9jYWxEaXJlY3QgPSBbJl0gKElu
bGluZUNhbGxGcmFtZSosIE9wZXJhbmQgb3BlcmFuZCkgeyBwaGFudG9tTG9jYWxEaXJlY3Qob3Bl
cmFuZCk7IH07CisgICAgICAgIGF1dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxG
cmFtZSosIFZpcnR1YWxSZWdpc3RlciByZWcpIHsgZmx1c2hEaXJlY3QocmVnKTsgfTsKKyAgICAg
ICAgYXV0byBhZGRQaGFudG9tTG9jYWxEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSosIFZp
cnR1YWxSZWdpc3RlciByZWcpIHsgcGhhbnRvbUxvY2FsRGlyZWN0KHJlZyk7IH07CiAgICAgICAg
IGZsdXNoRm9yVGVybWluYWxJbXBsKGN1cnJlbnRDb2RlT3JpZ2luKCksIGFkZEZsdXNoRGlyZWN0
LCBhZGRQaGFudG9tTG9jYWxEaXJlY3QpOwogICAgIH0KIApAQCAtNzkyLDExICs3NjMsNiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hp
bGQzKSk7CiAgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKHJlc3VsdCk7CiAgICAgfQotICAgIE5v
ZGUqIGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE9wZXJhbmQgb3BlcmFuZCwgTm9kZSogY2hpbGQx
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG9wID09IE1vdkhpbnQpOwotICAgICAgICByZXR1cm4g
YWRkVG9HcmFwaChvcCwgT3BJbmZvKG9wZXJhbmQua2luZCgpKSwgT3BJbmZvKG9wZXJhbmQudmFs
dWUoKSksIGNoaWxkMSk7Ci0gICAgfQogICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9kZVR5cGUgb3As
IE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yLCBFZGdlIGNoaWxkMSwgRWRnZSBjaGlsZDIgPSBF
ZGdlKCksIEVkZ2UgY2hpbGQzID0gRWRnZSgpKQogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0
ID0gbV9ncmFwaC5hZGROb2RlKApAQCAtMTEyNywxMCArMTA5Myw4IEBAIHByaXZhdGU6CiAKICAg
ICAvLyBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgogICAg
IHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzOwotICAgIC8vIFRoZSBudW1iZXIgb2YgbG9jYWxzICh2
YXJzICsgdGVtcG9yYXJpZXMpIHVzZWQgYnkgdGhlIGJ5dGVjb2RlIGZvciB0aGUgZnVuY3Rpb24u
CisgICAgLy8gVGhlIG51bWJlciBvZiBsb2NhbHMgKHZhcnMgKyB0ZW1wb3JhcmllcykgdXNlZCBp
biB0aGUgZnVuY3Rpb24uCiAgICAgdW5zaWduZWQgbV9udW1Mb2NhbHM7Ci0gICAgLy8gVGhlIG1h
eCBudW1iZXIgb2YgdGVtcHMgdXNlZCBmb3IgZm9yd2FyZGluZyBkYXRhIHRvIGFuIE9TUiBleGl0
IGNoZWNrcG9pbnQuCi0gICAgdW5zaWduZWQgbV9udW1UbXBzOwogICAgIC8vIFRoZSBudW1iZXIg
b2Ygc2xvdHMgKGluIHVuaXRzIG9mIHNpemVvZihSZWdpc3RlcikpIHRoYXQgd2UgbmVlZCB0bwog
ICAgIC8vIHByZWFsbG9jYXRlIGZvciBhcmd1bWVudHMgdG8gb3V0Z29pbmcgY2FsbHMgZnJvbSB0
aGlzIGZyYW1lLiBUaGlzCiAgICAgLy8gbnVtYmVyIGluY2x1ZGVzIHRoZSBDYWxsRnJhbWUgc2xv
dHMgdGhhdCB3ZSBpbml0aWFsaXplIGZvciB0aGUgY2FsbGVlCkBAIC0xMTk3LDE3ICsxMTYxLDE0
IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICB+SW5saW5lU3RhY2tFbnRyeSgpOwogICAg
ICAgICAKLSAgICAgICAgT3BlcmFuZCByZW1hcE9wZXJhbmQoT3BlcmFuZCBvcGVyYW5kKSBjb25z
dAorICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1faW5saW5lQ2FsbEZy
YW1lKQogICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYW5kOwotCi0gICAgICAgICAgICBpZiAo
b3BlcmFuZC5pc1RtcCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBPcGVyYW5kOjp0bXAob3Bl
cmFuZC52YWx1ZSgpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIEFTU0VSVCghb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5pc0NvbnN0
YW50KCkpOworICAgICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CiAKLSAg
ICAgICAgICAgIHJldHVybiBvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpICsgbV9pbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0OworICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kLm9mZnNldCgpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKICAgICAg
ICAgfQogICAgIH07CiAgICAgCkBAIC0xMjE2LDggKzExNzcsMTMgQEAgcHJpdmF0ZToKICAgICBJ
Q1N0YXR1c0NvbnRleHRTdGFjayBtX2ljQ29udGV4dFN0YWNrOwogICAgIAogICAgIHN0cnVjdCBE
ZWxheWVkU2V0TG9jYWwgeworICAgICAgICBDb2RlT3JpZ2luIG1fb3JpZ2luOworICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgbV9vcGVyYW5kOworICAgICAgICBOb2RlKiBtX3ZhbHVlOworICAgICAg
ICBTZXRNb2RlIG1fc2V0TW9kZTsKKyAgICAgICAgCiAgICAgICAgIERlbGF5ZWRTZXRMb2NhbCgp
IHsgfQotICAgICAgICBEZWxheWVkU2V0TG9jYWwoY29uc3QgQ29kZU9yaWdpbiYgb3JpZ2luLCBP
cGVyYW5kIG9wZXJhbmQsIE5vZGUqIHZhbHVlLCBTZXRNb2RlIHNldE1vZGUpCisgICAgICAgIERl
bGF5ZWRTZXRMb2NhbChjb25zdCBDb2RlT3JpZ2luJiBvcmlnaW4sIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBzZXRNb2RlKQogICAgICAgICAgICAgOiBtX29y
aWdpbihvcmlnaW4pCiAgICAgICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQogICAgICAgICAg
ICAgLCBtX3ZhbHVlKHZhbHVlKQpAQCAtMTIzMCwxMyArMTE5Niw4IEBAIHByaXZhdGU6CiAgICAg
ICAgIHsKICAgICAgICAgICAgIGlmIChtX29wZXJhbmQuaXNBcmd1bWVudCgpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBwYXJzZXItPnNldEFyZ3VtZW50KG1fb3JpZ2luLCBtX29wZXJhbmQsIG1f
dmFsdWUsIG1fc2V0TW9kZSk7Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VyLT5zZXRMb2NhbE9y
VG1wKG1fb3JpZ2luLCBtX29wZXJhbmQsIG1fdmFsdWUsIG1fc2V0TW9kZSk7CisgICAgICAgICAg
ICByZXR1cm4gcGFyc2VyLT5zZXRMb2NhbChtX29yaWdpbiwgbV9vcGVyYW5kLCBtX3ZhbHVlLCBt
X3NldE1vZGUpOwogICAgICAgICB9Ci0KLSAgICAgICAgQ29kZU9yaWdpbiBtX29yaWdpbjsKLSAg
ICAgICAgT3BlcmFuZCBtX29wZXJhbmQ7Ci0gICAgICAgIE5vZGUqIG1fdmFsdWUgeyBudWxscHRy
IH07Ci0gICAgICAgIFNldE1vZGUgbV9zZXRNb2RlOwogICAgIH07CiAgICAgCiAgICAgVmVjdG9y
PERlbGF5ZWRTZXRMb2NhbCwgMj4gbV9zZXRMb2NhbFF1ZXVlOwpAQCAtMTI0OSw3ICsxMjEwLDcg
QEAgcHJpdmF0ZToKIEJhc2ljQmxvY2sqIEJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFi
bGVCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgQVNTRVJUKGJ5dGVj
b2RlSW5kZXgpOwotICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFz
aWNCbG9jayhieXRlY29kZUluZGV4LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIG1fbnVt
VG1wcywgMSkpOworICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFz
aWNCbG9jayhieXRlY29kZUluZGV4LCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIDEpKTsK
ICAgICBCYXNpY0Jsb2NrKiBibG9ja1B0ciA9IGJsb2NrLnB0cigpOwogICAgIC8vIG1fYmxvY2tM
aW5raW5nVGFyZ2V0cyBtdXN0IGFsd2F5cyBiZSBzb3J0ZWQgaW4gaW5jcmVhc2luZyBvcmRlciBv
ZiBieXRlY29kZUJlZ2luCiAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5n
VGFyZ2V0cy5zaXplKCkpCkBAIC0xMjYxLDcgKzEyMjIsNyBAQCBCYXNpY0Jsb2NrKiBCeXRlQ29k
ZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
ZGV4KQogCiBCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVVbnRhcmdldGFibGVC
bG9jaygpCiB7Ci0gICAgUmVmPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRSZWYoKm5ldyBCYXNp
Y0Jsb2NrKEJ5dGVjb2RlSW5kZXgoKSwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCBtX251
bVRtcHMsIDEpKTsKKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJh
c2ljQmxvY2soQnl0ZWNvZGVJbmRleCgpLCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIDEp
KTsKICAgICBCYXNpY0Jsb2NrKiBibG9ja1B0ciA9IGJsb2NrLnB0cigpOwogICAgIG1fZ3JhcGgu
YXBwZW5kQmxvY2soV1RGTW92ZShibG9jaykpOwogICAgIHJldHVybiBibG9ja1B0cjsKQEAgLTE0
NjQsNyArMTQyNSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJlY3Vyc2l2ZVRhaWxD
YWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBDYWxsVmFyaWFudCBjCiAgICAgICAgICAgICBpZiAo
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gc3RhdGljX2Nhc3Q8aW50PihjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIC8vIElmIHRoZSB0YXJnZXQgSW5saW5lQ2FsbEZyYW1lIGlzIFZhcmFyZ3Ms
IHdlIGRvIG5vdCBrbm93IGhvdyBtYW55IGFyZ3VtZW50cyBhcmUgYWN0dWFsbHkgZmlsbGVkIGJ5
IExvYWRWYXJhcmdzLiBWYXJhcmdzIElubGluZUNhbGxGcmFtZSdzCi0gICAgICAgICAgICAvLyBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyBpcyBtYXhpbXVtIG51bWJlciBvZiBwb3RlbnRpYWxs
eSBmaWxsZWQgYXJndW1lbnRzIGJ5IHhrTG9hZFZhcmFyZ3MuIFdlICJjb250aW51ZSIgdG8gdGhl
IHVwcGVyIGZyYW1lIHdoaWNoIG1heSBiZQorICAgICAgICAgICAgLy8gYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgaXMgbWF4aW11bSBudW1iZXIgb2YgcG90ZW50aWFsbHkgZmlsbGVkIGFyZ3Vt
ZW50cyBieSBMb2FkVmFyYXJncy4gV2UgImNvbnRpbnVlIiB0byB0aGUgdXBwZXIgZnJhbWUgd2hp
Y2ggbWF5IGJlCiAgICAgICAgICAgICAvLyBhIGdvb2QgdGFyZ2V0IHRvIGp1bXAgaW50by4KICAg
ICAgICAgICAgIGlmIChjYWxsRnJhbWUtPmlzVmFyYXJncygpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtMTQ5MCw3ICsxNDUxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
UmVjdXJzaXZlVGFpbENhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIENhbGxWYXJpYW50IGMKICAg
ICAgICAgLy8gV2UgbXVzdCBzZXQgdGhlIGNhbGxlZSB0byB0aGUgcmlnaHQgdmFsdWUKICAgICAg
ICAgaWYgKHN0YWNrRW50cnktPm1faW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICBpZiAo
c3RhY2tFbnRyeS0+bV9pbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAg
ICAgICAgc2V0RGlyZWN0KHJlbWFwT3BlcmFuZChzdGFja0VudHJ5LT5tX2lubGluZUNhbGxGcmFt
ZSwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSwgY2FsbFRhcmdldE5vZGUsIE5vcm1hbFNldCk7Cisg
ICAgICAgICAgICAgICAgc2V0RGlyZWN0KHN0YWNrRW50cnktPnJlbWFwT3BlcmFuZChWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSksIGNhbGxUYXJnZXROb2RlLCBOb3JtYWxT
ZXQpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGFkZFRvR3JhcGgoU2V0Q2FsbGVlLCBj
YWxsVGFyZ2V0Tm9kZSk7CiAKQEAgLTE2NTUsMTggKzE2MTYsMTYgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgVmlydHVhbFJlZ2lzdGVyIHJl
c3VsdCwgQ2EKICAgICBBU1NFUlQoIShudW1iZXJPZlN0YWNrUGFkZGluZ1Nsb3RzICUgc3RhY2tB
bGlnbm1lbnRSZWdpc3RlcnMoKSkpOwogICAgIGludCByZWdpc3Rlck9mZnNldEFmdGVyRml4dXAg
PSByZWdpc3Rlck9mZnNldCAtIG51bWJlck9mU3RhY2tQYWRkaW5nU2xvdHM7CiAgICAgCi0gICAg
T3BlcmFuZCBpbmxpbmVDYWxsRnJhbWVTdGFydCA9IFZpcnR1YWxSZWdpc3RlcihtX2lubGluZVN0
YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJG
aXh1cCkpLnZhbHVlKCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7CisgICAg
aW50IGlubGluZUNhbGxGcmFtZVN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5k
KFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldEFmdGVyRml4dXApKS5vZmZzZXQoKSArIENh
bGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOwogICAgIAogICAgIGVuc3VyZUxvY2FscygK
LSAgICAgICAgaW5saW5lQ2FsbEZyYW1lU3RhcnQudG9Mb2NhbCgpICsgMSArCisgICAgICAgIFZp
cnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWVTdGFydCkudG9Mb2NhbCgpICsgMSArCiAgICAg
ICAgIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgY29kZUJsb2NrLT5udW1DYWxs
ZWVMb2NhbHMoKSk7CiAgICAgCi0gICAgZW5zdXJlVG1wcygobV9pbmxpbmVTdGFja1RvcC0+bV9p
bmxpbmVDYWxsRnJhbWUgPyBtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZS0+dG1w
T2Zmc2V0IDogMCkgKyBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+bnVtVG1wcygpICsg
Y29kZUJsb2NrLT5udW1UbXBzKCkpOwotCiAgICAgc2l6ZV90IGFyZ3VtZW50UG9zaXRpb25TdGFy
dCA9IG1fZ3JhcGgubV9hcmd1bWVudFBvc2l0aW9ucy5zaXplKCk7CiAKICAgICBpZiAocmVzdWx0
LmlzVmFsaWQoKSkKLSAgICAgICAgcmVzdWx0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVy
YW5kKHJlc3VsdCkudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIHJlc3VsdCA9IG1faW5saW5l
U3RhY2tUb3AtPnJlbWFwT3BlcmFuZChyZXN1bHQpOwogCiAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiBjYWxsZWVWYXJpYWJsZSA9IG51bGxwdHI7CiAgICAgaWYgKGNhbGxlZS5pc0Nsb3N1cmVDYWxs
KCkpIHsKQEAgLTE2NzksNyArMTYzOCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNh
bGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlciByZXN1bHQsIENhCiAKICAg
ICBJbmxpbmVTdGFja0VudHJ5KiBjYWxsZXJTdGFja1RvcCA9IG1faW5saW5lU3RhY2tUb3A7CiAg
ICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KHRoaXMsIGNvZGVCbG9jaywgY29k
ZUJsb2NrLCBjYWxsZWUuZnVuY3Rpb24oKSwgcmVzdWx0LAotICAgICAgICBpbmxpbmVDYWxsRnJh
bWVTdGFydC52aXJ0dWFsUmVnaXN0ZXIoKSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGtp
bmQsIGNvbnRpbnVhdGlvbkJsb2NrKTsKKyAgICAgICAgKFZpcnR1YWxSZWdpc3RlcilpbmxpbmVD
YWxsRnJhbWVTdGFydCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGtpbmQsIGNvbnRpbnVh
dGlvbkJsb2NrKTsKIAogICAgIC8vIFRoaXMgaXMgd2hlcmUgdGhlIGFjdHVhbCBpbmxpbmluZyBy
ZWFsbHkgaGFwcGVucy4KICAgICBCeXRlY29kZUluZGV4IG9sZEluZGV4ID0gbV9jdXJyZW50SW5k
ZXg7CkBAIC0xNzE0LDkgKzE2NzMsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxs
KE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQogICAgICAg
ICAvLyBIb3dldmVyLCB3aGVuIHdlIGJlZ2luIGV4ZWN1dGluZyB0aGUgY2FsbGVlLCB3ZSBuZWVk
IE9TUiBleGl0IHRvIGJlIGF3YXJlIG9mIHdoZXJlIGl0IGNhbiByZWNvdmVyIHRoZSBhcmd1bWVu
dHMgdG8gdGhlIHNldHRlciwgbG9jOSBhbmQgbG9jMTAuIFRoZSBNb3ZIaW50cyBpbiB0aGUgaW5s
aW5lZAogICAgICAgICAvLyBjYWxsZWUgbWFrZSBpdCBzbyB0aGF0IGlmIHdlIGV4aXQgYXQgPEhF
UkU+LCB3ZSBjYW4gcmVjb3ZlciBsb2M5IGFuZCBsb2MxMC4KICAgICAgICAgZm9yIChpbnQgaW5k
ZXggPSAwOyBpbmRleCA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2luZGV4KSB7Ci0g
ICAgICAgICAgICBPcGVyYW5kIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFja1RvcC0+cmVtYXBP
cGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LCByZWdpc3Rlck9mZnNldCkp
OworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50VG9HZXQgPSBjYWxsZXJTdGFj
a1RvcC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4LCByZWdp
c3Rlck9mZnNldCkpOwogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXREaXJlY3QoYXJndW1l
bnRUb0dldCk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhhcmd1bWVu
dFRvR2V0KSwgdmFsdWUpOworICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8o
YXJndW1lbnRUb0dldC5vZmZzZXQoKSksIHZhbHVlKTsKICAgICAgICAgICAgIG1fc2V0TG9jYWxR
dWV1ZS5hcHBlbmQoRGVsYXllZFNldExvY2FsIHsgY3VycmVudENvZGVPcmlnaW4oKSwgYXJndW1l
bnRUb0dldCwgdmFsdWUsIEltbWVkaWF0ZU5ha2VkU2V0IH0pOwogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwpAQCAtMTc2MCwxNiArMTcxOSwxNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxp
bmVDYWxsKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0LCBDYQog
ICAgICAgICAvLyBJbiBzdWNoIGNhc2VzLCB3ZSBkbyBub3QgbmVlZCB0byBtb3ZlIGZyYW1lcy4K
ICAgICAgICAgaWYgKHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1cCAhPSByZWdpc3Rlck9mZnNldCkg
ewogICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgT3BlcmFuZCBhcmd1bWVu
dFRvR2V0ID0gY2FsbGVyU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudChpbmRleCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYXJndW1lbnRUb0dldCA9IGNhbGxlclN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaW5kZXgsIHJlZ2lzdGVyT2Zmc2V0KSk7CiAgICAgICAg
ICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXREaXJlY3QoYXJndW1lbnRUb0dldCk7Ci0gICAgICAg
ICAgICAgICAgT3BlcmFuZCBhcmd1bWVudFRvU2V0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBP
cGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGluZGV4KSk7Ci0gICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb1NldCksIHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRUb1NldCA9IG1faW5saW5lU3Rh
Y2tUb3AtPnJlbWFwT3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmRleCkpOwor
ICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKGFyZ3VtZW50VG9TZXQu
b2Zmc2V0KCkpLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlLmFwcGVu
ZChEZWxheWVkU2V0TG9jYWwgeyBjdXJyZW50Q29kZU9yaWdpbigpLCBhcmd1bWVudFRvU2V0LCB2
YWx1ZSwgSW1tZWRpYXRlTmFrZWRTZXQgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFyaXR5Rml4dXBDb3VudDsgKytpbmRl
eCkgewotICAgICAgICAgICAgT3BlcmFuZCBhcmd1bWVudFRvU2V0ID0gbV9pbmxpbmVTdGFja1Rv
cC0+cmVtYXBPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzICsgaW5kZXgpKTsKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwg
T3BJbmZvKGFyZ3VtZW50VG9TZXQpLCB1bmRlZmluZWQpOworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50VG9TZXQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBpbmRl
eCkpOworICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8oYXJndW1lbnRUb1Nl
dC5vZmZzZXQoKSksIHVuZGVmaW5lZCk7CiAgICAgICAgICAgICBtX3NldExvY2FsUXVldWUuYXBw
ZW5kKERlbGF5ZWRTZXRMb2NhbCB7IGN1cnJlbnRDb2RlT3JpZ2luKCksIGFyZ3VtZW50VG9TZXQs
IHVuZGVmaW5lZCwgSW1tZWRpYXRlTmFrZWRTZXQgfSk7CiAgICAgICAgIH0KIApAQCAtMTkzNiwx
MiArMTg5NSwxMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmco
Tm9kZSogY2FsbFRhcmdldE5vZGUsIFZpcnR1YWxSZWdpc3RlcgogICAgICAgICBlbWl0RnVuY3Rp
b25DaGVja3MoY2FsbFZhcmlhbnQsIGNhbGxUYXJnZXROb2RlLCB0aGlzQXJndW1lbnQpOwogICAg
ICAgICAKICAgICAgICAgaW50IHJlbWFwcGVkUmVnaXN0ZXJPZmZzZXQgPQotICAgICAgICBtX2lu
bGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0
KSkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CisgICAgICAgIG1faW5saW5lU3RhY2tUb3At
PnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS5vZmZzZXQoKTsK
ICAgICAgICAgCiAgICAgICAgIGVuc3VyZUxvY2FscyhWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRS
ZWdpc3Rlck9mZnNldCkudG9Mb2NhbCgpKTsKICAgICAgICAgCiAgICAgICAgIGludCBhcmd1bWVu
dFN0YXJ0ID0gcmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVy
czsKLSAgICAgICAgaW50IHJlbWFwcGVkQXJndW1lbnRTdGFydCA9IG1faW5saW5lU3RhY2tUb3At
PnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRTdGFydCkpLnZpcnR1YWxSZWdp
c3RlcigpLm9mZnNldCgpOworICAgICAgICBpbnQgcmVtYXBwZWRBcmd1bWVudFN0YXJ0ID0gbV9p
bmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0
KSkub2Zmc2V0KCk7CiAgICAgICAgIAogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBt
X2dyYXBoLm1fbG9hZFZhcmFyZ3NEYXRhLmFkZCgpOwogICAgICAgICBkYXRhLT5zdGFydCA9IFZp
cnR1YWxSZWdpc3RlcihyZW1hcHBlZEFyZ3VtZW50U3RhcnQgKyAxKTsKQEAgLTE5NDksMjQgKzE5
MDgsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lubGluaW5nKE5vZGUq
IGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIKICAgICAgICAgZGF0YS0+b2Zmc2V0ID0g
YXJndW1lbnRzT2Zmc2V0OwogICAgICAgICBkYXRhLT5saW1pdCA9IG1heEFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzOwogICAgICAgICBkYXRhLT5tYW5kYXRvcnlNaW5pbXVtID0gbWFuZGF0b3J5
TWluaW11bTsKLQotICAgICAgICBpZiAoY2FsbE9wID09IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3Mp
IHsKLSAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50Q291bnQ7Ci0gICAgICAgICAgICBpZiAoIWlu
bGluZUNhbGxGcmFtZSgpKQotICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnQgPSBhZGRUb0dy
YXBoKEdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKLSAgICAgICAgICAgIGVsc2UgaWYg
KGlubGluZUNhbGxGcmFtZSgpLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgICAgICBhcmd1bWVu
dENvdW50ID0gZ2V0RGlyZWN0KHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUoKSwgQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKLSAgICAgICAgICAgIGVsc2Ug
Ci0gICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudCA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwg
T3BJbmZvKG1fZ3JhcGguZnJlZXplKGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZSgpLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcykpKSk7Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEZvcndhcmRW
YXJhcmdzLCBPcEluZm8oZGF0YSksIGFyZ3VtZW50Q291bnQpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgTm9kZSogYXJndW1lbnRzID0gZ2V0KGFyZ3VtZW50c0FyZ3VtZW50KTsKLSAg
ICAgICAgICAgIGF1dG8gYXJnQ291bnRUbXAgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJh
bmQoT3BlcmFuZDo6dG1wKE9wQ2FsbFZhcmFyZ3M6OmFyZ0NvdW50SW5jbHVkaW5nVGhpcykpOwot
ICAgICAgICAgICAgc2V0RGlyZWN0KGFyZ0NvdW50VG1wLCBhZGRUb0dyYXBoKFZhcmFyZ3NMZW5n
dGgsIE9wSW5mbyhkYXRhKSwgYXJndW1lbnRzKSk7Ci0gICAgICAgICAgICBwcm9ncmVzc1RvTmV4
dENoZWNrcG9pbnQoKTsKLQotICAgICAgICAgICAgYWRkVG9HcmFwaChMb2FkVmFyYXJncywgT3BJ
bmZvKGRhdGEpLCBnZXRMb2NhbE9yVG1wKGFyZ0NvdW50VG1wKSwgYXJndW1lbnRzKTsKLSAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGNhbGxPcCA9PSBUYWlsQ2FsbEZvcndhcmRWYXJh
cmdzKQorICAgICAgICAgICAgYWRkVG9HcmFwaChGb3J3YXJkVmFyYXJncywgT3BJbmZvKGRhdGEp
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkVG9HcmFwaChMb2FkVmFyYXJncywgT3BJ
bmZvKGRhdGEpLCBnZXQoYXJndW1lbnRzQXJndW1lbnQpKTsKICAgICAgICAgCiAgICAgICAgIC8v
IExvYWRWYXJhcmdzIG1heSBPU1IgZXhpdC4gSGVuY2UsIHdlIG5lZWQgdG8ga2VlcCBhbGl2ZSBj
YWxsVGFyZ2V0Tm9kZSwgdGhpc0FyZ3VtZW50CiAgICAgICAgIC8vIGFuZCBhcmd1bWVudHNBcmd1
bWVudCBmb3IgdGhlIGJhc2VsaW5lIEpJVC4gSG93ZXZlciwgd2Ugb25seSBuZWVkIGEgUGhhbnRv
bSBmb3IKQEAgLTE5NzgsMTQgKzE5MjQsMTQgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
VmFyYXJnc0lubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBWaXJ0dWFsUmVnaXN0ZXIKICAg
ICAgICAgLy8gU1NBLiBGb3J0dW5hdGVseSwgd2UgYWxzbyBoYXZlIG90aGVyIHJlYXNvbnMgZm9y
IG5vdCBpbnNlcnRpbmcgY29udHJvbCBmbG93CiAgICAgICAgIC8vIGJlZm9yZSBTU0EuCiAgICAg
ICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGNvdW50VmFyaWFibGUgPSBuZXdWYXJp
YWJsZUFjY2Vzc0RhdGEoZGF0YS0+Y291bnQpOworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IGNvdW50VmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyKHJl
bWFwcGVkUmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcykpOwogICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSBsYW1lLCBidXQgaXQgd2lsbCBm
b3JjZSB0aGUgY291bnQgdG8gYmUgZmx1c2hlZCBhcyBhbiBpbnQuIFRoaXMgZG9lc24ndAogICAg
ICAgICAvLyBtYXR0ZXIgdmVyeSBtdWNoLCBzaW5jZSBvdXIgdXNlIG9mIGEgU2V0QXJndW1lbnRE
ZWZpbml0ZWx5IGFuZCBGbHVzaGVzIGZvciB0aGlzIGxvY2FsIHNsb3QgaXMKICAgICAgICAgLy8g
bW9zdGx5IGp1c3QgYSBmb3JtYWxpdHkuCiAgICAgICAgIGNvdW50VmFyaWFibGUtPnByZWRpY3Qo
U3BlY0ludDMyT25seSk7CiAgICAgICAgIGNvdW50VmFyaWFibGUtPm1lcmdlSXNQcm9maXRhYmxl
VG9VbmJveCh0cnVlKTsKICAgICAgICAgTm9kZSogc2V0QXJndW1lbnRDb3VudCA9IGFkZFRvR3Jh
cGgoU2V0QXJndW1lbnREZWZpbml0ZWx5LCBPcEluZm8oY291bnRWYXJpYWJsZSkpOwotICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldE9wZXJhbmQoY291bnRWYXJpYWJs
ZS0+b3BlcmFuZCgpLCBzZXRBcmd1bWVudENvdW50KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5zZXRPcGVyYW5kKGNvdW50VmFyaWFibGUtPmxvY2FsKCksIHNldEFy
Z3VtZW50Q291bnQpOwogICAgICAgICAKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihhcmd1
bWVudFN0YXJ0KSwgZ2V0KHRoaXNBcmd1bWVudCksIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAg
ICAgdW5zaWduZWQgbnVtU2V0QXJndW1lbnRzID0gMDsKQEAgLTIwMDksNyArMTk1NSw3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0
Tm9kZSwgVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIE5vZGUqIHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChudW1TZXRBcmd1bWVudHMgPj0g
bWFuZGF0b3J5TWluaW11bSA/IFNldEFyZ3VtZW50TWF5YmUgOiBTZXRBcmd1bWVudERlZmluaXRl
bHksIE9wSW5mbyh2YXJpYWJsZSkpOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5zZXRPcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCksIHNldEFyZ3VtZW50KTsK
KyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSwgc2V0QXJndW1lbnQpOwogICAgICAgICAgICAgKytudW1TZXRBcmd1
bWVudHM7CiAgICAgICAgIH0KICAgICB9OwpAQCAtMjEwOSw3ICsyMDU1LDcgQEAgQnl0ZUNvZGVQ
YXJzZXI6OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGlu
aW5nKAogICAgIC8vIHlldC4KICAgICBWRVJCT1NFX0xPRygiUmVnaXN0ZXIgb2Zmc2V0OiAiLCBy
ZWdpc3Rlck9mZnNldCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZVJlZyhyZWdpc3Rlck9m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7Ci0gICAgY2FsbGVlUmVnID0gbV9pbmxpbmVT
dGFja1RvcC0+cmVtYXBPcGVyYW5kKGNhbGxlZVJlZykudmlydHVhbFJlZ2lzdGVyKCk7CisgICAg
Y2FsbGVlUmVnID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKGNhbGxlZVJlZyk7CiAg
ICAgVkVSQk9TRV9MT0coIkNhbGxlZSBpcyBnb2luZyB0byBiZSAiLCBjYWxsZWVSZWcsICJcbiIp
OwogICAgIHNldERpcmVjdChjYWxsZWVSZWcsIGNhbGxUYXJnZXROb2RlLCBJbW1lZGlhdGVTZXRX
aXRoRmx1c2gpOwogCkBAIC01MjEyLDcgKzUxNTgsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICBjYXNlIG9wX25ld19yZWdleHA6IHsK
ICAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3
UmVnZXhwPigpOwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVjb2RlLm1fcmVnZXhwLmlzQ29uc3Rh
bnQoKSk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUmVnRXhwID0gbV9ncmFwaC5m
cmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdldENvbnN0YW50KGJ5
dGVjb2RlLm1fcmVnZXhwKSk7CisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuUmVnRXhw
ID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KGJ5dGVjb2RlLm1fcmVnZXhwLm9mZnNldCgpKSk7CiAgICAgICAgICAgICBzZXQo
Ynl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTmV3UmVnZXhwLCBPcEluZm8oZnJvemVuUmVnRXhw
KSwganNDb25zdGFudChqc051bWJlcigwKSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X25ld19yZWdleHApOwogICAgICAgICB9CkBAIC02MjkzLDcgKzYyMzksNyBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogCiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghbV9jdXJyZW50QmxvY2stPnNpemUoKSB8fCAobV9ncmFwaC5jb21waWxhdGlv
bigpICYmIG1fY3VycmVudEJsb2NrLT5zaXplKCkgPT0gMSAmJiBtX2N1cnJlbnRCbG9jay0+YXQo
MCktPm9wKCkgPT0gQ291bnRFeGVjdXRpb24pKTsKIAotICAgICAgICAgICAgVmFsdWVQcm9maWxl
QW5kVmlydHVhbFJlZ2lzdGVyQnVmZmVyKiBidWZmZXIgPSBieXRlY29kZS5tZXRhZGF0YShjb2Rl
QmxvY2spLm1fYnVmZmVyOworICAgICAgICAgICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZl
ciogYnVmZmVyID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2J1ZmZlcjsKIAogICAg
ICAgICAgICAgaWYgKCFidWZmZXIpIHsKICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9j
YXRjaCk7IC8vIFRoaXMgY2F0Y2ggaGFzIHlldCB0byBleGVjdXRlLiBOb3RlOiB0aGlzIGxvYWQg
Y2FuIGJlIHJhY3kgd2l0aCB0aGUgbWFpbiB0aHJlYWQuCkBAIC02MzEwLDcgKzYyNTYsNyBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwogCi0gICAgICAgICAgICAgICAgYnVm
ZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxl
KSB7CisgICAgICAgICAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5k
T3BlcmFuZCYgcHJvZmlsZSkgewogICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZChwcm9maWxlLm1fb3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24gPSBwcm9maWxlLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2Nr
ZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkpCkBAIC02MzM4
LDE0ICs2Mjg0LDE0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQg
bGltaXQpCiAgICAgICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOyAKIAogICAgICAgICAgICAgdW5z
aWduZWQgbnVtYmVyT2ZMb2NhbHMgPSAwOwotICAgICAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsm
XSAoVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgICAgICAg
ICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7
CiAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQocHJvZmlsZS5tX29wZXJh
bmQpOwogICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kLmlzTG9j
YWwoKSk7CiAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBhZGRUb0dyYXBoKEV4dHJhY3RD
YXRjaExvY2FsLCBPcEluZm8obnVtYmVyT2ZMb2NhbHMpLCBPcEluZm8obG9jYWxQcmVkaWN0aW9u
c1tudW1iZXJPZkxvY2Fsc10pKTsKICAgICAgICAgICAgICAgICArK251bWJlck9mTG9jYWxzOwot
ICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9wZXJhbmQpLCB2YWx1
ZSk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ocHJvZmlsZS5t
X29wZXJhbmQpLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgbG9jYWxzVG9TZXQudW5jaGVja2Vk
QXBwZW5kKHN0ZDo6bWFrZV9wYWlyKG9wZXJhbmQsIHZhbHVlKSk7CiAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIGlmIChudW1iZXJPZkxvY2FscykKQEAgLTY0NzMsNyArNjQxOSw3IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBvcF9qbmVxX3B0cjogewogICAgICAgICAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOwotICAgICAgICAgICAgRnJv
emVuVmFsdWUqIGZyb3plblBvaW50ZXIgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0
YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRl
cikpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblBvaW50ZXIgPSBtX2dyYXBoLmZy
ZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0
ZWNvZGUubV9zcGVjaWFsUG9pbnRlci5vZmZzZXQoKSkpOwogICAgICAgICAgICAgdW5zaWduZWQg
cmVsYXRpdmVPZmZzZXQgPSBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogICAg
ICAgICAgICAgTm9kZSogY2hpbGQgPSBnZXQoYnl0ZWNvZGUubV92YWx1ZSk7CiAgICAgICAgICAg
ICBpZiAoYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKS5tX2hhc0p1bXBlZCkgewpAQCAtNjk0
MSw4ICs2ODg3LDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBs
aW1pdCkKICAgICAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDogewogICAg
ICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCk7CiAgICAgICAgICAgICBBU1NFUlQoYnl0ZWNvZGUubV9zeW1i
b2xUYWJsZS5pc0NvbnN0YW50KCkgJiYgYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUuaXNDb25zdGFu
dCgpKTsKLSAgICAgICAgICAgIEZyb3plblZhbHVlKiBzeW1ib2xUYWJsZSA9IG1fZ3JhcGguZnJl
ZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChieXRl
Y29kZS5tX3N5bWJvbFRhYmxlKSk7Ci0gICAgICAgICAgICBGcm96ZW5WYWx1ZSogaW5pdGlhbFZh
bHVlID0gbV9ncmFwaC5mcmVlemVTdHJvbmcobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2st
PmdldENvbnN0YW50KGJ5dGVjb2RlLm1faW5pdGlhbFZhbHVlKSk7CisgICAgICAgICAgICBGcm96
ZW5WYWx1ZSogc3ltYm9sVGFibGUgPSBtX2dyYXBoLmZyZWV6ZVN0cm9uZyhtX2lubGluZVN0YWNr
VG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoYnl0ZWNvZGUubV9zeW1ib2xUYWJsZS5vZmZz
ZXQoKSkpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIGluaXRpYWxWYWx1ZSA9IG1fZ3JhcGgu
ZnJlZXplU3Ryb25nKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChi
eXRlY29kZS5tX2luaXRpYWxWYWx1ZS5vZmZzZXQoKSkpOwogICAgICAgICAgICAgTm9kZSogc2Nv
cGUgPSBnZXQoYnl0ZWNvZGUubV9zY29wZSk7CiAgICAgICAgICAgICBOb2RlKiBsZXhpY2FsRW52
aXJvbm1lbnQgPSBhZGRUb0dyYXBoKENyZWF0ZUFjdGl2YXRpb24sIE9wSW5mbyhzeW1ib2xUYWJs
ZSksIE9wSW5mbyhpbml0aWFsVmFsdWUpLCBzY29wZSk7CiAgICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9kc3QsIGxleGljYWxFbnZpcm9ubWVudCk7CkBAIC02OTcyLDcgKzY5MTgsNyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAg
Ly8gbG9hZHMgZnJvbSB0aGUgc2NvcGUgcmVnaXN0ZXIgbGF0ZXIsIGFzIHRoYXQgd291bGQgcHJl
dmVudCB0aGUgREZHIGZyb20gdHJhY2tpbmcgdGhlCiAgICAgICAgICAgICAvLyBieXRlY29kZS1s
ZXZlbCBsaXZlbmVzcyBvZiB0aGUgc2NvcGUgcmVnaXN0ZXIuCiAgICAgICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwotICAgICAgICAg
ICAgTm9kZSogY2FsbGVlID0gZ2V0KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSk7CisgICAgICAgICAg
ICBOb2RlKiBjYWxsZWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxl
ZSkpOwogICAgICAgICAgICAgTm9kZSogcmVzdWx0OwogICAgICAgICAgICAgaWYgKEpTRnVuY3Rp
b24qIGZ1bmN0aW9uID0gY2FsbGVlLT5keW5hbWljQ2FzdENvbnN0YW50PEpTRnVuY3Rpb24qPigq
bV92bSkpCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gd2Vha0pTQ29uc3RhbnQoZnVuY3Rpb24t
PnNjb3BlKCkpOwpAQCAtNzM5NywxMCArNzM0Myw4IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVT
dGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KAogICAgICAgICAvLyBUaGUgb3duZXIgaXMgdGhl
IG1hY2hpbmUgY29kZSBibG9jaywgYW5kIHdlIGFscmVhZHkgaGF2ZSBhIGJhcnJpZXIgb24gdGhh
dCB3aGVuIHRoZQogICAgICAgICAvLyBwbGFuIGZpbmlzaGVzLgogICAgICAgICBtX2lubGluZUNh
bGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suc2V0V2l0aG91dFdyaXRlQmFycmllcihjb2RlQmxv
Y2stPmJhc2VsaW5lVmVyc2lvbigpKTsKLSAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPnNldFRt
cE9mZnNldCgobV9jYWxsZXItPm1faW5saW5lQ2FsbEZyYW1lID8gbV9jYWxsZXItPm1faW5saW5l
Q2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwKSArIG1fY2FsbGVyLT5tX2NvZGVCbG9jay0+bnVtVG1w
cygpKTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPnNldFN0YWNrT2Zmc2V0KGlubGluZUNh
bGxGcmFtZVN0YXJ0Lm9mZnNldCgpIC0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMp
OwogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
PSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9p
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKTsKICAgICAgICAgaWYgKGNhbGxlZSkgewogICAgICAgICAgICAgbV9p
bmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5ID0gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQo
Y2FsbGVlKTsKICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsID0g
ZmFsc2U7CkBAIC03NzYyLDcgKzc3MDYsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgp
CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsK
IAogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKG1f
Z3JhcGgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG5vZGUtPm9w
ZXJhbmQoKSkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1hcHBpbmcub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IEZvcmNl
T1NSRXhpdCkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNzc4MiwyNCAr
NzcyNiwyNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnMuaXNFbXB0
eSgpKTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGF1dG8g
aW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lLCBOb2RlVHlwZSBvcCwgT3BlcmFuZCBvcGVyYW5kKSB7CisgICAgICAgICAgICAg
ICAgICAgIGF1dG8gaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5nT3AgPSBbJl0gKElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lLCBOb2RlVHlwZSBvcCwgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGUgPSBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXZhcmlhYmxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgPSBu
ZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gdmFyaWFibGU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhbmQgYXJndW1lbnQgPSB1
bm1hcE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLCBvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudCA9IG9wZXJhbmQgLSAoaW5saW5lQ2FsbEZy
YW1lID8gaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDApOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGFyZ3VtZW50LmlzQXJndW1lbnQoKSAmJiAhYXJndW1lbnQuaXNIZWFkZXIo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxBcmd1bWVudFBv
c2l0aW9uKj4mIGFyZ3VtZW50cyA9IG1faW5saW5lQ2FsbEZyYW1lVG9Bcmd1bWVudFBvc2l0aW9u
cy5nZXQoaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1
bWVudHNbYXJndW1lbnQudG9Bcmd1bWVudCgpXS0+YWRkVmFyaWFibGUodmFyaWFibGUpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUobm9kZUluZGV4LCBTcGVjTm9uZSwgb3AsIG9yaWdpbiwgT3BJbmZvKHZh
cmlhYmxlKSk7CiAgICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgICAgIGF1
dG8gYWRkRmx1c2hEaXJlY3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
LCBPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRGbHVzaERp
cmVjdCA9IFsmXSAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRMaXZlbmVzc1By
ZXNlcnZpbmdPcChpbmxpbmVDYWxsRnJhbWUsIEZsdXNoLCBvcGVyYW5kKTsKICAgICAgICAgICAg
ICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRQaGFudG9tTG9jYWxEaXJl
Y3QgPSBbJl0gKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBPcGVyYW5kIG9wZXJh
bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBhZGRQaGFudG9tTG9jYWxEaXJlY3QgPSBb
Jl0gKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TGl2ZW5lc3NQcmVzZXJ2aW5n
T3AoaW5saW5lQ2FsbEZyYW1lLCBQaGFudG9tTG9jYWwsIG9wZXJhbmQpOwogICAgICAgICAgICAg
ICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICBmbHVzaEZvclRlcm1pbmFsSW1wbChvcmln
aW4uc2VtYW50aWMsIGFkZEZsdXNoRGlyZWN0LCBhZGRQaGFudG9tTG9jYWxEaXJlY3QpOwpAQCAt
Nzg2NCw3ICs3ODA4LDYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgICAgICBB
U1NFUlQoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpID09IG1fZ3Jh
cGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICB9
CiAKLSAgICBtX2dyYXBoLm1fdG1wcyA9IG1fbnVtVG1wczsKICAgICBtX2dyYXBoLm1fbG9jYWxW
YXJzID0gbV9udW1Mb2NhbHM7CiAgICAgbV9ncmFwaC5tX3BhcmFtZXRlclNsb3RzID0gbV9wYXJh
bWV0ZXJTbG90czsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q0ZBUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAK
aW5kZXggNGJkYjdiYWQ0ZGM5MDg5ODA0ODg4ZjM2YTBhZGEyZjIyMzg4MzY2Ny4uYTI0MDE0OTIx
MzgzNmI2MWU3NWMyYjg4NzY1MzQ3M2UyMGVkNWIxMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDRkFQaGFzZS5jcHAKQEAgLTE3MCwyMiArMTcwLDIyIEBAIHByaXZhdGU6CiAgICAg
ICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICBjb25zdCBPcGVyYW5kczxPcHRpb25h
bDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1ZXMgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxl
VmFsdWVzKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtdXN0SGFuZGxlVmFsdWVzLnNpemUo
KTsgaS0tOykgewotICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbXVzdEhhbmRsZVZhbHVl
cy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5k
bGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgT3B0aW9uYWw8SlNWYWx1
ZT4gdmFsdWUgPSBtdXN0SGFuZGxlVmFsdWVzW2ldOwogICAgICAgICAgICAgaWYgKCF2YWx1ZSkg
ewogICAgICAgICAgICAgICAgIGlmIChtX3ZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgIE5vdCBsaXZlIGluIGJ5dGVjb2RlOiAiLCBvcGVyYW5kLCAiXG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTm90IGxpdmUgaW4gYnl0ZWNvZGU6ICIsIFZpcnR1
YWxSZWdpc3RlcihvcGVyYW5kKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgaWYgKCFub2RlKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKG1fdmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
Tm90IGxpdmU6ICIsIG9wZXJhbmQsICJcbiIpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICBOb3QgbGl2ZTogIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAiXG4iKTsKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKG1fdmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBXaWRlbmlu
ZyAiLCBvcGVyYW5kLCAiIHdpdGggIiwgdmFsdWUudmFsdWUoKSwgIlxuIik7CisgICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAgV2lkZW5pbmcgIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAi
IHdpdGggIiwgdmFsdWUudmFsdWUoKSwgIlxuIik7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IEFic3RyYWN0VmFsdWUmIHRhcmdldCA9IGJsb2NrLT52YWx1ZXNBdEhlYWQub3BlcmFuZChvcGVy
YW5kKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gdGFyZ2V0Lm1lcmdlT1NSRW50cnlWYWx1ZSht
X2dyYXBoLCB2YWx1ZS52YWx1ZSgpLCBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSwgbm9kZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5n
UGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1Bo
YXNlLmNwcAppbmRleCA4NzNmYTA0MzA1OGEwZmQxOGU0ZGYxMjMzZGU2Zjk2NzZhMmJkZTAwLi5k
OThmZDRhZjQ0MGYwN2NiYzE2YjY3ZDYwMmJhNjQyNmFmMGYyMzgyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAKQEAgLTU0
LDkgKzU0LDggQEAgcHVibGljOgogICAgICAgICBtX2dyYXBoLmNsZWFyUmVwbGFjZW1lbnRzKCk7
CiAgICAgICAgIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2tzKCk7CiAgICAgICAgIHNwZWNpYWxD
YXNlQXJndW1lbnRzKCk7Ci0gICAgICAgIHByb3BhZ2F0ZVBoaXM8T3BlcmFuZEtpbmQ6OkxvY2Fs
PigpOwotICAgICAgICBwcm9wYWdhdGVQaGlzPE9wZXJhbmRLaW5kOjpBcmd1bWVudD4oKTsKLSAg
ICAgICAgcHJvcGFnYXRlUGhpczxPcGVyYW5kS2luZDo6VG1wPigpOworICAgICAgICBwcm9wYWdh
dGVQaGlzPExvY2FsT3BlcmFuZD4oKTsKKyAgICAgICAgcHJvcGFnYXRlUGhpczxBcmd1bWVudE9w
ZXJhbmQ+KCk7CiAgICAgICAgIGNvbXB1dGVJc0ZsdXNoZWQoKTsKICAgICAgICAgCiAgICAgICAg
IG1fZ3JhcGgubV9mb3JtID0gVGhyZWFkZWRDUFM7CkBAIC0yMTIsMjAgKzIxMSwxMCBAQCBwcml2
YXRlOgogICAgIHZvaWQgY2Fub25pY2FsaXplR2V0TG9jYWwoTm9kZSogbm9kZSkKICAgICB7CiAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKLSAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+b3BlcmFuZCgpLmtpbmQoKSkgewot
ICAgICAgICBjYXNlIE9wZXJhbmRLaW5kOjpBcmd1bWVudDogewotICAgICAgICAgICAgY2Fub25p
Y2FsaXplR2V0TG9jYWxGb3I8T3BlcmFuZEtpbmQ6OkFyZ3VtZW50Pihub2RlLCB2YXJpYWJsZSwg
dmFyaWFibGUtPm9wZXJhbmQoKS50b0FyZ3VtZW50KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6TG9jYWw6IHsKLSAgICAgICAgICAg
IGNhbm9uaWNhbGl6ZUdldExvY2FsRm9yPE9wZXJhbmRLaW5kOjpMb2NhbD4obm9kZSwgdmFyaWFi
bGUsIHZhcmlhYmxlLT5vcGVyYW5kKCkudG9Mb2NhbCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgT3BlcmFuZEtpbmQ6OlRtcDogewotICAgICAgICAgICAg
Y2Fub25pY2FsaXplR2V0TG9jYWxGb3I8T3BlcmFuZEtpbmQ6OlRtcD4obm9kZSwgdmFyaWFibGUs
IHZhcmlhYmxlLT5vcGVyYW5kKCkudmFsdWUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICB9CisgICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKS5pc0FyZ3VtZW50
KCkpCisgICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxBcmd1bWVudE9wZXJhbmQ+
KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0FyZ3VtZW50KCkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBjYW5vbmljYWxpemVHZXRMb2NhbEZvcjxMb2NhbE9wZXJhbmQ+
KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+bG9jYWwoKS50b0xvY2FsKCkpOwogICAgIH0KICAg
ICAKICAgICB0ZW1wbGF0ZTxOb2RlVHlwZSBub2RlVHlwZSwgT3BlcmFuZEtpbmQgb3BlcmFuZEtp
bmQ+CkBAIC0yNDAsNyArMjI5LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgRmx1c2g6
CiAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAgICAgICAgICAgIGNhc2UgR2V0TG9j
YWw6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG90aGVyTm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsK
ICAgICAgICAgICAgICAgICBvdGhlck5vZGUgPSBvdGhlck5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yODIsMjUg
KzI3MCwxNSBAQCBwcml2YXRlOgogICAgIHZvaWQgY2Fub25pY2FsaXplRmx1c2hPclBoYW50b21M
b2NhbChOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBzd2l0Y2ggKHZhcmlh
YmxlLT5vcGVyYW5kKCkua2luZCgpKSB7Ci0gICAgICAgIGNhc2UgT3BlcmFuZEtpbmQ6OkFyZ3Vt
ZW50OiB7Ci0gICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5v
ZGVUeXBlLCBPcGVyYW5kS2luZDo6QXJndW1lbnQ+KG5vZGUsIHZhcmlhYmxlLCB2YXJpYWJsZS0+
b3BlcmFuZCgpLnRvQXJndW1lbnQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIE9wZXJhbmRLaW5kOjpMb2NhbDogewotICAgICAgICAgICAgY2Fub25pY2Fs
aXplRmx1c2hPclBoYW50b21Mb2NhbEZvcjxub2RlVHlwZSwgT3BlcmFuZEtpbmQ6OkxvY2FsPihu
b2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS50b0xvY2FsKCkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6VG1wOiB7Ci0g
ICAgICAgICAgICBjYW5vbmljYWxpemVGbHVzaE9yUGhhbnRvbUxvY2FsRm9yPG5vZGVUeXBlLCBP
cGVyYW5kS2luZDo6VG1wPihub2RlLCB2YXJpYWJsZSwgdmFyaWFibGUtPm9wZXJhbmQoKS52YWx1
ZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKHZhcmlhYmxlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgIGNhbm9uaWNh
bGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5cGUsIEFyZ3VtZW50T3BlcmFuZD4obm9k
ZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvQXJndW1lbnQoKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGNhbm9uaWNhbGl6ZUZsdXNoT3JQaGFudG9tTG9jYWxGb3I8bm9kZVR5
cGUsIExvY2FsT3BlcmFuZD4obm9kZSwgdmFyaWFibGUsIHZhcmlhYmxlLT5sb2NhbCgpLnRvTG9j
YWwoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY2Fub25pY2FsaXplU2V0KE5vZGUqIG5vZGUp
CiAgICAgewotICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0T3BlcmFuZChub2Rl
LT5vcGVyYW5kKCksIG5vZGUpOworICAgICAgICBtX2Jsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0
T3BlcmFuZChub2RlLT5sb2NhbCgpLCBub2RlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjYW5v
bmljYWxpemVMb2NhbHNJbkJsb2NrKCkKQEAgLTMwOSw5ICsyODcsOCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICBBU1NFUlQobV9ibG9jay0+aXNSZWFjaGFibGUpOwog
ICAgICAgICAKLSAgICAgICAgY2xlYXJWYXJpYWJsZXM8T3BlcmFuZEtpbmQ6OkFyZ3VtZW50Pigp
OwotICAgICAgICBjbGVhclZhcmlhYmxlczxPcGVyYW5kS2luZDo6TG9jYWw+KCk7Ci0gICAgICAg
IGNsZWFyVmFyaWFibGVzPE9wZXJhbmRLaW5kOjpUbXA+KCk7CisgICAgICAgIGNsZWFyVmFyaWFi
bGVzPEFyZ3VtZW50T3BlcmFuZD4oKTsKKyAgICAgICAgY2xlYXJWYXJpYWJsZXM8TG9jYWxPcGVy
YW5kPigpOwogICAgICAgICAKICAgICAgICAgLy8gQXNzdW1lcyB0aGF0IGFsbCBwaGkgcmVmZXJl
bmNlcyBoYXZlIGJlZW4gcmVtb3ZlZC4gQXNzdW1lcyB0aGF0IHRoaW5ncyB0aGF0CiAgICAgICAg
IC8vIHNob3VsZCBiZSBsaXZlIGhhdmUgYSBub24temVybyByZWYgY291bnQsIGJ1dCBkb2Vzbid0
IGFzc3VtZSB0aGF0IHRoZSByZWYKQEAgLTQxMSw3ICszODgsNyBAQCBwcml2YXRlOgogICAgIHRl
bXBsYXRlPE9wZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIHZvaWQgcHJvcGFnYXRlUGhpcygp
CiAgICAgewotICAgICAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiYgcGhpU3RhY2sgPSBw
aGlTdGFja0ZvcjxvcGVyYW5kS2luZD4oKTsKKyAgICAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnks
IDEyOD4mIHBoaVN0YWNrID0gb3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kID8gbV9hcmd1
bWVudFBoaVN0YWNrIDogbV9sb2NhbFBoaVN0YWNrOwogICAgICAgICAKICAgICAgICAgLy8gRW5z
dXJlIHRoYXQgYXR0ZW1wdHMgdG8gdXNlIHRoaXMgZmFpbCBpbnN0YW50bHkuCiAgICAgICAgIG1f
YmxvY2sgPSAwOwpAQCAtNDg5LDEyICs0NjYsOSBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPE9w
ZXJhbmRLaW5kIG9wZXJhbmRLaW5kPgogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxMjg+JiBw
aGlTdGFja0ZvcigpCiAgICAgewotICAgICAgICBzd2l0Y2ggKG9wZXJhbmRLaW5kKSB7Ci0gICAg
ICAgIGNhc2UgT3BlcmFuZEtpbmQ6OkFyZ3VtZW50OiByZXR1cm4gbV9hcmd1bWVudFBoaVN0YWNr
OwotICAgICAgICBjYXNlIE9wZXJhbmRLaW5kOjpMb2NhbDogcmV0dXJuIG1fbG9jYWxQaGlTdGFj
azsKLSAgICAgICAgY2FzZSBPcGVyYW5kS2luZDo6VG1wOiByZXR1cm4gbV90bXBQaGlTdGFjazsK
LSAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICBpZiAob3BlcmFuZEtpbmQgPT0gQXJndW1lbnRPcGVyYW5kKQorICAgICAgICAgICAgcmV0dXJu
IG1fYXJndW1lbnRQaGlTdGFjazsKKyAgICAgICAgcmV0dXJuIG1fbG9jYWxQaGlTdGFjazsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBjb21wdXRlSXNGbHVzaGVkKCkKQEAgLTU0Nyw3ICs1MjEsNiBA
QCBwcml2YXRlOgogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgVmVjdG9yPFBoaVN0YWNr
RW50cnksIDEyOD4gbV9hcmd1bWVudFBoaVN0YWNrOwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5
LCAxMjg+IG1fbG9jYWxQaGlTdGFjazsKLSAgICBWZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTI4PiBt
X3RtcFBoaVN0YWNrOwogICAgIFZlY3RvcjxOb2RlKiwgMTI4PiBtX2ZsdXNoZWRMb2NhbE9wV29y
a2xpc3Q7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NT
RVBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCmlu
ZGV4IDRjY2UxNzQ4ODNlMjA0MTBkNjIyM2E2ZjQxNzJlZGRlNjk4YWFlYmYuLjIzODFjNmI4Zjhm
NGJhNzYzNGJiNjZiMTIzOTQ3MWI1YTYxNjY3Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuY3BwCkBAIC0xNDcsNyArMTQ3LDggQEAgcHVibGljOgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3RhY2s6IHsKICAgICAgICAgICAgIEFTU0VSVCghaGVh
cC5wYXlsb2FkKCkuaXNUb3AoKSk7Ci0gICAgICAgICAgICBtX2Fic3RyYWN0SGVhcFN0YWNrTWFw
LnJlbW92ZShoZWFwLnBheWxvYWQoKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChoZWFw
LnBheWxvYWQoKS52YWx1ZSgpID09IGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSk7CisgICAgICAg
ICAgICBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLnJlbW92ZShoZWFwLnBheWxvYWQoKS52YWx1ZTMy
KCkpOwogICAgICAgICAgICAgaWYgKGNsb2JiZXJDb25zZXJ2YXRpdmVseSkKICAgICAgICAgICAg
ICAgICBtX2ZhbGxiYWNrU3RhY2tNYXAuY2xlYXIoKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTE3
MSw3ICsxNzIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKCFjbG9iYmVyQ29uc2Vy
dmF0aXZlbHkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGlm
IChwYWlyLmtleS5oZWFwKCkua2luZCgpID09IFN0YWNrKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGF1dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQocGFpci5rZXkuaGVh
cCgpLnBheWxvYWQoKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVyYXRv
ciA9IG1fYWJzdHJhY3RIZWFwU3RhY2tNYXAuZmluZChwYWlyLmtleS5oZWFwKCkucGF5bG9hZCgp
LnZhbHVlMzIoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvciAhPSBtX2Fic3Ry
YWN0SGVhcFN0YWNrTWFwLmVuZCgpICYmIGl0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IHBhaXIua2V5
KQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIyNSw3ICsyMjYsOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgQWJzdHJhY3RIZWFwIGFic3RyYWN0SGVhcCA9IGxvY2F0aW9uLmhlYXAoKTsKICAgICAgICAg
ICAgIGlmIChhYnN0cmFjdEhlYXAucGF5bG9hZCgpLmlzVG9wKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGFkZChtX2ZhbGxiYWNrU3RhY2tNYXAsIGxvY2F0aW9uLCBub2RlKTsKLSAgICAgICAg
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5hZGQoYWJzdHJhY3RI
ZWFwLnBheWxvYWQoKS52YWx1ZSgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIEFTU0VSVChhYnN0
cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlKCkgPT0gYWJzdHJhY3RIZWFwLnBheWxvYWQoKS52YWx1
ZTMyKCkpOworICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2Fic3RyYWN0SGVhcFN0YWNr
TWFwLmFkZChhYnN0cmFjdEhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSwgbnVsbHB0cik7CiAgICAg
ICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgICAgICBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnJlc2V0KG5ldyBJbXB1cmVEYXRhU2xvdCB7bG9jYXRpb24s
IG5vZGUsIDB9KTsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI0Nyw3ICsy
NDksOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFNpZGVTdGF0ZToKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGNhc2UgU3RhY2s6IHsKLSAgICAg
ICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Fic3RyYWN0SGVhcFN0YWNrTWFwLmZpbmQobG9jYXRp
b24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChsb2NhdGlv
bi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlKCkgPT0gbG9jYXRpb24uaGVhcCgpLnBheWxvYWQoKS52
YWx1ZTMyKCkpOworICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fYWJzdHJhY3RIZWFwU3Rh
Y2tNYXAuZmluZChsb2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlMzIoKSk7CiAgICAgICAg
ICAgICBpZiAoaXRlcmF0b3IgIT0gbV9hYnN0cmFjdEhlYXBTdGFja01hcC5lbmQoKQogICAgICAg
ICAgICAgICAgICYmIGl0ZXJhdG9yLT52YWx1ZS0+a2V5ID09IGxvY2F0aW9uKQogICAgICAgICAg
ICAgICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWUtPnZhbHVlOwpAQCAtMjk1LDcgKzI5OCw3IEBA
IHByaXZhdGU6CiAgICAgLy8gYSBkdXBsaWNhdGUgaW4gdGhlIHBhc3QgYW5kIG5vdyBvbmx5IGxp
dmUgaW4gbV9mYWxsYmFja1N0YWNrTWFwLgogICAgIC8vCiAgICAgLy8gT2J2aW91c2x5LCBUT1Ag
YWx3YXlzIGdvZXMgaW50byBtX2ZhbGxiYWNrU3RhY2tNYXAgc2luY2UgaXQgZG9lcyBub3QgaGF2
ZSBhIHVuaXF1ZSB2YWx1ZS4KLSAgICBIYXNoTWFwPGludDY0X3QsIHN0ZDo6dW5pcXVlX3B0cjxJ
bXB1cmVEYXRhU2xvdD4sIERlZmF1bHRIYXNoPGludDY0X3Q+OjpIYXNoLCBXVEY6OlNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czxpbnQ2NF90Pj4gbV9hYnN0cmFjdEhlYXBTdGFja01hcDsKKyAg
ICBIYXNoTWFwPGludDMyX3QsIHN0ZDo6dW5pcXVlX3B0cjxJbXB1cmVEYXRhU2xvdD4sIERlZmF1
bHRIYXNoPGludDMyX3Q+OjpIYXNoLCBXVEY6OlNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxp
bnQzMl90Pj4gbV9hYnN0cmFjdEhlYXBTdGFja01hcDsKICAgICBNYXAgbV9mYWxsYmFja1N0YWNr
TWFwOwogCiAgICAgTWFwIG1faGVhcE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FwYWJpbGl0aWVzLmNwcAppbmRleCBhYTIyMmI4N2MyN2NjNGFlYWRjZmFlZTJjYWFhMTM3
YWNjNDJmZWVhLi4yNDc3YWYwZTU3ZjRkZWZhZjI5YjJmODBjMDQ3NWY1M2VlMTE1ZmQzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCkBAIC0zMDcs
OCArMzA3LDYgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRCBvcGNv
ZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIGxsaW50X25hdGl2
ZV9jb25zdHJ1Y3RfdHJhbXBvbGluZToKICAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9u
X2NhbGxfdHJhbXBvbGluZToKICAgICBjYXNlIGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0
cnVjdF90cmFtcG9saW5lOgotICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF9mcm9tX2lubGlu
ZWRfY2FsbF90cmFtcG9saW5lOgotICAgIGNhc2UgY2hlY2twb2ludF9vc3JfZXhpdF90cmFtcG9s
aW5lOgogICAgIGNhc2UgaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CiAgICAgY2FzZSBvcF9jYWxs
X3JldHVybl9sb2NhdGlvbjoKICAgICBjYXNlIG9wX2NvbnN0cnVjdF9yZXR1cm5fbG9jYXRpb246
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCmluZGV4IDM2MmM0Nzg5
ZGE3NjczMzY1NmI2MzcxNzEyYmQ2ZTQ5OTZkODU2ZTIuLmJmYjFkMTQ2MTU1YzRjN2UyYmE5OGU5
MWIzYjliM2IyODRmYmMwMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCkBAIC0xMTEsOSArMTExLDkgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAv
LyBzY2FuIHdvdWxkIHJlYWQuIFRoYXQncyB3aGF0IHRoaXMgZG9lcy4KICAgICBmb3IgKElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZSgpOyBpbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZSA9IGlubGluZUNh
bGxGcmFtZS0+ZGlyZWN0Q2FsbGVyLmlubGluZUNhbGxGcmFtZSgpKSB7CiAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICByZWFkKEFic3RyYWN0
SGVhcChTdGFjaywgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgICAgICByZWFkKEFic3RyYWN0SGVh
cChTdGFjaywgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSkpOwogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAg
ICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKSkpOworICAgICAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcykpOwogICAgIH0KIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc3BlY2lmaWNhbGx5
IGFjY291bnQgd2hpY2ggbm9kZXMgY2FuIHJlYWQgZnJvbSB0aGUgc2NvcGUKQEAgLTQ0MSw3ICs0
NDEsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBS
ZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAKICAgICBj
YXNlIEtpbGxTdGFjazoKLSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT51
bmxpbmtlZE9wZXJhbmQoKSkpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5v
ZGUtPnVubGlua2VkTG9jYWwoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgICAgICAKICAgICBj
YXNlIE1vdkhpbnQ6CkBAIC00OTcsNyArNDk3LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBGbHVzaDoKLSAgICAgICAgcmVhZChBYnN0cmFj
dEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkpOworICAgICAgICByZWFkKEFic3RyYWN0SGVh
cChTdGFjaywgbm9kZS0+bG9jYWwoKSkpOwogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAg
ICAgICByZXR1cm47CiAKQEAgLTc2NSwxMiArNzY1LDEyIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0
ZUZ1CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAg
ICAgIHJlYWQoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0cmFj
dEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSksIExh
enlOb2RlKG5vZGUpKTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIENhbGxGcmFt
ZVNsb3Q6OmNhbGxlZSkpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0
cmFjdEhlYXAoU3RhY2ssIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpLCBMYXp5Tm9kZShub2RlKSk7
CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgU2V0Q2FsbGVlOgotICAgICAgICB3cml0ZShB
YnN0cmFjdEhlYXAoU3RhY2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUp
KSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRBcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpczogewpAQCAtNzgxLDcgKzc4MSw3IEBAIHZvaWQgY2xvYmJlcml6ZShH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBX
cml0ZUZ1CiAgICAgfQogCiAgICAgY2FzZSBTZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczoK
LSAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CisgICAgICAgIHdyaXRlKEFi
c3RyYWN0SGVhcChTdGFjaywgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOgpAQCAtNzg5
LDQyICs3ODksMzYgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwg
Y29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICByZWFkKEFic3RyYWN0SGVhcChT
dGFjaywgbm9kZS0+b3BlcmFuZCgpKSk7Ci0gICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tM
b2MsIEFic3RyYWN0SGVhcChTdGFjaywgbm9kZS0+b3BlcmFuZCgpKSksIExhenlOb2RlKG5vZGUp
KTsKKyAgICAgICAgcmVhZChBYnN0cmFjdEhlYXAoU3RhY2ssIG5vZGUtPmxvY2FsKCkpKTsKKyAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xvYywgQWJzdHJhY3RIZWFwKFN0YWNrLCBub2Rl
LT5sb2NhbCgpKSksIExhenlOb2RlKG5vZGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICBjYXNlIFNldExvY2FsOgotICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIG5v
ZGUtPm9wZXJhbmQoKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0aW9uKFN0YWNrTG9jLCBBYnN0
cmFjdEhlYXAoU3RhY2ssIG5vZGUtPm9wZXJhbmQoKSkpLCBMYXp5Tm9kZShub2RlLT5jaGlsZDEo
KS5ub2RlKCkpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBub2RlLT5sb2Nh
bCgpKSk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oU3RhY2tMb2MsIEFic3RyYWN0SGVhcChT
dGFjaywgbm9kZS0+bG9jYWwoKSkpLCBMYXp5Tm9kZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldFN0YWNrOiB7Ci0gICAgICAg
IEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFu
ZCk7CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0Rh
dGEoKS0+bG9jYWwpOwogICAgICAgICByZWFkKGhlYXApOwogICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKFN0YWNrTG9jLCBoZWFwKSwgTGF6eU5vZGUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIFB1dFN0YWNrOiB7Ci0gICAgICAgIEFic3RyYWN0SGVh
cCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCk7CisgICAgICAg
IEFic3RyYWN0SGVhcCBoZWFwKFN0YWNrLCBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwp
OwogICAgICAgICB3cml0ZShoZWFwKTsKICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihTdGFja0xv
YywgaGVhcCksIExhenlOb2RlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFZhcmFyZ3NMZW5ndGg6IHsKLSAgICAgICAg
cmVhZChXb3JsZCk7Ci0gICAgICAgIHdyaXRlKEhlYXApOwotICAgICAgICByZXR1cm47ICAKLSAg
ICB9Ci0KICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CiAgICAgICAgIHJlYWQoV29ybGQpOwogICAg
ICAgICB3cml0ZShIZWFwKTsKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+
bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0
YS0+Y291bnQpKTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5jb3Vu
dC5vZmZzZXQoKSkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0t
OykKLSAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQgKyBz
dGF0aWNfY2FzdDxpbnQ+KGkpKSk7CisgICAgICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3Rh
Y2ssIGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTgzMyw5ICs4MjcsOSBAQCB2b2lkIGNsb2Ji
ZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwg
Y29uc3QgV3JpdGVGdQogICAgICAgICByZWFkKFN0YWNrKTsKICAgICAgICAgCiAgICAgICAgIExv
YWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICB3
cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPmNvdW50KSk7CisgICAgICAgIHdyaXRlKEFi
c3RyYWN0SGVhcChTdGFjaywgZGF0YS0+Y291bnQub2Zmc2V0KCkpKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7IGktLTspCi0gICAgICAgICAgICB3cml0ZShBYnN0cmFj
dEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0ICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOworICAgICAg
ICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydC5vZmZzZXQoKSArIHN0
YXRpY19jYXN0PGludD4oaSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3Mu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcApp
bmRleCAxNTc0NmMwNTRmMGRmMzNiYTMyZDM5ZmFmZTAyZGJiZDdkMjkxNGNiLi45NTg2NmE3Zjkx
YTcxNDQyZGExYzRmN2U0NzAwZDA5Y2QyYWMzMGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgc3Rh
dGljIHZvaWQgYWRkQnl0ZWNvZGVMaXZlbmVzcyhHcmFwaCYgZ3JhcGgsIEF2YWlsYWJpbGl0eU1h
cCYgYXZhaWxhYmlsaXR5TWFwLAogewogICAgIGdyYXBoLmZvckFsbExpdmVJbkJ5dGVjb2RlKAog
ICAgICAgICBub2RlLT5vcmlnaW4uZm9yRXhpdCwKLSAgICAgICAgWyZdIChPcGVyYW5kIHJlZykg
eworICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcC5jbG9zZVN0YXJ0aW5nV2l0aExvY2FsKAogICAgICAgICAgICAgICAgIHJlZywK
ICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIG5vZGUpIC0+IGJvb2wgewpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKaW5kZXggMDcxMmNjYjNiZTk5MjhlZWE4
NjIzZTRkNzI4ZDhiNDcyN2YxNzI4MS4uYjRmYzhkNDllNjA3MmVjMWFiZGQzZmY2YmQyNTMwMDIy
NTkxODI2MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25E
YXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3Bw
CkBAIC01Niw3ICs1Niw3IEBAIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkQ29kZU9yaWdp
bihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgIGNvZGVPcmlnaW5zLmFwcGVuZChjb2Rl
T3JpZ2luKTsKICAgICB1bnNpZ25lZCBpbmRleCA9IGNvZGVPcmlnaW5zLnNpemUoKSAtIDE7CiAg
ICAgQVNTRVJUKGNvZGVPcmlnaW5zW2luZGV4XSA9PSBjb2RlT3JpZ2luKTsKLSAgICByZXR1cm4g
Q2FsbFNpdGVJbmRleChpbmRleCk7CisgICAgcmV0dXJuIENhbGxTaXRlSW5kZXgoQnl0ZWNvZGVJ
bmRleChpbmRleCkpOwogfQogCiBDYWxsU2l0ZUluZGV4IENvbW1vbkRhdGE6OmFkZFVuaXF1ZUNh
bGxTaXRlSW5kZXgoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQpAQCAtNjQsMTMgKzY0LDEzIEBAIENh
bGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6YWRkVW5pcXVlQ2FsbFNpdGVJbmRleChDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4pCiAgICAgY29kZU9yaWdpbnMuYXBwZW5kKGNvZGVPcmlnaW4pOwogICAgIHVu
c2lnbmVkIGluZGV4ID0gY29kZU9yaWdpbnMuc2l6ZSgpIC0gMTsKICAgICBBU1NFUlQoY29kZU9y
aWdpbnNbaW5kZXhdID09IGNvZGVPcmlnaW4pOwotICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KGlu
ZGV4KTsKKyAgICByZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGluZGV4KSk7CiB9
CiAKIENhbGxTaXRlSW5kZXggQ29tbW9uRGF0YTo6bGFzdENhbGxTaXRlKCkgY29uc3QKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVChjb2RlT3JpZ2lucy5zaXplKCkpOwotICAgIHJldHVybiBDYWxsU2l0
ZUluZGV4KGNvZGVPcmlnaW5zLnNpemUoKSAtIDEpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4
KEJ5dGVjb2RlSW5kZXgoY29kZU9yaWdpbnMuc2l6ZSgpIC0gMSkpOwogfQogCiBEaXNwb3NhYmxl
Q2FsbFNpdGVJbmRleCBDb21tb25EYXRhOjphZGREaXNwb3NhYmxlQ2FsbFNpdGVJbmRleChDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCmluZGV4IDZkNDQ3ZDNhOGJhMTMxMjZjMmQxOGMw
MWU5YTNlNDBkZDFmYTZhNWIuLmQzN2QyOThiYTg5YzZjMzFkZWZlNjM3MTkxNjljNzI5MDYwNjkz
OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCkBAIC0zODMsNyArMzgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAvLyBHZXRNeUFyZ3VtZW50QnlWYWwgaW4gc3VjaCBzdGF0aWNhbGx5LW91dC1vZi1ib3Vu
ZHMgYWNjZXNzZXM7IHdlIGp1c3QgbG9zZSBDRkEgdW5sZXNzCiAgICAgICAgICAgICAgICAgLy8g
R0NTRSByZW1vdmVzIHRoZSBhY2Nlc3MgZW50aXJlbHkuCiAgICAgICAgICAgICAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMgLSAxKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKQogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
aWYgKGluZGV4ID49IG1fc3RhdGUubnVtYmVyT2ZBcmd1bWVudHMoKSAtIDEpCkBAIC00MDQsNyAr
NDA0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KGluZGV4ICsgMSksIEZsdXNoZWRKU1ZhbHVlKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFt
ZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSAmJiBpbmRleCA8IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0g
MSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxs
RnJhbWUtPmlzVmFyYXJncygpICYmIGluZGV4IDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyAtIDEpIHsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVy
dFRvR2V0U3RhY2soZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVl
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RG9lc0dDLmNwcAppbmRleCAxZjMwZGZmNjE3OWMwYzMzZWVmNTE5MzIyMjdjNzU5NjY3NWFiZmFk
Li5hNTgzOTkzNDJhYWE5ZWI1YTk1OTBkNDg2NTlkNDkyNDc1NjhiZmVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCkBAIC0yOTcsNyArMjk3LDYgQEAgYm9vbCBkb2Vz
R0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgSW5CeVZhbDoKICAgICBjYXNl
IEluc3RhbmNlT2Y6CiAgICAgY2FzZSBJbnN0YW5jZU9mQ3VzdG9tOgotICAgIGNhc2UgVmFyYXJn
c0xlbmd0aDoKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgIGNhc2UgTnVtYmVyVG9TdHJpbmdX
aXRoUmFkaXg6CiAgICAgY2FzZSBOdW1iZXJUb1N0cmluZ1dpdGhWYWxpZFJhZGl4Q29uc3RhbnQ6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKaW5kZXggNDVmYmM0MzlkNTNi
YTk1MGU3YThkODlhYzllYzE5NzJiYTA5MzliNC4uMTdiMzcwNzU4YzA1Mzg3MDNiN2Q3OWVlNjIy
NzJkNDc5OTk4YjUzOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcApA
QCAtOTAsNiArOTAsNyBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgYW55IHN0dWJzIHRoYXQgdGhlIERGRyBpcyBnb2luZyB0byB1
c2UgYXJlIGluaXRpYWxpemVkLiBXZSB3YW50IHRvCiAgICAgLy8gbWFrZSBzdXJlIHRoYXQgYWxs
IEpJVCBjb2RlIGdlbmVyYXRpb24gZG9lcyBmaW5hbGl6YXRpb24gb24gdGhlIG1haW4gdGhyZWFk
LgogICAgIHZtLmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcik7CisgICAgdm0uZ2V0Q1RJ
U3R1Yihvc3JFeGl0VGh1bmtHZW5lcmF0b3IpOwogICAgIHZtLmdldENUSVN0dWIob3NyRXhpdEdl
bmVyYXRpb25UaHVua0dlbmVyYXRvcik7CiAgICAgdm0uZ2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlv
bkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpOwogICAgIHZtLmdldENUSVN0dWIobGlua0NhbGxU
aHVua0dlbmVyYXRvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAppbmRleCA5MjJkMzViYmZhZjBiYjFkZDkwYjA5MDNhNWYyY2RlNDlhYjg2YmIyLi4zNzRk
NTI2MDljM2VjNjY2YjVjYzYzMDc2NzAxNGVkYjQ1MGY0ZmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKQEAgLTI0MzksMTIgKzI0MzksNiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIEZvcndh
cmRWYXJhcmdzOgotICAgICAgICBjYXNlIExvYWRWYXJhcmdzOiB7Ci0gICAgICAgICAgICBmaXhF
ZGdlPEtub3duSW50MzJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0KICNpZiBBU1NFUlRfRU5BQkxFRAogICAgICAgICAvLyBIYXZlIHRoZXNlIG5v
LW9wIGNhc2VzIGhlcmUgdG8gZW5zdXJlIHRoYXQgbm9ib2R5IGZvcmdldHMgdG8gYWRkIGhhbmRs
ZXJzIGZvciBuZXcgb3Bjb2Rlcy4KICAgICAgICAgY2FzZSBTZXRBcmd1bWVudERlZmluaXRlbHk6
CkBAIC0yNDc3LDcgKzI0NzEsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENvbnN0cnVjdEZv
cndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAg
ICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6Ci0gICAgICAgIGNh
c2UgVmFyYXJnc0xlbmd0aDoKKyAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKKyAgICAgICAgY2Fz
ZSBGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBQcm9maWxlQ29udHJvbEZsb3c6CiAgICAg
ICAgIGNhc2UgTmV3T2JqZWN0OgogICAgICAgICBjYXNlIE5ld1Byb21pc2U6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgKaW5kZXggYmY0MzUwYzRjZDE3ZTNkNTAw
NjYzOGY1NWFhYzM1YTU2NTI5OTRhMS4uMGJmMWMzZmJiYWM0YTY2Mjk4Y2Y5MjlmZWY1MGE2MGRj
ZmRlMjhiOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxL
aWxscy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaApA
QCAtMzIsMTAgKzMyLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1u
YW1lc3BhY2UgRm9yQWxsS2lsbHNJbnRlcm5hbCB7Ci1jb25zdGV4cHIgYm9vbCB2ZXJib3NlID0g
ZmFsc2U7Ci19Ci0KIC8vIFV0aWxpdGllcyBmb3IgZmluZGluZyB0aGUgbGFzdCBwb2ludHMgd2hl
cmUgYSBub2RlIGlzIGxpdmUgaW4gREZHIFNTQS4gVGhpcyBhY2NvdW50cyBmb3IgbGl2ZW5lc3Mg
ZHVlCiAvLyB0byBPU1IgZXhpdC4gVGhpcyBpcyB1c3VhbGx5IHVzZWQgZm9yIGVudW1lcmF0aW5n
IG92ZXIgYWxsIG9mIHRoZSBwcm9ncmFtIHBvaW50cyB3aGVyZSBhIG5vZGUgaXMgbGl2ZSwKIC8v
IGJ5IGV4cGxvcmluZyBhbGwgYmxvY2tzIHdoZXJlIHRoZSBub2RlIGlzIGxpdmUgYXQgdGFpbCBh
bmQgdGhlbiBleHBsb3JpbmcgYWxsIHByb2dyYW0gcG9pbnRzIHdoZXJlIHRoZQpAQCAtNTcsMTMg
KzUzLDEzIEBAIHZvaWQgZm9yQWxsS2lsbGVkT3BlcmFuZHMoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlQmVmb3JlLCBOb2RlKiBub2RlQWZ0ZXIsIGNvbnN0CiAgICAgCiAgICAgQ29kZU9yaWdpbiBh
ZnRlciA9IG5vZGVBZnRlci0+b3JpZ2luLmZvckV4aXQ7CiAgICAgCi0gICAgT3BlcmFuZCBhbHJl
YWR5Tm90ZWQ7CisgICAgVmlydHVhbFJlZ2lzdGVyIGFscmVhZHlOb3RlZDsKICAgICAvLyBJZiB3
ZSBNb3ZIaW50IHNvbWV0aGluZyB0aGF0IGlzIGxpdmUgYXQgdGhlIHRpbWUsIHRoZW4gd2Uga2ls
bCB0aGUgb2xkIHZhbHVlLgogICAgIGlmIChub2RlQWZ0ZXItPmNvbnRhaW5zTW92SGludCgpKSB7
Ci0gICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGVBZnRlci0+dW5saW5rZWRPcGVyYW5kKCk7
Ci0gICAgICAgIGlmIChncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKG9wZXJhbmQsIGFmdGVyKSkgewot
ICAgICAgICAgICAgZnVuY3RvcihvcGVyYW5kKTsKLSAgICAgICAgICAgIGFscmVhZHlOb3RlZCA9
IG9wZXJhbmQ7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBub2RlQWZ0ZXItPnVubGlu
a2VkTG9jYWwoKTsKKyAgICAgICAgaWYgKGdyYXBoLmlzTGl2ZUluQnl0ZWNvZGUocmVnLCBhZnRl
cikpIHsKKyAgICAgICAgICAgIGZ1bmN0b3IocmVnKTsKKyAgICAgICAgICAgIGFscmVhZHlOb3Rl
ZCA9IHJlZzsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTc0LDQ4ICs3MCwyOSBAQCB2b2lk
IGZvckFsbEtpbGxlZE9wZXJhbmRzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZUJlZm9yZSwgTm9k
ZSogbm9kZUFmdGVyLCBjb25zdAogICAgIC8vIG90aGVyIGxvb3AsIGJlbG93LgogICAgIGF1dG8q
IGJlZm9yZUlubGluZUNhbGxGcmFtZSA9IGJlZm9yZS5pbmxpbmVDYWxsRnJhbWUoKTsKICAgICBp
ZiAoYmVmb3JlSW5saW5lQ2FsbEZyYW1lID09IGFmdGVyLmlubGluZUNhbGxGcmFtZSgpKSB7Cisg
ICAgICAgIGludCBzdGFja09mZnNldCA9IGJlZm9yZUlubGluZUNhbGxGcmFtZSA/IGJlZm9yZUlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwOwogICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGdyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKGJlZm9yZUlubGluZUNhbGxGcmFtZSk7
Ci0gICAgICAgIGlmIChhZnRlci5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoYmVmb3JlLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkgIT0gYWZ0
ZXIuYnl0ZWNvZGVJbmRleCgpLmNoZWNrcG9pbnQoKSk7Ci0gICAgICAgICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKGJlZm9yZS5ieXRlY29kZUluZGV4KCkub2Zmc2V0KCkgPT0gYWZ0ZXIuYnl0ZWNv
ZGVJbmRleCgpLm9mZnNldCgpLCAiV2hlbiB0aGUgREZHIGRvZXMgY29kZSBtb3Rpb24gaXQgc2hv
dWxkIGNoYW5nZSB0aGUgZm9yRXhpdCBvcmlnaW4gdG8gbWF0Y2ggdGhlIHN1cnJvdW5kaW5nIGJ5
dGVjb2Rlcy4iKTsKLQotICAgICAgICAgICAgYXV0byBsaXZlQmVmb3JlID0gdG1wTGl2ZW5lc3NG
b3JDaGVja3BvaW50KCpjb2RlQmxvY2ssIGJlZm9yZS5ieXRlY29kZUluZGV4KCkpOwotICAgICAg
ICAgICAgYXV0byBsaXZlQWZ0ZXIgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9j
aywgYWZ0ZXIuYnl0ZWNvZGVJbmRleCgpKTsKLSAgICAgICAgICAgIGxpdmVBZnRlci5pbnZlcnQo
KTsKLSAgICAgICAgICAgIGxpdmVCZWZvcmUuZmlsdGVyKGxpdmVBZnRlcik7Ci0KLSAgICAgICAg
ICAgIGxpdmVCZWZvcmUuZm9yRWFjaFNldEJpdChbJl0gKHNpemVfdCB0bXApIHsKLSAgICAgICAg
ICAgICAgICBmdW5jdG9yKHJlbWFwT3BlcmFuZChiZWZvcmVJbmxpbmVDYWxsRnJhbWUsIE9wZXJh
bmQ6OnRtcCh0bXApKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIC8vIE5vIGxvY2Fs
cyBjYW4gZGllIGF0IGEgY2hlY2twb2ludC4KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCiAgICAgICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBncmFwaC5s
aXZlbmVzc0Zvcihjb2RlQmxvY2spOwogICAgICAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBsaXZl
QmVmb3JlID0gZnVsbExpdmVuZXNzLmdldExpdmVuZXNzKGJlZm9yZS5ieXRlY29kZUluZGV4KCks
IExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludDo6QmVmb3JlVXNlKTsKICAgICAgICAgY29uc3QgRmFz
dEJpdFZlY3RvciYgbGl2ZUFmdGVyID0gZnVsbExpdmVuZXNzLmdldExpdmVuZXNzKGFmdGVyLmJ5
dGVjb2RlSW5kZXgoKSwgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50OjpCZWZvcmVVc2UpOwogICAg
ICAgICAKICAgICAgICAgKGxpdmVCZWZvcmUgJiB+bGl2ZUFmdGVyKS5mb3JFYWNoU2V0Qml0KAog
ICAgICAgICAgICAgWyZdIChzaXplX3QgcmVsYXRpdmVMb2NhbCkgewotICAgICAgICAgICAgICAg
IGZ1bmN0b3IocmVtYXBPcGVyYW5kKGJlZm9yZUlubGluZUNhbGxGcmFtZSwgdmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwocmVsYXRpdmVMb2NhbCkpKTsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKHJlbGF0aXZlTG9jYWwpICsgc3RhY2tPZmZzZXQpOwogICAg
ICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKCFhZnRlci5ieXRlY29kZUluZGV4KCkuY2hlY2twb2ludCgpLCAiVHJhbnNpdGlvbmlu
ZyBhY3Jvc3MgYSBjaGVja3BvaW50IGJ1dCBiZWZvcmUgYW5kIGFmdGVyIGRvbid0IHNoYXJlIGFu
IGlubGluZUNhbGxGcmFtZS4iKTsKLQorICAgIAogICAgIC8vIERldGVjdCBraWxscyB0aGUgc3Vw
ZXIgY29uc2VydmF0aXZlIHdheTogaXQgaXMga2lsbGVkIGlmIGl0IHdhcyBsaXZlIGJlZm9yZSBh
bmQgZGVhZCBhZnRlci4KLSAgICBCaXRWZWN0b3IgbGl2ZUFmdGVyID0gZ3JhcGgubG9jYWxzQW5k
VG1wc0xpdmVJbkJ5dGVjb2RlKGFmdGVyKTsKLSAgICB1bnNpZ25lZCBudW1Mb2NhbHMgPSBncmFw
aC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7Ci0gICAgZ3JhcGgu
Zm9yQWxsTG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKAorICAgIEJpdFZlY3RvciBsaXZlQWZ0
ZXIgPSBncmFwaC5sb2NhbHNMaXZlSW5CeXRlY29kZShhZnRlcik7CisgICAgZ3JhcGguZm9yQWxs
TG9jYWxzTGl2ZUluQnl0ZWNvZGUoCiAgICAgICAgIGJlZm9yZSwKLSAgICAgICAgWyZdIChPcGVy
YW5kIG9wZXJhbmQpIHsKLSAgICAgICAgICAgIGlmIChvcGVyYW5kID09IGFscmVhZHlOb3RlZCkK
KyAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgICAgICBpZiAocmVn
ID09IGFscmVhZHlOb3RlZCkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB1
bnNpZ25lZCBvZmZzZXQgPSBvcGVyYW5kLmlzVG1wKCkgPyBudW1Mb2NhbHMgKyBvcGVyYW5kLnZh
bHVlKCkgOiBvcGVyYW5kLnRvTG9jYWwoKTsKLSAgICAgICAgICAgIGlmIChsaXZlQWZ0ZXIuZ2V0
KG9mZnNldCkpCisgICAgICAgICAgICBpZiAobGl2ZUFmdGVyLmdldChyZWcudG9Mb2NhbCgpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBmdW5jdG9yKG9wZXJhbmQpOwor
ICAgICAgICAgICAgZnVuY3RvcihyZWcpOwogICAgICAgICB9KTsKIH0KICAgICAKQEAgLTEyOCw4
ICsxMDUsNyBAQCB2b2lkIGZvckFsbEtpbGxlZE5vZGVzQXROb2RlSW5kZXgoCiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBzZWVuSW5DbG9zdXJlRmxhZyA9IDE7CiAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBjYWxsZWRGdW5jdG9yRmxhZyA9IDI7CiAgICAgSGFzaE1hcDxOb2Rl
KiwgdW5zaWduZWQ+IGZsYWdzOwotCi0gICAgQVNTRVJUKG5vZGVJbmRleCk7CisgICAgCiAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwogICAgIAogICAgIGdyYXBoLmRvVG9D
aGlsZHJlbigKQEAgLTE0NCwxMyArMTIwLDE1IEBAIHZvaWQgZm9yQWxsS2lsbGVkTm9kZXNBdE5v
ZGVJbmRleCgKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAKLSAgICBOb2RlKiBiZWZvcmUg
PSBibG9jay0+YXQobm9kZUluZGV4IC0gMSk7CisgICAgTm9kZSogYmVmb3JlID0gbnVsbHB0cjsK
KyAgICBpZiAobm9kZUluZGV4KQorICAgICAgICBiZWZvcmUgPSBibG9jay0+YXQobm9kZUluZGV4
IC0gMSk7CiAKICAgICBmb3JBbGxLaWxsZWRPcGVyYW5kcygKICAgICAgICAgZ3JhcGgsIGJlZm9y
ZSwgbm9kZSwKLSAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKKyAgICAgICAgWyZdIChW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAuY2xvc2VT
dGFydGluZ1dpdGhMb2NhbCgKLSAgICAgICAgICAgICAgICBvcGVyYW5kLAorICAgICAgICAgICAg
ICAgIHJlZywKICAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIG5vZGUpIC0+IGJvb2wgewogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmxhZ3MuZ2V0KG5vZGUpICYgc2VlbkluQ2xvc3VyZUZs
YWc7CiAgICAgICAgICAgICAgICAgfSwKQEAgLTE4MSw3ICsxNTksNiBAQCB2b2lkIGZvckFsbEtp
bGxzSW5CbG9jaygKICAgICAvLyBTdGFydCBhdCB0aGUgc2Vjb25kIG5vZGUsIGJlY2F1c2UgdGhl
IGZ1bmN0b3IgaXMgZXhwZWN0ZWQgdG8gb25seSBpbnNwZWN0IG5vZGVzIGZyb20gdGhlIHN0YXJ0
IG9mCiAgICAgLy8gdGhlIGJsb2NrIHVwIHRvIG5vZGVJbmRleCAoZXhjbHVzaXZlKSwgc28gaWYg
bm9kZUluZGV4IGlzIHplcm8gdGhlbiB0aGUgZnVuY3RvciBoYXMgbm90aGluZyB0byBkby4KICAg
ICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDE7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7
ICsrbm9kZUluZGV4KSB7Ci0gICAgICAgIGRhdGFMb2dMbklmKEZvckFsbEtpbGxzSW50ZXJuYWw6
OnZlcmJvc2UsICJsb2NhbCBhdmFpbGFiaWxpdHkgYXQgaW5kZXg6ICIsIG5vZGVJbmRleCwgIiAi
LCBsb2NhbEF2YWlsYWJpbGl0eS5tX2F2YWlsYWJpbGl0eSk7CiAgICAgICAgIGZvckFsbEtpbGxl
ZE5vZGVzQXROb2RlSW5kZXgoCiAgICAgICAgICAgICBncmFwaCwgbG9jYWxBdmFpbGFiaWxpdHku
bV9hdmFpbGFiaWxpdHksIGJsb2NrLCBub2RlSW5kZXgsCiAgICAgICAgICAgICBbJl0gKE5vZGUq
IG5vZGUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKaW5kZXggYjlmODU3
Mjk1ZWZhZjc1MjYxNGI0NGY3NTlmNDg5OGE0ZmJjNzI1ZS4uZTUxMzU1YzU1MWI0OGMyNjZmOWUz
YWI3NTY4YmExMGI3ZDgyNGVjMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAKQEAgLTMwOCw4ICszMDgsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQs
IGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgTm9kZSogbm9kZSwgRHVtcENvbnRleAogICAgIGlmIChu
b2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRoaXMpKSB7CiAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dHJ5R2V0VmFyaWFibGVBY2Nlc3NE
YXRhKCk7CiAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEpIHsKLSAgICAgICAgICAgIE9w
ZXJhbmQgb3BlcmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpOwotICAgICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCB2YXJpYWJsZUFjY2Vzc0RhdGEtPm9wZXJhbmQoKSwgIigiLCBW
YXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFjY2Vzc0RhdGEpLCAiKSIpOwor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZUFjY2Vzc0RhdGEt
PmxvY2FsKCk7CisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIHZhcmlhYmxlQWNjZXNzRGF0
YS0+bG9jYWwoKSwgIigiLCBWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wKCp0aGlzLCB2YXJpYWJsZUFj
Y2Vzc0RhdGEpLCAiKSIpOwogICAgICAgICAgICAgb3BlcmFuZCA9IHZhcmlhYmxlQWNjZXNzRGF0
YS0+bWFjaGluZUxvY2FsKCk7CiAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc1ZhbGlkKCkpCiAg
ICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibWFjaGluZToiLCBvcGVyYW5kKTsKQEAg
LTMxNywxMyArMzE3LDEzIEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QgY2hhciogcHJlZml4U3RyLCBOb2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgfQogICAgIGlm
IChub2RlLT5oYXNTdGFja0FjY2Vzc0RhdGEoKSkgewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEq
IGRhdGEgPSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKLSAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBkYXRhLT5vcGVyYW5kKTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBkYXRhLT5sb2NhbCk7
CiAgICAgICAgIGlmIChkYXRhLT5tYWNoaW5lTG9jYWwuaXNWYWxpZCgpKQogICAgICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAibWFjaGluZToiLCBkYXRhLT5tYWNoaW5lTG9jYWwpOwogICAgICAg
ICBvdXQucHJpbnQoY29tbWEsIGRhdGEtPmZvcm1hdCk7CiAgICAgfQotICAgIGlmIChub2RlLT5o
YXNVbmxpbmtlZE9wZXJhbmQoKSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT51bmxp
bmtlZE9wZXJhbmQoKSk7CisgICAgaWYgKG5vZGUtPmhhc1VubGlua2VkTG9jYWwoKSkgCisgICAg
ICAgIG91dC5wcmludChjb21tYSwgbm9kZS0+dW5saW5rZWRMb2NhbCgpKTsKICAgICBpZiAobm9k
ZS0+aGFzVmVjdG9yTGVuZ3RoSGludCgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJ2ZWN0
b3JMZW5ndGhIaW50ID0gIiwgbm9kZS0+dmVjdG9yTGVuZ3RoSGludCgpKTsKICAgICBpZiAobm9k
ZS0+aGFzTGF6eUpTVmFsdWUoKSkKQEAgLTUxNSwxMCArNTE1LDkgQEAgdm9pZCBHcmFwaDo6ZHVt
cEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeFN0ciwgQmFz
aWNCbG9jayoKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgUGhpIE5vZGVzOiIpOwogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5waGlzLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gYmxvY2stPnBoaXNbaV07Ci0gICAgICAgICAgICBB
U1NFUlQocGhpTm9kZS0+b3AoKSA9PSBQaGkpOwogICAgICAgICAgICAgaWYgKCFwaGlOb2RlLT5z
aG91bGRHZW5lcmF0ZSgpICYmIHBoaU5vZGVEdW1wTW9kZSA9PSBEdW1wTGl2ZVBoaXNPbmx5KQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgb3V0LnByaW50KCIgQCIsIHBo
aU5vZGUtPmluZGV4KCksICI8IiwgcGhpTm9kZS0+b3BlcmFuZCgpLCAiLCIsIHBoaU5vZGUtPnJl
ZkNvdW50KCksICI+LT4oIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiBAIiwgcGhpTm9kZS0+
aW5kZXgoKSwgIjwiLCBwaGlOb2RlLT5sb2NhbCgpLCAiLCIsIHBoaU5vZGUtPnJlZkNvdW50KCks
ICI+LT4oIik7CiAgICAgICAgICAgICBpZiAocGhpTm9kZS0+Y2hpbGQxKCkpIHsKICAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoIkAiLCBwaGlOb2RlLT5jaGlsZDEoKS0+aW5kZXgoKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKHBoaU5vZGUtPmNoaWxkMigpKSB7CkBAIC04ODUsNyArODg0LDcgQEAg
dm9pZCBHcmFwaDo6c3Vic3RpdHV0ZUdldExvY2FsKEJhc2ljQmxvY2smIGJsb2NrLCB1bnNpZ25l
ZCBzdGFydEluZGV4SW5CbG9jaywgVmEKICAgICAgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IHRy
dWU7CiAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICBjYXNlIFNldExvY2Fs
OiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+b3BlcmFuZCgpID09IHZhcmlhYmxlQWNjZXNzRGF0
YS0+b3BlcmFuZCgpKQorICAgICAgICAgICAgaWYgKG5vZGUtPmxvY2FsKCkgPT0gdmFyaWFibGVB
Y2Nlc3NEYXRhLT5sb2NhbCgpKQogICAgICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFs
c2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtODk0LDkgKzg5Myw5IEBAIHZv
aWQgR3JhcGg6OnN1YnN0aXR1dGVHZXRMb2NhbChCYXNpY0Jsb2NrJiBibG9jaywgdW5zaWduZWQg
c3RhcnRJbmRleEluQmxvY2ssIFZhCiAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nl
c3NEYXRhKCkgIT0gdmFyaWFibGVBY2Nlc3NEYXRhKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgc3Vic3RpdHV0ZShibG9jaywgaW5kZXhJbkJsb2NrLCBub2RlLCBuZXdH
ZXRMb2NhbCk7Ci0gICAgICAgICAgICBOb2RlKiBvbGRUYWlsTm9kZSA9IGJsb2NrLnZhcmlhYmxl
c0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpKTsKKyAgICAgICAg
ICAgIE5vZGUqIG9sZFRhaWxOb2RlID0gYmxvY2sudmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFy
aWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpKTsKICAgICAgICAgICAgIGlmIChvbGRUYWlsTm9kZSA9
PSBub2RlKQotICAgICAgICAgICAgICAgIGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZh
cmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpKSA9IG5ld0dldExvY2FsOworICAgICAgICAgICAg
ICAgIGJsb2NrLnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9j
YWwoKSkgPSBuZXdHZXRMb2NhbDsKICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTEzNCw1NiArMTEzMywzNiBAQCBC
eXRlY29kZUtpbGxzJiBHcmFwaDo6a2lsbHNGb3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUpCiAgICAgcmV0dXJuIGtpbGxzRm9yKGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNh
bGxGcmFtZSkpOwogfQogCi1ib29sIEdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKE9wZXJhbmQgb3Bl
cmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29k
ZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewogICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNoZWNraW5nIG9mIG9wZXJhbmQgaXMgbGl2ZTogIiwg
b3BlcmFuZCwgIlxuIik7CiAgICAgYm9vbCBpc0NhbGxlck9yaWdpbiA9IGZhbHNlOwotCiAgICAg
Q29kZU9yaWdpbiogY29kZU9yaWdpblB0ciA9ICZjb2RlT3JpZ2luOwotICAgIGF1dG8qIGlubGlu
ZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZSgpOwotICAgIC8vIFdl
IG5lZWQgdG8gaGFuZGxlIHRhaWwgY2FsbGVycyBiZWNhdXNlIHdlIG1heSBkZWNpZGUgdG8gZXhp
dCB0byB0aGUKLSAgICAvLyB0aGUgcmV0dXJuIGJ5dGVjb2RlIGZvbGxvd2luZyB0aGUgdGFpbCBj
YWxsLgotICAgIGZvciAoOyBjb2RlT3JpZ2luUHRyOyBjb2RlT3JpZ2luUHRyID0gaW5saW5lQ2Fs
bEZyYW1lID8gJmlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyIDogbnVsbHB0cikgewotICAg
ICAgICBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJhbWUoKTsK
LSAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkgewotICAgICAgICAgICAgdW5zaWduZWQgdG1w
T2Zmc2V0ID0gaW5saW5lQ2FsbEZyYW1lID8gaW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAw
OwotICAgICAgICAgICAgdW5zaWduZWQgb3BlcmFuZEluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KG9wZXJhbmQudmFsdWUoKSk7Ci0KLSAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kLnZhbHVl
KCkgPj0gMCk7Ci0gICAgICAgICAgICAvLyBUaGlzIHRtcCBzaG91bGQgaGF2ZSBiZWxvbmdlZCB0
byBzb21lb25lIHdlIGlubGluZWQuCi0gICAgICAgICAgICBpZiAob3BlcmFuZEluZGV4ID4gdG1w
T2Zmc2V0ICsgbWF4TnVtQ2hlY2twb2ludFRtcHMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJs
b2NrRm9yKGlubGluZUNhbGxGcmFtZSk7Ci0gICAgICAgICAgICBpZiAoIWNvZGVCbG9jay0+bnVt
VG1wcygpIHx8IG9wZXJhbmRJbmRleCA8IHRtcE9mZnNldCkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICAgICAgYXV0byBiaXRNYXAgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9p
bnQoKmNvZGVCbG9jaywgY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpKTsKLSAgICAgICAg
ICAgIHJldHVybiBiaXRNYXAuZ2V0KG9wZXJhbmRJbmRleCAtIHRtcE9mZnNldCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gb3BlcmFuZC52aXJ0dWFsUmVnaXN0
ZXIoKSAtIGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zmc2V0KCk7CisgICAgZm9yICg7OykgeworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gVmlydHVhbFJlZ2lzdGVyKAorICAgICAgICAgICAg
b3BlcmFuZC5vZmZzZXQoKSAtIGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zmc2V0KCkpOwogICAgICAg
ICAKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJyZWcgPSAiLCBy
ZWcsICJcbiIpOwogCi0gICAgICAgIGlmIChvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNl
dCgpIDwgY29kZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQoKSArIENhbGxGcmFtZTo6aGVhZGVyU2l6
ZUluUmVnaXN0ZXJzKSB7CisgICAgICAgIGF1dG8qIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmln
aW5QdHItPmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQoKSA8
IGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zmc2V0KCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJl
Z2lzdGVycykgewogICAgICAgICAgICAgaWYgKHJlZy5pc0FyZ3VtZW50KCkpIHsKICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChyZWcub2Zmc2V0KCkgPCBDYWxsRnJhbWU6OmhlYWRlclNp
emVJblJlZ2lzdGVycyk7CiAKIAogICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmlzQ2xvc3VyZUNhbGwKLSAgICAgICAgICAgICAgICAgICAgJiYgcmVnID09IENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSkgeworICAgICAgICAgICAgICAgICAgICAmJiByZWcub2Zmc2V0KCkgPT0gQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTG9va3MgbGlrZSBhIGNhbGxlZS5cbiIp
OwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNW
YXJhcmdzKCkKLSAgICAgICAgICAgICAgICAgICAgJiYgcmVnID09IENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSB7CisgICAgICAgICAgICAgICAgICAgICYmIHJlZy5v
ZmZzZXQoKSA9PSBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykgewog
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIkxvb2tzIGxpa2UgdGhlIGFyZ3VtZW50IGNvdW50LlxuIik7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTE5NywzOSArMTE3Niw0MiBAQCBib29sIEdyYXBo
Ojppc0xpdmVJbkJ5dGVjb2RlKE9wZXJhbmQgb3BlcmFuZCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
KQogICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zv
cihpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1
bGxMaXZlbmVzcyA9IGxpdmVuZXNzRm9yKGNvZGVCbG9jayk7CiAgICAgICAgICAgICBCeXRlY29k
ZUluZGV4IGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KCk7Ci0g
ICAgICAgICAgICByZXR1cm4gZnVsbExpdmVuZXNzLnZpcnR1YWxSZWdpc3RlcklzTGl2ZShyZWcs
IGJ5dGVjb2RlSW5kZXgsIGFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KCpjb2Rl
T3JpZ2luUHRyLCBpc0NhbGxlck9yaWdpbikpOworICAgICAgICAgICAgcmV0dXJuIGZ1bGxMaXZl
bmVzcy5vcGVyYW5kSXNMaXZlKHJlZy5vZmZzZXQoKSwgYnl0ZWNvZGVJbmRleCwgYXBwcm9wcmlh
dGVMaXZlbmVzc0NhbGN1bGF0aW9uUG9pbnQoKmNvZGVPcmlnaW5QdHIsIGlzQ2FsbGVyT3JpZ2lu
KSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkgeworICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiUmFuIG91dCBvZiBz
dGFjaywgcmV0dXJuaW5nIHRydWUuXG4iKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAKICAgICAgICAgLy8gQXJndW1lbnRzIGFyZSBhbHdheXMgbGl2ZS4gVGhpcyB3b3Vs
ZCBiZSByZWR1bmRhbnQgaWYgaXQgd2Fzbid0IGZvciBvdXIKICAgICAgICAgLy8gb3BfY2FsbF92
YXJhcmdzIGlubGluaW5nLgotICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmIHJlZy5pc0Fy
Z3VtZW50KCkKKyAgICAgICAgaWYgKHJlZy5pc0FyZ3VtZW50KCkKICAgICAgICAgICAgICYmIHN0
YXRpY19jYXN0PHNpemVfdD4ocmVnLnRvQXJndW1lbnQoKSkgPCBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50c1dpdGhGaXh1cC5zaXplKCkpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkFyZ3VtZW50IGlzIGxpdmUuXG4iKTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAKKyAgICAgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUg
dGFpbCBjYWxsZXJzIGJlY2F1c2Ugd2UgbWF5IGRlY2lkZSB0byBleGl0IHRvIHRoZQorICAgICAg
ICAvLyB0aGUgcmV0dXJuIGJ5dGVjb2RlIGZvbGxvd2luZyB0aGUgdGFpbCBjYWxsLgorICAgICAg
ICBjb2RlT3JpZ2luUHRyID0gJmlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyOwogICAgICAg
ICBpc0NhbGxlck9yaWdpbiA9IHRydWU7CiAgICAgfQotCi0gICAgaWYgKG9wZXJhbmQuaXNUbXAo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRh
dGFMb2coIlJhbiBvdXQgb2Ygc3RhY2ssIHJldHVybmluZyB0cnVlLlxuIik7Ci0gICAgcmV0dXJu
IHRydWU7ICAgIAorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAK
LUJpdFZlY3RvciBHcmFwaDo6bG9jYWxzQW5kVG1wc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4g
Y29kZU9yaWdpbikKK0JpdFZlY3RvciBHcmFwaDo6bG9jYWxzTGl2ZUluQnl0ZWNvZGUoQ29kZU9y
aWdpbiBjb2RlT3JpZ2luKQogewogICAgIEJpdFZlY3RvciByZXN1bHQ7Ci0gICAgdW5zaWduZWQg
bnVtTG9jYWxzID0gYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOwot
ICAgIHJlc3VsdC5lbnN1cmVTaXplKG51bUxvY2FscyArIGJsb2NrKDApLT52YXJpYWJsZXNBdEhl
YWQubnVtYmVyT2ZUbXBzKCkpOwotICAgIGZvckFsbExvY2Fsc0FuZFRtcHNMaXZlSW5CeXRlY29k
ZSgKKyAgICByZXN1bHQuZW5zdXJlU2l6ZShibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJl
ck9mTG9jYWxzKCkpOworICAgIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKAogICAgICAgICBj
b2RlT3JpZ2luLAotICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewotICAgICAgICAgICAg
dW5zaWduZWQgb2Zmc2V0ID0gb3BlcmFuZC5pc1RtcCgpID8gbnVtTG9jYWxzICsgb3BlcmFuZC52
YWx1ZSgpIDogb3BlcmFuZC50b0xvY2FsKCk7Ci0gICAgICAgICAgICByZXN1bHQucXVpY2tTZXQo
b2Zmc2V0KTsKKyAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgICAg
ICBBU1NFUlQocmVnLmlzTG9jYWwoKSk7CisgICAgICAgICAgICByZXN1bHQucXVpY2tTZXQocmVn
LnRvTG9jYWwoKSk7CiAgICAgICAgIH0pOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xNjUz
LDggKzE2MzUsOCBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjptZXRob2RP
ZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKE5vZGUqIGN1cnJlbgogCiAgICAgZm9yIChOb2RlKiBu
b2RlID0gb3BlcmFuZE5vZGU7IG5vZGU7KSB7CiAgICAgICAgIGlmIChub2RlLT5hY2Nlc3Nlc1N0
YWNrKCp0aGlzKSkgewotICAgICAgICAgICAgaWYgKG1fZm9ybSAhPSBTU0EgJiYgbm9kZS0+b3Bl
cmFuZCgpLmlzQXJndW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG5v
ZGUtPm9wZXJhbmQoKS50b0FyZ3VtZW50KCk7CisgICAgICAgICAgICBpZiAobV9mb3JtICE9IFNT
QSAmJiBub2RlLT5sb2NhbCgpLmlzQXJndW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGludCBh
cmd1bWVudCA9IG5vZGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpOwogICAgICAgICAgICAgICAgIE5v
ZGUqIGFyZ3VtZW50Tm9kZSA9IG1fcm9vdFRvQXJndW1lbnRzLmZpbmQoYmxvY2soMCkpLT52YWx1
ZVthcmd1bWVudF07CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYXRjaCBT
ZXRBcmd1bWVudERlZmluaXRlbHkgbm9kZXMgYXQgb3RoZXIgZW50cnlwb2ludHMgYXMgd2VsbDoK
ICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc1ODQxCkBAIC0xNjc0LDcgKzE2NTYsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlIEdyYXBoOjptZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKE5vZGUqIGN1cnJlbgog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZTo6
ZnJvbUxhenlPcGVyYW5kKAogICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywK
ICAgICAgICAgICAgICAgICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUlu
ZGV4KCksIG5vZGUtPm9wZXJhbmQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KCksIG5vZGUtPmxvY2FsKCkpKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAppbmRleCBkNDMzZDg1ZDk3ODlhNWJlOWI1Y2U2ODM4ZDliMWUyMzQxYTdhNGNhLi5l
YzRmMjJiZWU1NWYxYjI5MDQyYmZiMjNlMTI2NGZhMjAzY2FkZGU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCkBAIC04NDAsMTMgKzg0MCwxMyBAQCBwdWJsaWM6CiAgICAgLy8g
UXVpY2tseSBxdWVyeSBpZiBhIHNpbmdsZSBsb2NhbCBpcyBsaXZlIGF0IHRoZSBnaXZlbiBwb2lu
dC4gVGhpcyBpcyBmYXN0ZXIgdGhhbiBjYWxsaW5nCiAgICAgLy8gZm9yQWxsTGl2ZUluQnl0ZWNv
ZGUoKSBpZiB5b3Ugd2lsbCBvbmx5IHF1ZXJ5IG9uZSBsb2NhbC4gQnV0LCBpZiB5b3Ugd2FudCB0
byBrbm93IGFsbCBvZiB0aGUKICAgICAvLyBsb2NhbHMgbGl2ZSwgdGhlbiBjYWxsaW5nIHRoaXMg
Zm9yIGVhY2ggbG9jYWwgaXMgbXVjaCBzbG93ZXIgdGhhbiBmb3JBbGxMaXZlSW5CeXRlY29kZSgp
LgotICAgIGJvb2wgaXNMaXZlSW5CeXRlY29kZShPcGVyYW5kLCBDb2RlT3JpZ2luKTsKKyAgICBi
b29sIGlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyLCBDb2RlT3JpZ2luKTsKICAgICAK
LSAgICAvLyBRdWlja2x5IGdldCBhbGwgb2YgdGhlIG5vbi1hcmd1bWVudCBsb2NhbHMgYW5kIHRt
cHMgbGl2ZSBhdCB0aGUgZ2l2ZW4gcG9pbnQuIFRoaXMgZG9lc24ndCBnaXZlIHlvdQorICAgIC8v
IFF1aWNrbHkgZ2V0IGFsbCBvZiB0aGUgbm9uLWFyZ3VtZW50IGxvY2FscyBsaXZlIGF0IHRoZSBn
aXZlbiBwb2ludC4gVGhpcyBkb2Vzbid0IGdpdmUgeW91CiAgICAgLy8gYW55IGFyZ3VtZW50cyBi
ZWNhdXNlIHRob3NlIGFyZSBhbGwgcHJlc3VtZWQgbGl2ZS4gWW91IGNhbiBjYWxsIGZvckFsbExp
dmVJbkJ5dGVjb2RlKCkgdG8KICAgICAvLyBhbHNvIGdldCB0aGUgYXJndW1lbnRzLiBUaGlzIGlz
IG11Y2ggZmFzdGVyIHRoYW4gY2FsbGluZyBpc0xpdmVJbkJ5dGVjb2RlKCkgZm9yIGVhY2ggbG9j
YWwuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZvckFsbExvY2Fs
c0FuZFRtcHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpCisgICAgdm9pZCBmb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewogICAgICAgICAv
LyBTdXBwb3J0IGZvciBub3QgcmVkdW5kYW50bHkgcmVwb3J0aW5nIGFyZ3VtZW50cy4gTmVjZXNz
YXJ5IGJlY2F1c2UgaW4gY2FzZSBvZiBhIHZhcmFyZ3MKICAgICAgICAgLy8gY2FsbCwgb25seSB0
aGUgY2FsbGVlIGtub3dzIHRoYXQgYXJndW1lbnRzIGFyZSBsaXZlIHdoaWxlIGluIHRoZSBjYXNl
IG9mIGEgbm9uLXZhcmFyZ3MKQEAgLTg4MSwxNCArODgxLDYgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIGlmIChsaXZlbmVzc0F0Qnl0ZWNvZGVbcmVsYXRpdmVMb2NhbF0pCiAgICAgICAgICAg
ICAgICAgICAgIGZ1bmN0b3IocmVnKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYg
KGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCkpIHsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5udW1UbXBzKCkpOwotICAgICAgICAgICAgICAgIGF1
dG8gbGl2ZVRtcHMgPSB0bXBMaXZlbmVzc0ZvckNoZWNrcG9pbnQoKmNvZGVCbG9jaywgY29kZU9y
aWdpblB0ci0+Ynl0ZWNvZGVJbmRleCgpKTsKLSAgICAgICAgICAgICAgICBsaXZlVG1wcy5mb3JF
YWNoU2V0Qml0KFsmXSAoc2l6ZV90IHRtcCkgewotICAgICAgICAgICAgICAgICAgICBmdW5jdG9y
KHJlbWFwT3BlcmFuZChpbmxpbmVDYWxsRnJhbWUsIE9wZXJhbmQ6OnRtcCh0bXApKSk7Ci0gICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTEyLDkg
KzkwNCw5IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBHZXQgYSBC
aXRWZWN0b3Igb2YgYWxsIG9mIHRoZSBsb2NhbHMgYW5kIHRtcHMgbGl2ZSByaWdodCBub3cuIFRo
aXMgaXMgbW9zdGx5IHVzZWZ1bCBpZgorICAgIC8vIEdldCBhIEJpdFZlY3RvciBvZiBhbGwgb2Yg
dGhlIG5vbi1hcmd1bWVudCBsb2NhbHMgbGl2ZSByaWdodCBub3cuIFRoaXMgaXMgbW9zdGx5IHVz
ZWZ1bCBpZgogICAgIC8vIHlvdSB3YW50IHRvIGNvbXBhcmUgdHdvIHNldHMgb2YgbGl2ZSBsb2Nh
bHMgZnJvbSB0d28gZGlmZmVyZW50IENvZGVPcmlnaW5zLgotICAgIEJpdFZlY3RvciBsb2NhbHNB
bmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbik7CisgICAgQml0VmVjdG9yIGxvY2Fsc0xp
dmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4pOwogCiAgICAgTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50
IGFwcHJvcHJpYXRlTGl2ZW5lc3NDYWxjdWxhdGlvblBvaW50KENvZGVPcmlnaW4gb3JpZ2luLCBi
b29sIGlzQ2FsbGVyT3JpZ2luKQogICAgIHsKQEAgLTk0NiwxMiArOTM4LDEyIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIExpdmVuZXNzQ2FsY3VsYXRpb25Qb2ludDo6QmVmb3JlVXNlOwogICAg
IH0KICAgICAKLSAgICAvLyBUZWxscyB5b3UgYWxsIG9mIHRoZSBvcGVyYW5kcyBsaXZlIGF0IHRo
ZSBnaXZlbiBDb2RlT3JpZ2luLiBUaGlzIGlzIGEgc21hbGwKLSAgICAvLyBleHRlbnNpb24gdG8g
Zm9yQWxsTG9jYWxzT3JUbXBzTGl2ZUluQnl0ZWNvZGUoKSwgc2luY2UgYWxsIGFyZ3VtZW50cyBh
cmUgYWx3YXlzIHByZXN1bWVkIGxpdmUuCisgICAgLy8gVGVsbHMgeW91IGFsbCBvZiB0aGUgYXJn
dW1lbnRzIGFuZCBsb2NhbHMgbGl2ZSBhdCB0aGUgZ2l2ZW4gQ29kZU9yaWdpbi4gVGhpcyBpcyBh
IHNtYWxsCisgICAgLy8gZXh0ZW5zaW9uIHRvIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKCks
IHNpbmNlIGFsbCBhcmd1bWVudHMgYXJlIGFsd2F5cyBwcmVzdW1lZCBsaXZlLgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBmb3JBbGxMaXZlSW5CeXRlY29kZShDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewotICAgICAg
ICBmb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoY29kZU9yaWdpbiwgZnVuY3Rvcik7
CisgICAgICAgIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKGNvZGVPcmlnaW4sIGZ1bmN0b3Ip
OwogICAgICAgICAKICAgICAgICAgLy8gUmVwb3J0IGFsbCBhcmd1bWVudHMgYXMgYmVpbmcgbGl2
ZS4KICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGJsb2NrKDApLT52YXJpYWJsZXNB
dEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnQtLTspCkBAIC0xMTIyLDcgKzExMTQs
NiBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2t3YXJkc0NGRz4gbV9iYWNrd2Fy
ZHNDRkc7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2t3YXJkc0RvbWluYXRvcnM+IG1fYmFja3dh
cmRzRG9taW5hdG9yczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29udHJvbEVxdWl2YWxlbmNlQW5h
bHlzaXM+IG1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXM7Ci0gICAgdW5zaWduZWQgbV90bXBz
OwogICAgIHVuc2lnbmVkIG1fbG9jYWxWYXJzOwogICAgIHVuc2lnbmVkIG1fbmV4dE1hY2hpbmVM
b2NhbDsKICAgICB1bnNpZ25lZCBtX3BhcmFtZXRlclNsb3RzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAppbmRleCAyMDJk
MjI1MDUzZmE5ZGZiZTVjMjNjNjRiY2Y4YmUzODRlM2U3NjU0Li45OWFlZmZjZGMwNWExMWM0NWIw
NTc0MTI1MGY0ZDJhZWI0ZTIyOGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcApAQCAtNDUsOCArNDUsOCBAQCBzdGF0
aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogSW5QbGFjZUFic3RyYWN0U3RhdGU6
OkluUGxhY2VBYnN0cmFjdFN0YXRlKEdyYXBoJiBncmFwaCkKICAgICA6IG1fZ3JhcGgoZ3JhcGgp
CiAgICAgLCBtX2Fic3RyYWN0VmFsdWVzKCpncmFwaC5tX2Fic3RyYWN0VmFsdWVzQ2FjaGUpCi0g
ICAgLCBtX3ZhcmlhYmxlcyhPcGVyYW5kc0xpa2UsIGdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNB
dEhlYWQpCi0gICAgLCBtX2Jsb2NrKG51bGxwdHIpCisgICAgLCBtX3ZhcmlhYmxlcyhtX2dyYXBo
Lm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIGdyYXBoLm1fbG9jYWxWYXJzKQorICAgICwg
bV9ibG9jaygwKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKaW5kZXggMTg2NWU2YTFlZmZjM2RhYWVmZTU4NGNhODYy
YzQ5YmMzNjg1ODUwMC4uYmY1ZWFkMThlYzE2NDdlZTE2NzY2ODgzNTc0MDFmYTdmZWM3MTI5OSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RT
dGF0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0
U3RhdGUuaApAQCAtMTY3LDExICsxNjcsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZmFz
dEZvcndhcmQobV92YXJpYWJsZXNbaW5kZXhdKTsKICAgICB9CiAKLSAgICBBYnN0cmFjdFZhbHVl
JiBvcGVyYW5kKE9wZXJhbmQgb3BlcmFuZCkKKyAgICBBYnN0cmFjdFZhbHVlJiBvcGVyYW5kKGlu
dCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZhcmlhYmxlQXQobV92YXJpYWJsZXMu
b3BlcmFuZEluZGV4KG9wZXJhbmQpKTsKICAgICB9CiAgICAgCisgICAgQWJzdHJhY3RWYWx1ZSYg
b3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeyByZXR1cm4gdGhpcy0+b3BlcmFuZChv
cGVyYW5kLm9mZnNldCgpKTsgfQorICAgIAogICAgIEFic3RyYWN0VmFsdWUmIGxvY2FsKHNpemVf
dCBpbmRleCkKICAgICB7CiAgICAgICAgIHJldHVybiB2YXJpYWJsZUF0KG1fdmFyaWFibGVzLmxv
Y2FsSW5kZXgoaW5kZXgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5jcHAKaW5kZXggYzU1NDRiYmM1Yzk4MDU2NjlmOWU3ZjZmZjgwYjlhYzE5NmY0ZGYwOS4u
NzBlZWY4ODZiNGE4ZmUyOTQzZjQ2YmFlNzZlYzZiNjM3MGU0NTJkNSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKQEAgLTg1LDYgKzg1LDggQEAgdm9p
ZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKCkKICAgICAgICAgfQogICAgIH0KICAgICAKKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IG9zckV4aXRUaHVuayA9IHZt
KCkuZ2V0Q1RJU3R1Yihvc3JFeGl0VGh1bmtHZW5lcmF0b3IpOworICAgIGF1dG8gb3NyRXhpdFRo
dW5rTGFiZWwgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRUaHVua1B0clRhZz4ob3NyRXhpdFRodW5r
LmNvZGUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faml0Q29kZS0+b3NyRXhp
dC5zaXplKCk7ICsraSkgewogICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0g
bV9leGl0Q29tcGlsYXRpb25JbmZvW2ldOwogICAgICAgICBKdW1wTGlzdCYgZmFpbHVyZUp1bXBz
ID0gaW5mby5tX2ZhaWx1cmVKdW1wczsKQEAgLTk1LDcgKzk3LDEzIEBAIHZvaWQgSklUQ29tcGls
ZXI6OmxpbmtPU1JFeGl0cygpCiAKICAgICAgICAgaml0QXNzZXJ0SGFzVmFsaWRDYWxsRnJhbWUo
KTsKICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoaSksICZ2bSgpLm9zckV4aXRJbmRleCk7
Ci0gICAgICAgIGluZm8ubV9wYXRjaGFibGVKdW1wID0gcGF0Y2hhYmxlSnVtcCgpOworICAgICAg
ICBpZiAoT3B0aW9uczo6dXNlUHJvYmVPU1JFeGl0KCkpIHsKKyAgICAgICAgICAgIEp1bXAgdGFy
Z2V0ID0ganVtcCgpOworICAgICAgICAgICAgYWRkTGlua1Rhc2soW3RhcmdldCwgb3NyRXhpdFRo
dW5rTGFiZWxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKHRhcmdldCwgb3NyRXhpdFRodW5rTGFiZWwpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaW5mby5tX3BhdGNoYWJsZUp1bXAgPSBwYXRj
aGFibGVKdW1wKCk7CiAgICAgfQogfQogCkBAIC01ODcsMTIgKzU5NSwxMSBAQCB2b2lkIEpJVENv
bXBpbGVyOjpub3RpY2VPU1JFbnRyeShCYXNpY0Jsb2NrJiBiYXNpY0Jsb2NrLCBKSVRDb21waWxl
cjo6TGFiZWwgYmxvYwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKCF2YXJpYWJsZS0+b3BlcmFu
ZCgpLmlzVG1wKCkpOwotICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVh
bFJlZ2lzdGVyKCkgIT0gdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSB7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKSAhPSB2YXJpYWJsZS0+bWFjaGluZUxv
Y2FsKCkpIHsKICAgICAgICAgICAgICAgICBlbnRyeS0+bV9yZXNodWZmbGluZ3MuYXBwZW5kKAog
ICAgICAgICAgICAgICAgICAgICBPU1JFbnRyeVJlc2h1ZmZsaW5nKAotICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyaWFibGUtPm9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKSwg
dmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgp
Lm9mZnNldCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKaW5kZXggNDg4MDg3NGMyODVhYjdkNDQ3
ZWI4OTNhNmU4YjRiYmYwMTA3MzFkNC4uZDFiZDdkYTlkZmZkYzM2YzI2MGU2MzVjYjYwMGE5YjJm
MTkxOWQzNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaApA
QCAtMTM1LDcgKzEzNSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZW1pdFN0b3JlQ2FsbFNpdGVJ
bmRleChDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKQogICAgIHsKLSAgICAgICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIoY2FsbFNpdGUuYml0cygpKSwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKSk7CisgICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGNhbGxT
aXRlLmJpdHMoKSksIHRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSkpOwogICAgIH0KIAogICAgIC8vIEFk
ZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJs
ZVByZXNlcnZhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2
ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKaW5kZXggNWMzNWU1MzVlNWRkNjYx
ZDMxZGQ1MTMwZDdjMTJiYWNiYWRiMmMwZi4uNDJmNjhhZGEzMjQ3OGExMTcxY2VhZDBmOTNlMDhh
YzI1Y2E2MzEzNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZl
Q2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCkBAIC02
Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAg
Ym9vbCBpc1ZhbGlkRmx1c2hMb2NhdGlvbihCYXNpY0Jsb2NrKiBzdGFydGluZ0Jsb2NrLCB1bnNp
Z25lZCBpbmRleCwgT3BlcmFuZCBvcGVyYW5kKQorICAgIGJvb2wgaXNWYWxpZEZsdXNoTG9jYXRp
b24oQmFzaWNCbG9jayogc3RhcnRpbmdCbG9jaywgdW5zaWduZWQgaW5kZXgsIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKQogICAgIHsKICAgICAgICAgLy8gVGhpcyBjb2RlIGlzIG5vdCBtZWFudCB0
byBiZSBmYXN0LiBXZSBqdXN0IHVzZSBpdCBmb3IgYXNzZXJ0aW9ucy4gSWYgd2UgZ290IGxpdmVu
ZXNzIHdyb25nLAogICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIHdvdWxkIHJldHVybiBmYWxzZSBm
b3IgYSBGbHVzaCB0aGF0IHdlIGluc2VydC4KQEAgLTgxLDcgKzgxLDcgQEAgcHVibGljOgogICAg
ICAgICBhdXRvIGZsdXNoSXNEZWZpbml0ZWx5SW52YWxpZCA9IFsmXSAoQmFzaWNCbG9jayogYmxv
Y2ssIHVuc2lnbmVkIGluZGV4KSB7CiAgICAgICAgICAgICBib29sIGFsbEdvb2QgPSBmYWxzZTsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGluZGV4OyBpLS07ICkgewotICAgICAgICAg
ICAgICAgIGlmIChibG9jay0+YXQoaSktPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkgJiYgYmxvY2st
PmF0KGkpLT5vcGVyYW5kKCkgPT0gb3BlcmFuZCkgeworICAgICAgICAgICAgICAgIGlmIChibG9j
ay0+YXQoaSktPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkgJiYgYmxvY2stPmF0KGkpLT5sb2NhbCgp
ID09IG9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgYWxsR29vZCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTExNSw3ICsxMTUs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBoYW5kbGVCbG9ja0ZvclRyeUNhdGNoKEJhc2ljQmxvY2sq
IGJsb2NrLCBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCkKICAgICB7CiAgICAgICAgIEhhbmRs
ZXJJbmZvKiBjdXJyZW50RXhjZXB0aW9uSGFuZGxlciA9IG51bGxwdHI7Ci0gICAgICAgIE9wZXJh
bmRzPGJvb2w+IGxpdmVBdENhdGNoSGVhZCgwLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNB
dFRhaWwubnVtYmVyT2ZMb2NhbHMoKSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRUYWls
Lm51bWJlck9mVG1wcygpKTsKKyAgICAgICAgRmFzdEJpdFZlY3RvciBsaXZlQXRDYXRjaEhlYWQ7
CisgICAgICAgIGxpdmVBdENhdGNoSGVhZC5yZXNpemUobV9ncmFwaC5ibG9jaygwKS0+dmFyaWFi
bGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkpOwogCiAgICAgICAgIEhhbmRsZXJJbmZvKiBjYWNo
ZWRIYW5kbGVyUmVzdWx0OwogICAgICAgICBDb2RlT3JpZ2luIGNhY2hlZENvZGVPcmlnaW47CkBA
IC0xMzIsMTEgKzEzMywxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBvcmlnaW4uaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAg
ICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKGlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICAgICAgaWYgKEhhbmRsZXJJbmZvKiBo
YW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4
VG9DaGVjaykpIHsKLSAgICAgICAgICAgICAgICAgICAgbGl2ZUF0Q2F0Y2hIZWFkLmZpbGwoZmFs
c2UpOworICAgICAgICAgICAgICAgICAgICBsaXZlQXRDYXRjaEhlYWQuY2xlYXJBbGwoKTsKIAog
ICAgICAgICAgICAgICAgICAgICBCeXRlY29kZUluZGV4IGNhdGNoQnl0ZWNvZGVJbmRleCA9IEJ5
dGVjb2RlSW5kZXgoaGFuZGxlci0+dGFyZ2V0KTsKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5mb3JBbGxMb2NhbHNBbmRUbXBzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbihjYXRjaEJ5dGVj
b2RlSW5kZXgsIGlubGluZUNhbGxGcmFtZSksIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBsaXZlQXRDYXRjaEhlYWQub3BlcmFuZChvcGVyYW5kKSA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNv
ZGUoQ29kZU9yaWdpbihjYXRjaEJ5dGVjb2RlSW5kZXgsIGlubGluZUNhbGxGcmFtZSksIFsmXSAo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVB
dENhdGNoSGVhZFtvcGVyYW5kLnRvTG9jYWwoKV0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICB9KTsKIAogICAgICAgICAgICAgICAgICAgICBjYWNoZWRIYW5kbGVyUmVzdWx0ID0gaGFuZGxl
cjsKQEAgLTE1NSwxMiArMTU2LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBjYWNo
ZWRIYW5kbGVyUmVzdWx0OwogICAgICAgICB9OwogCi0gICAgICAgIE9wZXJhbmRzPFZhcmlhYmxl
QWNjZXNzRGF0YSo+IGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEoT3BlcmFuZHNMaWtlLCBibG9jay0+
dmFyaWFibGVzQXRUYWlsLCBudWxscHRyKTsKKyAgICAgICAgT3BlcmFuZHM8VmFyaWFibGVBY2Nl
c3NEYXRhKj4gY3VycmVudEJsb2NrQWNjZXNzRGF0YShibG9jay0+dmFyaWFibGVzQXRUYWlsLm51
bWJlck9mQXJndW1lbnRzKCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMo
KSwgbnVsbHB0cik7CiAKICAgICAgICAgYXV0byBmbHVzaEV2ZXJ5dGhpbmcgPSBbJl0gKE5vZGVP
cmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBpbmRleCkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY3VycmVudEV4Y2VwdGlvbkhhbmRsZXIpOwotICAgICAgICAgICAgYXV0byBmbHVzaCA9IFsm
XSAoT3BlcmFuZCBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNBcmd1
bWVudCgpIHx8IGxpdmVBdENhdGNoSGVhZC5vcGVyYW5kKG9wZXJhbmQpKSB7CisgICAgICAgICAg
ICBhdXRvIGZsdXNoID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAg
ICAgICAgIGlmICgob3BlcmFuZC5pc0xvY2FsKCkgJiYgbGl2ZUF0Q2F0Y2hIZWFkW29wZXJhbmQu
dG9Mb2NhbCgpXSkgfHwgb3BlcmFuZC5pc0FyZ3VtZW50KCkpIHsKIAogICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoaXNWYWxpZEZsdXNoTG9jYXRpb24oYmxvY2ssIGluZGV4LCBvcGVyYW5kKSk7
CiAKQEAgLTE3Nyw4ICsxNzgsNiBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgbG9jYWwgPSAwOyBsb2NhbCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2Nh
bHMoKTsgbG9jYWwrKykKICAgICAgICAgICAgICAgICBmbHVzaCh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChsb2NhbCkpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB0bXAgPSAwOyB0bXAgPCBi
bG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mVG1wcygpOyArK3RtcCkKLSAgICAgICAgICAg
ICAgICBmbHVzaChPcGVyYW5kOjp0bXAodG1wKSk7CiAgICAgICAgICAgICBmbHVzaChWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkpOwogICAgICAgICB9Owog
CkBAIC0xOTMsOCArMTkyLDkgQEAgcHVibGljOgogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBpZiAoY3VycmVudEV4Y2VwdGlvbkhhbmRsZXIgJiYgKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwg
fHwgbm9kZS0+b3AoKSA9PSBTZXRBcmd1bWVudERlZmluaXRlbHkgfHwgbm9kZS0+b3AoKSA9PSBT
ZXRBcmd1bWVudE1heWJlKSkgewotICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5v
ZGUtPm9wZXJhbmQoKTsKLSAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkg
fHwgbGl2ZUF0Q2F0Y2hIZWFkLm9wZXJhbmQob3BlcmFuZCkpIHsKKyAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IG5vZGUtPmxvY2FsKCk7CisgICAgICAgICAgICAgICAg
aWYgKChvcGVyYW5kLmlzTG9jYWwoKSAmJiBsaXZlQXRDYXRjaEhlYWRbb3BlcmFuZC50b0xvY2Fs
KCldKSB8fCBvcGVyYW5kLmlzQXJndW1lbnQoKSkgeworCiAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChpc1ZhbGlkRmx1c2hMb2NhdGlvbihibG9jaywgbm9kZUluZGV4LCBvcGVyYW5kKSk7CiAK
ICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhLm9wZXJhbmQob3BlcmFuZCk7CkBAIC0yMDcsNyAr
MjA3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAobm9kZS0+
YWNjZXNzZXNTdGFjayhtX2dyYXBoKSkKLSAgICAgICAgICAgICAgICBjdXJyZW50QmxvY2tBY2Nl
c3NEYXRhLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOworICAgICAgICAgICAgICAgIGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFuZChub2Rl
LT5sb2NhbCgpKSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKGN1cnJlbnRFeGNlcHRpb25IYW5kbGVyKSB7CkBAIC0yMTYsNyArMjE2LDcgQEAg
cHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0gICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBuZXdW
YXJpYWJsZUFjY2Vzc0RhdGEoT3BlcmFuZCBvcGVyYW5kKQorICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogbmV3VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CiAgICAgICAgIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAK
aW5kZXggZmZmOTZiZmNmNjI5ZWI0ZDA1MmU3YjE0MjdiMmI2N2IwNTRjMWEwMy4uNzNhM2Q3NWI3
NjBiNTJiOTY3NjM3MTMzZDZhMGZlZmIwMGViZWQ4NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCkBAIC04NSw3ICs4NSw3
IEBAIHByaXZhdGU6CiAgICAgICAgIG1fc3RhdGUuZmlsbChFcG9jaCgpKTsKICAgICAgICAgbV9n
cmFwaC5mb3JBbGxMaXZlSW5CeXRlY29kZSgKICAgICAgICAgICAgIGJsb2NrLT50ZXJtaW5hbCgp
LT5vcmlnaW4uZm9yRXhpdCwKLSAgICAgICAgICAgIFsmXSAoT3BlcmFuZCByZWcpIHsKKyAgICAg
ICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgewogICAgICAgICAgICAgICAgIG1fc3Rh
dGUub3BlcmFuZChyZWcpID0gY3VycmVudEVwb2NoOwogICAgICAgICAgICAgfSk7CiAgICAgICAg
IApAQCAtOTksNyArOTksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChub2RlSW5kZXgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobm9kZS0+
b3AoKSA9PSBNb3ZIaW50KSB7Ci0gICAgICAgICAgICAgICAgRXBvY2ggbG9jYWxFcG9jaCA9IG1f
c3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSk7CisgICAgICAgICAgICAgICAg
RXBvY2ggbG9jYWxFcG9jaCA9IG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkp
OwogICAgICAgICAgICAgICAgIGlmIChERkdNb3ZIaW50UmVtb3ZhbFBoYXNlSW50ZXJuYWw6OnZl
cmJvc2UpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBBdCAiLCBub2RlLCAiOiBj
dXJyZW50ID0gIiwgY3VycmVudEVwb2NoLCAiLCBsb2NhbCA9ICIsIGxvY2FsRXBvY2gsICJcbiIp
OwogICAgICAgICAgICAgICAgIGlmICghbG9jYWxFcG9jaCB8fCBsb2NhbEVwb2NoID09IGN1cnJl
bnRFcG9jaCkgewpAQCAtMTA3LDcgKzEwNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkMSgpID0gRWRnZSgpOwogICAgICAgICAgICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX3N0YXRlLm9w
ZXJhbmQobm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpID0gRXBvY2goKTsKKyAgICAgICAgICAgICAg
ICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IEVwb2NoKCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtYXlFeGl0KG1fZ3JhcGgs
IG5vZGUpICE9IERvZXNOb3RFeGl0KQpAQCAtMTE2LDE1ICsxMTYsMTUgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGlmIChub2RlSW5kZXgpIHsKICAgICAgICAgICAgICAgICBmb3JBbGxLaWxsZWRP
cGVyYW5kcygKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgYmxvY2stPmF0KG5vZGVJbmRl
eCAtIDEpLCBub2RlLAotICAgICAgICAgICAgICAgICAgICBbJl0gKE9wZXJhbmQgb3BlcmFuZCkg
eworICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYSBiaXQgc2xvcHB5IC0gaXQg
bWlnaHQgY2xhaW0gdG8ga2lsbCBhIGxvY2FsIGV2ZW4gaWYKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGl0J3Mgc3RpbGwgbGl2ZSBhZnRlci4gV2UgbmVlZCB0byBwcm90ZWN0IGFnYWluc3Qg
dGhhdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIW1fc3RhdGUub3BlcmFuZChvcGVy
YW5kKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIW1fc3RhdGUub3BlcmFuZChyZWcp
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR01vdkhpbnRSZW1vdmFsUGhh
c2VJbnRlcm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICAgS2lsbGVkIG9wZXJhbmQgYXQgIiwgbm9kZSwgIjogIiwgb3BlcmFuZCwgIlxuIik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQob3BlcmFuZCkgPSBjdXJyZW50
RXBvY2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBv
cGVyYW5kIGF0ICIsIG5vZGUsICI6ICIsIHJlZywgIlxuIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX3N0YXRlLm9wZXJhbmQocmVnKSA9IGN1cnJlbnRFcG9jaDsKICAgICAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgKaW5kZXggNTE3YWYxMDAzYWZjZTZkMzVmNzE0NWRiYjY5NTFmMThjYzIyM2I2OC4u
NGJmZDNlNWE1MjEwMDUxMWE5ZTcyMzA4MzQ1YmRiOWMwYTA2ZmI3NiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgKQEAgLTI1MSwxMyArMjUxLDEzIEBAIHN0cnVjdCBTdGFja0FjY2Vz
c0RhdGEgewogICAgIHsKICAgICB9CiAgICAgCi0gICAgU3RhY2tBY2Nlc3NEYXRhKE9wZXJhbmQg
b3BlcmFuZCwgRmx1c2hGb3JtYXQgZm9ybWF0KQotICAgICAgICA6IG9wZXJhbmQob3BlcmFuZCkK
KyAgICBTdGFja0FjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBGbHVzaEZvcm1hdCBm
b3JtYXQpCisgICAgICAgIDogbG9jYWwobG9jYWwpCiAgICAgICAgICwgZm9ybWF0KGZvcm1hdCkK
ICAgICB7CiAgICAgfQogICAgIAotICAgIE9wZXJhbmQgb3BlcmFuZDsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgbG9jYWw7CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1hY2hpbmVMb2NhbDsKICAgICBGbHVz
aEZvcm1hdCBmb3JtYXQ7CiAgICAgCkBAIC05MTUsNyArOTE1LDYgQEAgcHVibGljOgogICAgICAg
ICBzd2l0Y2ggKG9wKCkpIHsKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAg
ICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6Ci0gICAgICAgIGNhc2UgVmFy
YXJnc0xlbmd0aDoKICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgY2FzZSBGb3J3
YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKQEAgLTkzNywxMSArOTM2LDkg
QEAgcHVibGljOgogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICAgICAgY2FzZSBHZXRNeUFy
Z3VtZW50QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsT3V0T2ZCb3VuZHM6
Ci0gICAgICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKLSAgICAgICAgICAgIHJldHVybiBjaGlsZDEo
KTsKICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJn
czoKLSAgICAgICAgICAgIHJldHVybiBjaGlsZDIoKTsKKyAgICAgICAgICAgIHJldHVybiBjaGls
ZDEoKTsKICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKICAgICAgICAgY2FzZSBDYWxsRm9yd2Fy
ZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKQEAgLTk4OSw5ICs5ODYs
OSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX29wSW5mby5hczxWYXJpYWJsZUFjY2Vzc0Rh
dGEqPigpLT5maW5kKCk7CiAgICAgfQogICAgIAotICAgIE9wZXJhbmQgb3BlcmFuZCgpCisgICAg
VmlydHVhbFJlZ2lzdGVyIGxvY2FsKCkKICAgICB7Ci0gICAgICAgIHJldHVybiB2YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+b3BlcmFuZCgpOworICAgICAgICByZXR1cm4gdmFyaWFibGVBY2Nlc3NEYXRh
KCktPmxvY2FsKCk7CiAgICAgfQogICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lTG9j
YWwoKQpAQCAtOTk5LDcgKzk5Niw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5tYWNoaW5lTG9jYWwoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBoYXNV
bmxpbmtlZE9wZXJhbmQoKQorICAgIGJvb2wgaGFzVW5saW5rZWRMb2NhbCgpCiAgICAgewogICAg
ICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoK
QEAgLTEwMTIsMTAgKzEwMDksMTAgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAot
ICAgIE9wZXJhbmQgdW5saW5rZWRPcGVyYW5kKCkKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdW5saW5r
ZWRMb2NhbCgpCiAgICAgewotICAgICAgICBBU1NFUlQoaGFzVW5saW5rZWRPcGVyYW5kKCkpOwot
ICAgICAgICByZXR1cm4gT3BlcmFuZDo6ZnJvbUJpdHMobV9vcEluZm8uYXM8dWludDY0X3Q+KCkp
OworICAgICAgICBBU1NFUlQoaGFzVW5saW5rZWRMb2NhbCgpKTsKKyAgICAgICAgcmV0dXJuIFZp
cnR1YWxSZWdpc3RlcihtX29wSW5mby5hczxpbnQzMl90PigpKTsKICAgICB9CiAgICAgCiAgICAg
Ym9vbCBoYXNTdGFja0FjY2Vzc0RhdGEoKQpAQCAtMTM2Niw3ICsxMzYzLDcgQEAgcHVibGljOgog
ICAgIAogICAgIGJvb2wgaGFzTG9hZFZhcmFyZ3NEYXRhKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBvcCgpID09IExvYWRWYXJhcmdzIHx8IG9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MgfHwgb3AoKSA9
PSBWYXJhcmdzTGVuZ3RoOworICAgICAgICByZXR1cm4gb3AoKSA9PSBMb2FkVmFyYXJncyB8fCBv
cCgpID09IEZvcndhcmRWYXJhcmdzOwogICAgIH0KICAgICAKICAgICBMb2FkVmFyYXJnc0RhdGEq
IGxvYWRWYXJhcmdzRGF0YSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgK
aW5kZXggN2M2ZDFiMmFmYzVhZmY0NzQ3NjgxMDNhNWUxM2QzYTIyMjZjYTZmYy4uYzA0N2M2ZTcx
ODI1OWFhOTVmNWQxM2FhYTg3MGY4MTcxNDYxY2NlYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaApAQCAtNzQsNyArNzQsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAgICAgbWFjcm8oR2V0TG9jYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKICAgICBtYWNybyhTZXRMb2NhbCwgMCkgXAogICAgIFwKLSAgICAvKiBUaGVzZSBh
cmUgdXNlZCBpbiBTU0EgZm9ybSB0byByZXByZXNlbnQgdG8gdHJhY2sgKi9cCiAgICAgbWFjcm8o
UHV0U3RhY2ssIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhLaWxsU3RhY2ssIE5vZGVN
dXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRTdGFjaywgTm9kZVJlc3VsdEpTKSBcCkBAIC0y
MDMsNyArMjAyLDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3Jv
KEdldEJ5VmFsV2l0aFRoaXMsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAg
ICBtYWNybyhHZXRNeUFyZ3VtZW50QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5kcywgTm9kZVJlc3Vs
dEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKFZhcmFyZ3NMZW5ndGgsIE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SW50MzIpIFwKICAgICBtYWNybyhMb2FkVmFyYXJncywg
Tm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEZvcndhcmRWYXJhcmdzLCBOb2RlTXVzdEdl
bmVyYXRlKSBcCiAgICAgbWFjcm8oUHV0QnlWYWxEaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlSGFzVmFyQXJncykgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKaW5kZXggZDBhOTQwNmYw
MjAyMzM1ZmIyMDk0ZmFjOWI0MTcxNzI4NTI5NTcwZC4uNzliYzc5NjgzMTEzMGMwMzdkNTQ3MGMw
ZTc5ZDViMGQ5OTU2MjYzZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCkBAIC0zNSw5ICsz
NSwxMSBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworbmFtZXNwYWNlIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2VJbnRl
cm5hbCB7CitzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworfQogCiBjbGFz
cyBPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlIDogcHVibGljIFBoYXNlIHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogcHVibGljOgogICAgIE9TUkF2YWls
YWJpbGl0eUFuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBo
LCAiT1NSIGF2YWlsYWJpbGl0eSBhbmFseXNpcyIpCkBAIC03Myw4ICs3NSw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGRhdGFMb2coIkxpdmU6ICIpOwogICAgICAgICAgICAgbV9ncmFwaC5mb3JB
bGxMaXZlSW5CeXRlY29kZSgKICAgICAgICAgICAgICAgICBibG9jay0+YXQoMCktPm9yaWdpbi5m
b3JFeGl0LAotICAgICAgICAgICAgICAgIFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2cob3BlcmFuZCwgIiAiKTsKKyAgICAgICAgICAgICAgICBbJl0g
KFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhyZWcs
ICIgIik7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBkYXRhTG9nTG4oIiIpOwog
ICAgICAgICB9OwpAQCAtODksNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYg
KCFibG9jaykKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICBpZiAoREZH
T1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUludGVybmFsOjp2ZXJib3NlKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2dMbigiQmVmb3JlIGNoYW5naW5nIEJsb2NrICMiLCBibG9jay0+
aW5kZXgpOwogICAgICAgICAgICAgICAgICAgICBkdW1wQXZhaWxhYmlsaXR5KGJsb2NrKTsKICAg
ICAgICAgICAgICAgICB9CkBAIC0xMDQsNyArMTA2LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbCA9IGNhbGN1bGF0b3IubV9hdmFpbGFi
aWxpdHk7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAKLSAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgIGlmIChERkdPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuKCJBZnRlciBjaGFuZ2luZyBCbG9jayAjIiwgYmxvY2stPmluZGV4KTsKICAgICAgICAg
ICAgICAgICAgICAgZHVtcEF2YWlsYWJpbGl0eShibG9jayk7CiAgICAgICAgICAgICAgICAgfQpA
QCAtMTE4LDcgKzEyMCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9j
ayogc3VjY2Vzc29yID0gYmxvY2stPnN1Y2Nlc3NvcihzdWNjZXNzb3JJbmRleCk7CiAgICAgICAg
ICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQucHJ1bmVCeUxp
dmVuZXNzKAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgc3VjY2Vzc29yLT5hdCgw
KS0+b3JpZ2luLmZvckV4aXQpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZUlu
dGVybmFsOjp2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkFm
dGVyIHBydW5pbmcgQmxvY2sgIyIsIHN1Y2Nlc3Nvci0+aW5kZXgpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgZHVtcEF2YWlsYWJpbGl0eShzdWNjZXNzb3IpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgZHVtcEJ5dGVjb2RlTGl2ZW5lc3NBdEhlYWQoc3VjY2Vzc29yKTsKQEAgLTIwNiwyOCAr
MjA4LDI4IEBAIHZvaWQgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9k
ZShOb2RlKiBub2RlKQogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgUHV0U3Rh
Y2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NE
YXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+b3Bl
cmFuZCkuc2V0Rmx1c2goZGF0YS0+Zmx1c2hlZEF0KCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0
eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPmxvY2FsKS5zZXRGbHVzaChkYXRhLT5mbHVzaGVkQXQo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBLaWxsU3RhY2s6
IHsKLSAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtl
ZE9wZXJhbmQoKSkuc2V0Rmx1c2goRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpKTsKKyAgICAg
ICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkp
LnNldEZsdXNoKEZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAogICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBk
YXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1f
bG9jYWxzLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkgPSBBdmFpbGFiaWxpdHkobm9kZSwgZGF0YS0+
Zmx1c2hlZEF0KCkpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRh
dGEtPmxvY2FsKSA9IEF2YWlsYWJpbGl0eShub2RlLCBkYXRhLT5mbHVzaGVkQXQoKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgTW92SGludDogewotICAgICAgICBtX2F2YWls
YWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3BlcmFuZCgpKS5zZXROb2Rl
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxz
Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKS5zZXROb2RlKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgWm9tYmllSGludDogewot
ICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkT3Bl
cmFuZCgpKS5zZXROb2RlVW5hdmFpbGFibGUoKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9s
b2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpLnNldE5vZGVVbmF2YWlsYWJsZSgp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI0MCwxOCArMjQyLDE1IEBAIHZvaWQgTG9j
YWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yOjpleGVjdXRlTm9kZShOb2RlKiBub2RlKQogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KLQotICAgIGNhc2UgVmFyYXJnc0xlbmd0aDog
ewotICAgICAgICBicmVhazsKLSAgICB9Ci0KKyAgICAgICAgCiAgICAgY2FzZSBMb2FkVmFyYXJn
czoKICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOiB7CiAgICAgICAgIExvYWRWYXJhcmdzRGF0YSog
ZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICBtX2F2YWlsYWJpbGl0eS5t
X2xvY2Fscy5vcGVyYW5kKGRhdGEtPmNvdW50KSA9IEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1
c2hlZEludDMyLCBkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAgICAgICAgbV9hdmFpbGFiaWxpdHku
bV9sb2NhbHMub3BlcmFuZChkYXRhLT5jb3VudCkgPQorICAgICAgICAgICAgQXZhaWxhYmlsaXR5
KEZsdXNoZWRBdChGbHVzaGVkSW50MzIsIGRhdGEtPm1hY2hpbmVDb3VudCkpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5saW1pdDsgaS0tOykgewotICAgICAgICAgICAgbV9hdmFp
bGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChkYXRhLT5zdGFydCArIGkpID0KLSAgICAgICAgICAg
ICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCBkYXRhLT5tYWNoaW5l
U3RhcnQgKyBpKSk7CisgICAgICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5k
KFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpKSA9CisgICAgICAgICAg
ICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgVmlydHVhbFJlZ2lz
dGVyKGRhdGEtPm1hY2hpbmVTdGFydC5vZmZzZXQoKSArIGkpKSk7CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CiAgICAgfQpAQCAtMjczLDIwICsyNzIsMjAgQEAgdm9pZCBMb2NhbE9TUkF2YWls
YWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKSB7CiAgICAgICAgICAgICAvLyBSZWNvcmQgaG93
IHRvIHJlYWQgZWFjaCBhcmd1bWVudCBhbmQgdGhlIGFyZ3VtZW50IGNvdW50LgogICAgICAgICAg
ICAgQXZhaWxhYmlsaXR5IGFyZ3VtZW50Q291bnQgPQotICAgICAgICAgICAgICAgIG1fYXZhaWxh
YmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykp
OworICAgICAgICAgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9o
ZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1bWVudENvdW50UExvYywgbm9kZSksIGFy
Z3VtZW50Q291bnQpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgY2FsbGVl
ID0gbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZCgKLSAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6
OmNhbGxlZSkpOworICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpOwogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9o
ZWFwLnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1bWVudHNDYWxsZWVQTG9jLCBub2RlKSwg
Y2FsbGVlKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOyArK2kpIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXA7IGkgPCBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMTsgKytpKSB7CiAgICAgICAg
ICAgICBBdmFpbGFiaWxpdHkgYXJndW1lbnQgPSBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVy
YW5kKAotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChpKSkpOworICAgICAgICAgICAg
ICAgIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zm
c2V0KGkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9hdmFpbGFiaWxpdHkubV9oZWFw
LnNldChQcm9tb3RlZEhlYXBMb2NhdGlvbihBcmd1bWVudFBMb2MsIG5vZGUsIGkpLCBhcmd1bWVu
dCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAK
aW5kZXggZWU1ZjdmM2Q2OGUyZWEwZWIxZGRlZjEzOWZmOTM5YjZhZDg5ZDkzOS4uNDQ5NzMwODM5
Yzk0NDUwNzI1NzFhNWIwYzdjOTRiODQzZTg5MGRjNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAKQEAgLTMyMiw3ICszMjIsNyBAQCB2b2lkKiBwcmVwYXJlT1NS
RW50cnkoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEJ5dGVjbwogICAgIAogICAgIC8vIDcpIEZpeCB0aGUgY2FsbCBmcmFtZSB0byBoYXZlIHRoZSBy
aWdodCBjb2RlIGJsb2NrLgogICAgIAotICAgICpiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKio+KHBp
dm90IC0gKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayArIDEpKSA9IGNvZGVCbG9jazsKKyAgICAq
Yml0d2lzZV9jYXN0PENvZGVCbG9jayoqPihwaXZvdCAtIDEgLSBDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spID0gY29kZUJsb2NrOwogICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkp
CiAgICAgICAgIGRhdGFMb2dGKCIgICAgT1NSIHJldHVybmluZyBkYXRhIGJ1ZmZlciAlcC5cbiIs
IHNjcmF0Y2gpOwpAQCAtMzgyLDEwICszODIsMTAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4
Y2VwdGlvbkhhbmRsZXJQdHJUYWc+IHByZXBhcmVDYXRjaE9TUkVudHJ5KFZNJiB2bSwgQ2FsbEYK
IAogICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoY2FsbEZyYW1lLT5ieXRlY29kZUluZGV4KCkpOwogICAgIEFTU0VSVChpbnN0cnVjdGlv
bi0+aXM8T3BDYXRjaD4oKSk7Ci0gICAgVmFsdWVQcm9maWxlQW5kVmlydHVhbFJlZ2lzdGVyQnVm
ZmVyKiBidWZmZXIgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKS5tZXRhZGF0YShiYXNlbGlu
ZUNvZGVCbG9jaykubV9idWZmZXI7CisgICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciog
YnVmZmVyID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2F0Y2g+KCkubWV0YWRhdGEoYmFzZWxpbmVDb2Rl
QmxvY2spLm1fYnVmZmVyOwogICAgIEpTVmFsdWUqIGRhdGFCdWZmZXIgPSByZWludGVycHJldF9j
YXN0PEpTVmFsdWUqPihkZmdDb21tb24tPmNhdGNoT1NSRW50cnlCdWZmZXItPmRhdGFCdWZmZXIo
KSk7CiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwotICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZh
bHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgIGJ1ZmZlci0+Zm9y
RWFjaChbJl0gKFZhbHVlUHJvZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKICAgICAgICAgaWYg
KCFWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQpLmlzTG9jYWwoKSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgZGF0YUJ1ZmZlcltpbmRleF0gPSBjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIocHJvZmlsZS5tX29wZXJhbmQpLmpzVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAK
aW5kZXggNjA5Njg2NjNiNjRjMmI2ODU0ZTQ2MTYxZjk0OTk0NjU3ZTFhZWZkNS4uZGM3NmJjYmFl
ZDQxZWVlMDYzZGZkYmVhODQ1MDY2NTUzZDBjYjRkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAK
QEAgLTEwMiwxMCArMTAyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGUgPSBwcmV2aW91c0hlYWQtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAg
ICAgICAgICAgbG9jYWxzW2xvY2FsXSA9IG5ld1Jvb3QtPmFwcGVuZE5vZGUoCiAgICAgICAgICAg
ICAgICAgbV9ncmFwaCwgdmFyaWFibGUtPnByZWRpY3Rpb24oKSwgRXh0cmFjdE9TUkVudHJ5TG9j
YWwsIG9yaWdpbiwKLSAgICAgICAgICAgICAgICBPcEluZm8odmFyaWFibGUtPm9wZXJhbmQoKS52
aXJ0dWFsUmVnaXN0ZXIoKSkpOworICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9j
YWwoKS5vZmZzZXQoKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBuZXdSb290LT5hcHBl
bmROb2RlKAotICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBNb3ZIaW50LCBvcmln
aW4sIE9wSW5mbyh2YXJpYWJsZS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3RlcigpKSwKKyAgICAg
ICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2luLCBPcEluZm8odmFy
aWFibGUtPmxvY2FsKCkub2Zmc2V0KCkpLAogICAgICAgICAgICAgICAgIEVkZ2UobG9jYWxzW2xv
Y2FsXSkpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQu
Y3BwCmluZGV4IDIzOWRmNTJhODI5MmEyYjM1Y2U2Zjc3MjU2OGZlN2NjOWM2ZDNhODMuLjFiOGUy
NzhlNGQ1ZWUxMmRhMDk2YzBlOTAxYThjZjQ5M2RmYjJmYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0LmNwcApAQCAtMzAsNyArMzAsNiBAQAogCiAjaW5jbHVkZSAiQXNz
ZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKLSNpbmNsdWRlICJD
aGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5o
IgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgpAQCAtNDgs
NiArNDcsODk1IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorLy8gUHJv
YmUgYmFzZWQgT1NSIEV4aXQuCisKK3VzaW5nIENQVVN0YXRlID0gUHJvYmU6OkNQVVN0YXRlOwor
dXNpbmcgQ29udGV4dCA9IFByb2JlOjpDb250ZXh0OwordXNpbmcgRnJhbWUgPSBQcm9iZTo6RnJh
bWU7CisKK3N0YXRpYyB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoUHJvYmU6OkNvbnRleHQm
LCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBjb25zdCBPU1JFeGl0QmFzZSYpOworc3Rh
dGljIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KFByb2JlOjpDb250ZXh0JiwgVk0mLCBDb2Rl
QmxvY2sqLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBPU1JFeGl0Jik7CitzdGF0aWMg
dm9pZCBwcmludE9TUkV4aXQoQ29udGV4dCYsIHVpbnQzMl90IG9zckV4aXRJbmRleCwgY29uc3Qg
T1NSRXhpdCYpOworCitzdGF0aWMgSlNWYWx1ZSBqc1ZhbHVlRm9yKENQVVN0YXRlJiBjcHUsIEpT
VmFsdWVTb3VyY2Ugc291cmNlKQoreworICAgIGlmIChzb3VyY2UuaXNBZGRyZXNzKCkpIHsKKyAg
ICAgICAgSlNWYWx1ZSByZXN1bHQ7CisgICAgICAgIHN0ZDo6bWVtY3B5KCZyZXN1bHQsIGNwdS5n
cHI8dWludDhfdCo+KHNvdXJjZS5iYXNlKCkpICsgc291cmNlLm9mZnNldCgpLCBzaXplb2YoSlNW
YWx1ZSkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoY3B1LmdwcjxFbmNvZGVkSlNWYWx1ZT4oc291
cmNlLmdwcigpKSk7CisjZWxzZQorICAgIGlmIChzb3VyY2UuaGFzS25vd25UYWcoKSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoc291cmNlLnRhZygpLCBjcHUuZ3ByPGludDMyX3Q+KHNvdXJjZS5w
YXlsb2FkR1BSKCkpKTsKKyAgICByZXR1cm4gSlNWYWx1ZShjcHUuZ3ByPGludDMyX3Q+KHNvdXJj
ZS50YWdHUFIoKSksIGNwdS5ncHI8aW50MzJfdD4oc291cmNlLnBheWxvYWRHUFIoKSkpOworI2Vu
ZGlmCit9CisKKyNpZiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKKworLy8g
QmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0UmVzdG9yZUNhbGxlZVNhdmVzRm9yKCkuCitz
dGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJs
b2NrKiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jayk7CisKKyAgICBjb25zdCBS
ZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVS
ZWdpc3RlcnMoKTsKKyAgICBSZWdpc3RlclNldCBkb250UmVzdG9yZVJlZ2lzdGVycyA9IFJlZ2lz
dGVyU2V0KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBS
cygpKTsKKyAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsK
KworICAgIFVDUFVSZWdpc3RlciogcGh5c2ljYWxTdGFja0ZyYW1lID0gY29udGV4dC5mcDxVQ1BV
UmVnaXN0ZXIqPigpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50
OyBpKyspIHsKKyAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGNhbGxlZVNhdmVzLT5h
dChpKTsKKyAgICAgICAgaWYgKGRvbnRSZXN0b3JlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgLy8gVGhlIGNhbGxlZSBzYXZlZCB2YWx1
ZXMgY29tZSBmcm9tIHRoZSBvcmlnaW5hbCBzdGFjaywgbm90IHRoZSByZWNvdmVyZWQgc3RhY2su
CisgICAgICAgIC8vIEhlbmNlLCB3ZSByZWFkIHRoZSB2YWx1ZXMgZGlyZWN0bHkgZnJvbSB0aGUg
cGh5c2ljYWwgc3RhY2sgbWVtb3J5IGluc3RlYWQgb2YKKyAgICAgICAgLy8gZ29pbmcgdGhyb3Vn
aCBjb250ZXh0LnN0YWNrKCkuCisgICAgICAgIEFTU0VSVCghKGVudHJ5Lm9mZnNldCgpICUgc2l6
ZW9mKFVDUFVSZWdpc3RlcikpKTsKKyAgICAgICAgY29udGV4dC5ncHIoZW50cnkucmVnKCkuZ3By
KCkpID0gcGh5c2ljYWxTdGFja0ZyYW1lW2VudHJ5Lm9mZnNldCgpIC8gc2l6ZW9mKFVDUFVSZWdp
c3RlcildOworICAgIH0KK30KKworLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2
ZUNhbGxlZVNhdmVzRm9yKCkuCitzdGF0aWMgdm9pZCBzYXZlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4
dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgYXV0byYgc3RhY2sgPSBj
b250ZXh0LnN0YWNrKCk7CisgICAgQVNTRVJUKGNvZGVCbG9jayk7CisKKyAgICBjb25zdCBSZWdp
c3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZXMgPSBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdp
c3RlcnMoKTsKKyAgICBSZWdpc3RlclNldCBkb250U2F2ZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0
KFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpLCBSZWdpc3RlclNldDo6YWxsRlBScygpKTsK
KyAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKKyAgICAgICAg
UmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKKyAgICAgICAgaWYg
KGRvbnRTYXZlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgc3RhY2suc2V0KGNvbnRleHQuZnAoKSwgZW50cnkub2Zmc2V0KCksIGNvbnRl
eHQuZ3ByPFVDUFVSZWdpc3Rlcj4oZW50cnkucmVnKCkuZ3ByKCkpKTsKKyAgICB9Cit9CisKKy8v
IEJhc2VkIG9uIEFzc2VtYmx5SGVscGVyczo6cmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKCkuCitzdGF0aWMgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZXNG
cm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYgY29udGV4dCkKK3sKKyAg
ICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOworCisgICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QqIGFsbENhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVyT2Zm
c2V0cygpOworICAgIFJlZ2lzdGVyU2V0IGRvbnRSZXN0b3JlUmVnaXN0ZXJzID0gUmVnaXN0ZXJT
ZXQ6OnN0YWNrUmVnaXN0ZXJzKCk7CisgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGFsbENh
bGxlZVNhdmVzLT5zaXplKCk7CisKKyAgICBWTUVudHJ5UmVjb3JkKiBlbnRyeVJlY29yZCA9IHZt
RW50cnlSZWNvcmQodm0udG9wRW50cnlGcmFtZSk7CisgICAgVUNQVVJlZ2lzdGVyKiBjYWxsZWVT
YXZlQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxVQ1BVUmVnaXN0ZXIqPihlbnRyeVJlY29yZC0+
Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZlcik7CisKKyAgICAvLyBSZXN0b3JlIGFsbCBjYWxsZWUg
c2F2ZXMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQ7IGkrKykg
eworICAgICAgICBSZWdpc3RlckF0T2Zmc2V0IGVudHJ5ID0gYWxsQ2FsbGVlU2F2ZXMtPmF0KGkp
OworICAgICAgICBpZiAoZG9udFJlc3RvcmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBzaXplX3QgdWludHB0ck9mZnNldCA9IGVudHJ5
Lm9mZnNldCgpIC8gc2l6ZW9mKFVDUFVSZWdpc3Rlcik7CisgICAgICAgIGlmIChlbnRyeS5yZWco
KS5pc0dQUigpKQorICAgICAgICAgICAgY29udGV4dC5ncHIoZW50cnkucmVnKCkuZ3ByKCkpID0g
Y2FsbGVlU2F2ZUJ1ZmZlclt1aW50cHRyT2Zmc2V0XTsKKyAgICAgICAgZWxzZSB7CisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGNvbnRleHQuZnByKGVudHJ5LnJlZygpLmZwcigpKSA9
IGJpdHdpc2VfY2FzdDxkb3VibGU+KGNhbGxlZVNhdmVCdWZmZXJbdWludHB0ck9mZnNldF0pOwor
I2Vsc2UKKyAgICAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTkzMjc1
PiBzdXBwb3J0IGNhbGxlZS1zYXZlZCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgb24gMzItYml0
IGFyY2hpdGVjdHVyZXMKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxw
ZXJzOjpjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCkuCitz
dGF0aWMgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVy
KENvbnRleHQmIGNvbnRleHQpCit7CisgICAgVk0mIHZtID0gKmNvbnRleHQuYXJnPFZNKj4oKTsK
KyAgICBhdXRvJiBzdGFjayA9IGNvbnRleHQuc3RhY2soKTsKKworICAgIFZNRW50cnlSZWNvcmQq
IGVudHJ5UmVjb3JkID0gdm1FbnRyeVJlY29yZCh2bS50b3BFbnRyeUZyYW1lKTsKKyAgICB2b2lk
KiBjYWxsZWVTYXZlQnVmZmVyID0gZW50cnlSZWNvcmQtPmNhbGxlZVNhdmVSZWdpc3RlcnNCdWZm
ZXI7CisKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCogYWxsQ2FsbGVlU2F2ZXMgPSBSZWdpc3Rl
clNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJPZmZzZXRzKCk7CisgICAgUmVnaXN0ZXJTZXQgZG9u
dENvcHlSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKTsKKyAgICB1bnNp
Z25lZCByZWdpc3RlckNvdW50ID0gYWxsQ2FsbGVlU2F2ZXMtPnNpemUoKTsKKworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKyspIHsKKyAgICAgICAgUmVnaXN0
ZXJBdE9mZnNldCBlbnRyeSA9IGFsbENhbGxlZVNhdmVzLT5hdChpKTsKKyAgICAgICAgaWYgKGRv
bnRDb3B5UmVnaXN0ZXJzLmdldChlbnRyeS5yZWcoKSkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgaWYgKGVudHJ5LnJlZygpLmlzR1BSKCkpCisgICAgICAgICAgICBzdGFjay5zZXQo
Y2FsbGVlU2F2ZUJ1ZmZlciwgZW50cnkub2Zmc2V0KCksIGNvbnRleHQuZ3ByPFVDUFVSZWdpc3Rl
cj4oZW50cnkucmVnKCkuZ3ByKCkpKTsKKyAgICAgICAgZWxzZSB7CisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICAgICAgICAgIHN0YWNrLnNldChjYWxsZWVTYXZlQnVmZmVyLCBlbnRyeS5vZmZzZXQo
KSwgY29udGV4dC5mcHI8VUNQVVJlZ2lzdGVyPihlbnRyeS5yZWcoKS5mcHIoKSkpOworI2Vsc2UK
KyAgICAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTkzMjc1PiBzdXBw
b3J0IGNhbGxlZS1zYXZlZCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgb24gMzItYml0IGFyY2hp
dGVjdHVyZXMKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5k
aWYKKyAgICAgICAgfQorICAgIH0KK30KKworLy8gQmFzZWQgb24gQXNzZW1ibHlIZWxwZXJzOjpl
bWl0U2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKCkuCitzdGF0aWMgdm9pZCBzYXZlT3JDb3B5Q2Fs
bGVlU2F2ZXNGb3IoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFZpcnR1
YWxSZWdpc3RlciBvZmZzZXRWaXJ0dWFsUmVnaXN0ZXIsIGJvb2wgd2FzQ2FsbGVkVmlhVGFpbENh
bGwpCit7CisgICAgRnJhbWUgZnJhbWUoY29udGV4dC5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOwor
ICAgIEFTU0VSVChjb2RlQmxvY2spOworCisgICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3Qq
IGNhbGxlZVNhdmVzID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgUmVn
aXN0ZXJTZXQgZG9udFNhdmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3Rh
Y2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKSk7CisgICAgdW5zaWduZWQgcmVn
aXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVzLT5zaXplKCk7CisKKyAgICBSZWdpc3RlclNldCBiYXNl
bGluZUNhbGxlZVNhdmVzID0gUmVnaXN0ZXJTZXQ6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlUmVn
aXN0ZXJzKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudDsg
aSsrKSB7CisgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQo
aSk7CisgICAgICAgIGlmIChkb250U2F2ZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgdWludHB0cl90IHNhdmVkUmVnaXN0ZXJWYWx1
ZTsKKworICAgICAgICBpZiAod2FzQ2FsbGVkVmlhVGFpbENhbGwgJiYgYmFzZWxpbmVDYWxsZWVT
YXZlcy5nZXQoZW50cnkucmVnKCkpKQorICAgICAgICAgICAgc2F2ZWRSZWdpc3RlclZhbHVlID0g
ZnJhbWUuZ2V0PHVpbnRwdHJfdD4oZW50cnkub2Zmc2V0KCkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzYXZlZFJlZ2lzdGVyVmFsdWUgPSBjb250ZXh0LmdwcihlbnRyeS5yZWcoKS5ncHIo
KSk7CisKKyAgICAgICAgZnJhbWUuc2V0KG9mZnNldFZpcnR1YWxSZWdpc3Rlci5vZmZzZXRJbkJ5
dGVzKCkgKyBlbnRyeS5vZmZzZXQoKSwgc2F2ZWRSZWdpc3RlclZhbHVlKTsKKyAgICB9Cit9Cisj
ZWxzZSAvLyBub3QgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCisKK3N0YXRp
YyB2b2lkIHJlc3RvcmVDYWxsZWVTYXZlc0ZvcihDb250ZXh0JiwgQ29kZUJsb2NrKikgeyB9Citz
dGF0aWMgdm9pZCBzYXZlQ2FsbGVlU2F2ZXNGb3IoQ29udGV4dCYsIENvZGVCbG9jayopIHsgfQor
c3RhdGljIHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKENvbnRleHQmKSB7IH0KK3N0YXRpYyB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoQ29udGV4dCYpIHsgfQorc3RhdGljIHZvaWQgc2F2ZU9y
Q29weUNhbGxlZVNhdmVzRm9yKENvbnRleHQmLCBDb2RlQmxvY2sqLCBWaXJ0dWFsUmVnaXN0ZXIs
IGJvb2wpIHsgfQorCisjZW5kaWYgLy8gTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMg
PiAwCisKK3N0YXRpYyBKU0NlbGwqIGNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQoQ29u
dGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIGludDMyX3QgYXJndW1lbnRDb3VudCkK
K3sKKyAgICBWTSYgdm0gPSAqY29udGV4dC5hcmc8Vk0qPigpOworCisgICAgQVNTRVJUKHZtLmhl
YXAuaXNEZWZlcnJlZCgpKTsKKworICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIGNv
ZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxG
cmFtZSk7CisKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBhcmd1bWVudENvdW50IC0gMTsKKyAgICB1
bnNpZ25lZCBjYXBhY2l0eSA9IHN0ZDo6bWF4KGxlbmd0aCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpIC0gMSkpOworICAgIERpcmVjdEFyZ3VtZW50cyog
cmVzdWx0ID0gRGlyZWN0QXJndW1lbnRzOjpjcmVhdGUoCisgICAgICAgIHZtLCBjb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLT5kaXJlY3RBcmd1bWVudHNTdHJ1Y3R1cmUoKSwgbGVuZ3RoLCBjYXBh
Y2l0eSk7CisKKyAgICByZXN1bHQtPnNldENhbGxlZSh2bSwgY2FsbGVlKTsKKworICAgIHZvaWQq
IGZyYW1lQmFzZSA9IGNvbnRleHQuZnA8UmVnaXN0ZXIqPigpICsgKGlubGluZUNhbGxGcmFtZSA/
IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsKKyAgICBGcmFtZSBmcmFtZShmcmFt
ZUJhc2UsIGNvbnRleHQuc3RhY2soKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3RoOyBp
LS07KQorICAgICAgICByZXN1bHQtPnNldEluZGV4UXVpY2tseSh2bSwgaSwgZnJhbWUuYXJndW1l
bnQoaSkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIEpTQ2VsbCogY3JlYXRl
Q2xvbmVkQXJndW1lbnRzRHVyaW5nRXhpdChDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEpTRnVuY3Rpb24qIGNh
bGxlZSwgaW50MzJfdCBhcmd1bWVudENvdW50KQoreworICAgIFZNJiB2bSA9ICpjb250ZXh0LmFy
ZzxWTSo+KCk7CisKKyAgICBBU1NFUlQodm0uaGVhcC5pc0RlZmVycmVkKCkpOworCisgICAgaWYg
KGlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tG
b3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKKworICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOworICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGFyZ3VtZW50Q291bnQgLSAxOworICAgIENsb25lZEFyZ3VtZW50cyogcmVzdWx0
ID0gQ2xvbmVkQXJndW1lbnRzOjpjcmVhdGVFbXB0eSgKKyAgICAgICAgdm0sIGdsb2JhbE9iamVj
dC0+Y2xvbmVkQXJndW1lbnRzU3RydWN0dXJlKCksIGNhbGxlZSwgbGVuZ3RoKTsKKworICAgIHZv
aWQqIGZyYW1lQmFzZSA9IGNvbnRleHQuZnA8UmVnaXN0ZXIqPigpICsgKGlubGluZUNhbGxGcmFt
ZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsKKyAgICBGcmFtZSBmcmFtZShm
cmFtZUJhc2UsIGNvbnRleHQuc3RhY2soKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbGVuZ3Ro
OyBpLS07KQorICAgICAgICByZXN1bHQtPnB1dERpcmVjdEluZGV4KGdsb2JhbE9iamVjdCwgaSwg
ZnJhbWUuYXJndW1lbnQoaSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lk
IGVtaXRSZXN0b3JlQXJndW1lbnRzKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayogY29kZUJs
b2NrLCBERkc6OkpJVENvZGUqIGRmZ0pJVENvZGUsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zl
cnk+JiBvcGVyYW5kcykKK3sKKyAgICBGcmFtZSBmcmFtZShjb250ZXh0LmZwKCksIGNvbnRleHQu
c3RhY2soKSk7CisKKyAgICBIYXNoTWFwPE1pbmlmaWVkSUQsIGludD4gYWxyZWFkeUFsbG9jYXRl
ZEFyZ3VtZW50czsgLy8gTWFwcyBwaGFudG9tIGFyZ3VtZW50cyBub2RlIElEIHRvIG9wZXJhbmQu
CisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytp
bmRleCkgeworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRz
W2luZGV4XTsKKyAgICAgICAgaW50IG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgo
aW5kZXgpOworCisgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXJlY3RBcmd1
bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQKKyAgICAgICAgICAgICYmIHJlY292ZXJ5LnRlY2huaXF1
ZSgpICE9IENsb25lZEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZCkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIE1pbmlmaWVkSUQgaWQgPSByZWNvdmVyeS5ub2RlSUQoKTsKKyAg
ICAgICAgYXV0byBpdGVyID0gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5maW5kKGlkKTsKKyAg
ICAgICAgaWYgKGl0ZXIgIT0gYWxyZWFkeUFsbG9jYXRlZEFyZ3VtZW50cy5lbmQoKSkgeworICAg
ICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBmcmFtZS5vcGVyYW5kKGl0ZXItPnZh
bHVlKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0KKyAgICAgICAgICAgIGRmZ0pJVENvZGUtPm1p
bmlmaWVkREZHLmF0KGlkKS0+aW5saW5lQ2FsbEZyYW1lKCk7CisKKyAgICAgICAgaW50IHN0YWNr
T2Zmc2V0OworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgc3RhY2tP
ZmZzZXQgPSBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzdGFja09mZnNldCA9IDA7CisKKyAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlOwor
ICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3Vy
ZUNhbGwpCisgICAgICAgICAgICBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZyYW1lLm9w
ZXJhbmQoc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpLmFzQ2VsbCgpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgY2FsbGVlID0ganNDYXN0PEpTRnVuY3Rpb24qPihpbmxp
bmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkpOworCisgICAg
ICAgIGludDMyX3QgYXJndW1lbnRDb3VudDsKKyAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUg
fHwgaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKKyAgICAgICAgICAgIGFyZ3VtZW50Q291
bnQgPSBmcmFtZS5vcGVyYW5kPGludDMyX3Q+KHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFBheWxvYWRPZmZzZXQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBhcmd1bWVudENvdW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpczsKKworICAgICAgICBKU0NlbGwqIGFyZ3VtZW50c09iamVjdDsKKyAg
ICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIERpcmVj
dEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKKyAgICAgICAgICAgIGFyZ3VtZW50c09iamVj
dCA9IGNyZWF0ZURpcmVjdEFyZ3VtZW50c0R1cmluZ0V4aXQoY29udGV4dCwgY29kZUJsb2NrLCBp
bmxpbmVDYWxsRnJhbWUsIGNhbGxlZSwgYXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDbG9uZWRBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6CisgICAg
ICAgICAgICBhcmd1bWVudHNPYmplY3QgPSBjcmVhdGVDbG9uZWRBcmd1bWVudHNEdXJpbmdFeGl0
KGNvbnRleHQsIGNvZGVCbG9jaywgaW5saW5lQ2FsbEZyYW1lLCBjYWxsZWUsIGFyZ3VtZW50Q291
bnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKGFyZ3VtZW50c09i
amVjdCkpOworCisgICAgICAgIGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHMuYWRkKGlkLCBvcGVy
YW5kKTsKKyAgICB9Cit9CisKKy8vIFRoZSBmb2xsb3dpbmcgaXMgYSBsaXN0IG9mIGV4dHJhIGlu
aXRpYWxpemF0aW9ucyB0aGF0IG5lZWQgdG8gYmUgZG9uZSBpbiBvcmRlcgorLy8gb2YgbW9zdCBs
aWtlbHkgbmVlZGVkIChsb3dlciBlbnVtIHZhbHVlKSB0byBsZWFzdCBsaWtlbHkgbmVlZGVkICho
aWdoZXIgZW51bSB2YWx1ZSkuCisvLyBFYWNoIGxldmVsIGluaXRpYWxpemF0aW9uIGluY2x1ZGVz
IHRoZSBwcmV2aW91cyBsb3dlciBlbnVtIHZhbHVlIChzZWUgdXNlIG9mIHRoZQorLy8gZXh0cmFJ
bml0aWFsaXphdGlvbkxldmVsIHZhbHVlIGJlbG93KS4KK2VudW0gY2xhc3MgRXh0cmFJbml0aWFs
aXphdGlvbkxldmVsIHsKKyAgICBOb25lLAorICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnksCisgICAg
VmFsdWVQcm9maWxlVXBkYXRlLAorICAgIEFycmF5UHJvZmlsZVVwZGF0ZSwKKyAgICBPdGhlcgor
fTsKKwordm9pZCBPU1JFeGl0OjpleGVjdXRlT1NSRXhpdChDb250ZXh0JiBjb250ZXh0KQorewor
ICAgIFZNJiB2bSA9ICpjb250ZXh0LmFyZzxWTSo+KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0
LmZwPENhbGxGcmFtZSo+KCk7CisgICAgQVNTRVJUKCZjYWxsRnJhbWUtPmRlcHJlY2F0ZWRWTSgp
ID09ICZ2bSk7CisgICAgYXV0byYgY3B1ID0gY29udGV4dC5jcHU7CisKKyAgICBpZiAodmFsaWRh
dGVERkdEb2VzR0MpIHsKKyAgICAgICAgLy8gV2UncmUgYWJvdXQgdG8gZXhpdCBvcHRpbWl6ZWQg
Y29kZS4gU28sIHRoZXJlJ3Mgbm8gbG9uZ2VyIGFueSBvcHRpbWl6ZWQKKyAgICAgICAgLy8gY29k
ZSBydW5uaW5nIHRoYXQgZXhwZWN0cyBubyBHQy4KKyAgICAgICAgdm0uaGVhcC5zZXRFeHBlY3RE
b2VzR0ModHJ1ZSk7CisgICAgfQorCisgICAgaWYgKHZtLmNhbGxGcmFtZUZvckNhdGNoKSB7Cisg
ICAgICAgIGNhbGxGcmFtZSA9IHZtLmNhbGxGcmFtZUZvckNhdGNoOworICAgICAgICBjb250ZXh0
LmZwKCkgPSBjYWxsRnJhbWU7CisgICAgfQorCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIEFTU0VSVChjb2RlQmxvY2spOworICAgIEFTU0VS
VChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpOworCisgICAgLy8gSXQn
cyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3
YXlzLCBkb2luZyBzbyB3b3VsZG4ndAorICAgIC8vIHJlYWxseSBiZSBwcm9maXRhYmxlLgorICAg
IERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKKworICAgIHVpbnQzMl90IGV4aXRJ
bmRleCA9IHZtLm9zckV4aXRJbmRleDsKKyAgICBERkc6OkpJVENvZGUqIGRmZ0pJVENvZGUgPSBj
b2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7CisgICAgT1NSRXhpdCYgZXhpdCA9IGRmZ0pJVENv
ZGUtPm9zckV4aXRbZXhpdEluZGV4XTsKKworICAgIEFTU0VSVCghdm0uY2FsbEZyYW1lRm9yQ2F0
Y2ggfHwgZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2luZCk7CisgICAgRVhDRVBUSU9OX0FTU0VS
VF9VTlVTRUQoc2NvcGUsICEhc2NvcGUuZXhjZXB0aW9uKCkgfHwgIWV4aXQuaXNFeGNlcHRpb25I
YW5kbGVyKCkpOworCisgICAgaWYgKFVOTElLRUxZKCFleGl0LmV4aXRTdGF0ZSkpIHsKKyAgICAg
ICAgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IEV4
dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6Tm9uZTsKKworICAgICAgICAvLyBXZSBvbmx5IG5lZWQg
dG8gZXhlY3V0ZSB0aGlzIGJsb2NrIG9uY2UgZm9yIGVhY2ggT1NSRXhpdCByZWNvcmQuIFRoZSBj
b21wdXRlZAorICAgICAgICAvLyByZXN1bHRzIHdpbGwgYmUgY2FjaGVkIGluIHRoZSBPU1JFeGl0
U3RhdGUgcmVjb3JkIGZvciB1c2Ugb2YgdGhlIHJlc3Qgb2YgdGhlCisgICAgICAgIC8vIGV4aXQg
cmFtcCBjb2RlLgorCisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2Rl
QmxvY2stPmJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAgICAgICAgQVNTRVJUKEpJVENvZGU6Omlz
QmFzZWxpbmVDb2RlKGJhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworICAgICAgICBT
cGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSA9IG51bGxwdHI7CisgICAgICAgIGlmIChleGl0
Lm1fcmVjb3ZlcnlJbmRleCAhPSBVSU5UX01BWCkgeworICAgICAgICAgICAgcmVjb3ZlcnkgPSAm
ZGZnSklUQ29kZS0+c3BlY3VsYXRpb25SZWNvdmVyeVtleGl0Lm1fcmVjb3ZlcnlJbmRleF07Cisg
ICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGQ6Om1heChleHRyYUluaXRp
YWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbDo6U3BlY3VsYXRpb25SZWNv
dmVyeSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoVU5MSUtFTFkoZXhpdC5tX2tpbmQgPT0g
R2VuZXJpY1Vud2luZCkpCisgICAgICAgICAgICBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBz
dGQ6Om1heChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwsIEV4dHJhSW5pdGlhbGl6YXRpb25MZXZl
bDo6T3RoZXIpOworCisgICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gbnVsbHB0
cjsKKyAgICAgICAgaWYgKCEhZXhpdC5tX2pzVmFsdWVTb3VyY2UpIHsKKyAgICAgICAgICAgIGlm
IChleGl0Lm1fdmFsdWVQcm9maWxlKQorICAgICAgICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRp
b25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFs
aXphdGlvbkxldmVsOjpWYWx1ZVByb2ZpbGVVcGRhdGUpOworICAgICAgICAgICAgaWYgKGV4aXQu
bV9raW5kID09IEJhZENhY2hlIHx8IGV4aXQubV9raW5kID09IEJhZEluZGV4aW5nVHlwZSkgewor
ICAgICAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2lu
Rm9yRXhpdFByb2ZpbGU7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVC
bG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29k
ZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2spOworICAgICAgICAgICAgICAgIGFycmF5UHJvZmls
ZSA9IHByb2ZpbGVkQ29kZUJsb2NrLT5nZXRBcnJheVByb2ZpbGUoY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KCkpOworICAgICAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpCisgICAgICAgICAg
ICAgICAgICAgIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0ZDo6bWF4KGV4dHJhSW5pdGlh
bGl6YXRpb25MZXZlbCwgRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpBcnJheVByb2ZpbGVVcGRh
dGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW50MzJfdCBhY3RpdmVU
aHJlc2hvbGQgPSBiYXNlbGluZUNvZGVCbG9jay0+YWRqdXN0ZWRDb3VudGVyVmFsdWUoT3B0aW9u
czo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKSk7CisgICAgICAgIGRvdWJs
ZSBhZGp1c3RlZFRocmVzaG9sZCA9IGFwcGx5TWVtb3J5VXNhZ2VIZXVyaXN0aWNzQW5kQ29udmVy
dFRvSW50KGFjdGl2ZVRocmVzaG9sZCwgYmFzZWxpbmVDb2RlQmxvY2spOworICAgICAgICBBU1NF
UlQoYWRqdXN0ZWRUaHJlc2hvbGQgPiAwKTsKKyAgICAgICAgYWRqdXN0ZWRUaHJlc2hvbGQgPSBC
YXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6OmNsaXBwZWRUaHJlc2hvbGQoY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSwgYWRqdXN0ZWRUaHJlc2hvbGQpOworCisgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrRm9yRXhpdCA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2Rl
QmxvY2soZXhpdC5tX2NvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKKyAgICAgICAgYm9v
bCBleGl0VG9MTEludCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBjb2RlQmxv
Y2tGb3JFeGl0LT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6SW50ZXJwcmV0ZXJUaHVuazsKKyAgICAg
ICAgdm9pZCoganVtcFRhcmdldDsKKyAgICAgICAgaWYgKGV4aXRUb0xMSW50KSB7CisgICAgICAg
ICAgICBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleCgpOworICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0
cnVjdGlvbiA9ICpjb2RlQmxvY2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZU9m
ZnNldCkucHRyKCk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gZGVzdGluYXRpb24gPSBMTEludDo6Z2V0Q29kZVB0cjxKU0VudHJ5UHRyVGFnPihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLmV4
ZWN1dGFibGVBZGRyZXNzKCk7ICAgIAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29u
c3QgSklUQ29kZU1hcCYgY29kZU1hcCA9IGNvZGVCbG9ja0ZvckV4aXQtPmppdENvZGVNYXAoKTsK
KyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlv
biA9IGNvZGVNYXAuZmluZChleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOworICAg
ICAgICAgICAgQVNTRVJUKGNvZGVMb2NhdGlvbik7CisgICAgICAgICAgICBqdW1wVGFyZ2V0ID0g
Y29kZUxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBDb21wdXRlIHRoZSB2YWx1ZSByZWNvdmVyaWVzLgorICAgICAgICBPcGVyYW5kczxWYWx1ZVJl
Y292ZXJ5PiBvcGVyYW5kczsKKyAgICAgICAgVmVjdG9yPFVuZGVmaW5lZE9wZXJhbmRTcGFuPiB1
bmRlZmluZWRPcGVyYW5kU3BhbnM7CisgICAgICAgIGRmZ0pJVENvZGUtPnZhcmlhYmxlRXZlbnRT
dHJlYW0ucmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiwgZGZnSklUQ29k
ZS0+bWluaWZpZWRERkcsIGV4aXQubV9zdHJlYW1JbmRleCwgb3BlcmFuZHMsICZ1bmRlZmluZWRP
cGVyYW5kU3BhbnMpOworICAgICAgICBwdHJkaWZmX3Qgc3RhY2tQb2ludGVyT2Zmc2V0ID0gLXN0
YXRpY19jYXN0PHB0cmRpZmZfdD4oY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5y
ZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0KSAqIHNpemVvZihSZWdpc3Rlcik7CisKKyAgICAg
ICAgZXhpdC5leGl0U3RhdGUgPSBhZG9wdFJlZihuZXcgT1NSRXhpdFN0YXRlKGV4aXQsIGNvZGVC
bG9jaywgYmFzZWxpbmVDb2RlQmxvY2ssIG9wZXJhbmRzLCBXVEZNb3ZlKHVuZGVmaW5lZE9wZXJh
bmRTcGFucyksIHJlY292ZXJ5LCBzdGFja1BvaW50ZXJPZmZzZXQsIGFjdGl2ZVRocmVzaG9sZCwg
YWRqdXN0ZWRUaHJlc2hvbGQsIGp1bXBUYXJnZXQsIGFycmF5UHJvZmlsZSwgZXhpdFRvTExJbnQp
KTsKKworICAgICAgICBpZiAoVU5MSUtFTFkodm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyICYmIGNv
ZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+Y29tcGlsYXRpb24pKSB7CisgICAgICAg
ICAgICBQcm9maWxlcjo6RGF0YWJhc2UmIGRhdGFiYXNlID0gKnZtLm1fcGVyQnl0ZWNvZGVQcm9m
aWxlcjsKKyAgICAgICAgICAgIFByb2ZpbGVyOjpDb21waWxhdGlvbiogY29tcGlsYXRpb24gPSBj
b2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmNvbXBpbGF0aW9uLmdldCgpOworCisg
ICAgICAgICAgICBQcm9maWxlcjo6T1NSRXhpdCogcHJvZmlsZXJFeGl0ID0gY29tcGlsYXRpb24t
PmFkZE9TUkV4aXQoCisgICAgICAgICAgICAgICAgZXhpdEluZGV4LCBQcm9maWxlcjo6T3JpZ2lu
U3RhY2soZGF0YWJhc2UsIGNvZGVCbG9jaywgZXhpdC5tX2NvZGVPcmlnaW4pLAorICAgICAgICAg
ICAgICAgIGV4aXQubV9raW5kLCBleGl0Lm1fa2luZCA9PSBVbmNvdW50YWJsZUludmFsaWRhdGlv
bik7CisgICAgICAgICAgICBleGl0LmV4aXRTdGF0ZS0+cHJvZmlsZXJFeGl0ID0gcHJvZmlsZXJF
eGl0OworICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgoZXh0
cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok90aGVyKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpwcmludEVhY2hPU1JF
eGl0KCkpKQorICAgICAgICAgICAgZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0gc3RkOjptYXgo
ZXh0cmFJbml0aWFsaXphdGlvbkxldmVsLCBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok90aGVy
KTsKKworICAgICAgICBleGl0LmV4aXRTdGF0ZS0+ZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID0g
ZXh0cmFJbml0aWFsaXphdGlvbkxldmVsOworCisgICAgICAgIGlmIChVTkxJS0VMWShPcHRpb25z
Ojp2ZXJib3NlT1NSKCkgfHwgT3B0aW9uczo6dmVyYm9zZURGR09TUkV4aXQoKSkpIHsKKyAgICAg
ICAgICAgIGRhdGFMb2dGKCJERkcgT1NSIGV4aXQgIyV1ICglcywgJXMpIGZyb20gJXMsIHdpdGgg
b3BlcmFuZHMgPSAlc1xuIiwKKyAgICAgICAgICAgICAgICBleGl0SW5kZXgsIHRvQ1N0cmluZyhl
eGl0Lm1fY29kZU9yaWdpbikuZGF0YSgpLAorICAgICAgICAgICAgICAgIGV4aXRLaW5kVG9TdHJp
bmcoZXhpdC5tX2tpbmQpLCB0b0NTdHJpbmcoKmNvZGVCbG9jaykuZGF0YSgpLAorICAgICAgICAg
ICAgICAgIHRvQ1N0cmluZyhpZ25vcmluZ0NvbnRleHQ8RHVtcENvbnRleHQ+KG9wZXJhbmRzKSku
ZGF0YSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIE9TUkV4aXRTdGF0ZSYgZXhpdFN0YXRl
ID0gKmV4aXQuZXhpdFN0YXRlLmdldCgpOworICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxv
Y2sgPSBleGl0U3RhdGUuYmFzZWxpbmVDb2RlQmxvY2s7CisgICAgQVNTRVJUKEpJVENvZGU6Omlz
QmFzZWxpbmVDb2RlKGJhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworICAgIE9wZXJh
bmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcyA9IGV4aXRTdGF0ZS5vcGVyYW5kczsKKyAgICBW
ZWN0b3I8VW5kZWZpbmVkT3BlcmFuZFNwYW4+JiB1bmRlZmluZWRPcGVyYW5kU3BhbnMgPSBleGl0
U3RhdGUudW5kZWZpbmVkT3BlcmFuZFNwYW5zOworCisgICAgY29udGV4dC5zcCgpID0gY29udGV4
dC5mcDx1aW50OF90Kj4oKSArIGV4aXRTdGF0ZS5zdGFja1BvaW50ZXJPZmZzZXQ7CisKKyAgICAv
LyBUaGUgb25seSByZWFzb24gZm9yIHVzaW5nIHRoaXMgZG8gd2hpbGUgbG9vcCBpcyBzbyB3ZSBj
YW4gYnJlYWsgb3V0IG1pZHdheSB3aGVuIGFwcHJvcHJpYXRlLgorICAgIGRvIHsKKyAgICAgICAg
YXV0byBleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPSBzdGF0aWNfY2FzdDxFeHRyYUluaXRpYWxp
emF0aW9uTGV2ZWw+KGV4aXRTdGF0ZS5leHRyYUluaXRpYWxpemF0aW9uTGV2ZWwpOworCisgICAg
ICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPT0gRXh0cmFJbml0aWFsaXphdGlvbkxl
dmVsOjpOb25lKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gQmVnaW4gZXh0cmEg
aW5pdGlsaXphdGlvbiBsZXZlbDogU3BlY3VsYXRpb25SZWNvdmVyeQorCisgICAgICAgIC8vIFdl
IG5lZWQgdG8gZG8gc3BlY3VsYXRpb24gcmVjb3ZlcnkgZmlyc3QgYmVjYXVzZSBhcnJheSBwcm9m
aWxpbmcgYW5kIHZhbHVlIHByb2ZpbGluZworICAgICAgICAvLyBtYXkgcmVseSBvbiBhIHZhbHVl
IHRoYXQgaXQgcmVjb3ZlcnMuIEhvd2V2ZXIsIHRoYXQgZG9lc24ndCBtZWFuIHRoYXQgaXQgaXMg
bGlrZWx5CisgICAgICAgIC8vIHRvIGhhdmUgYSByZWNvdmVyeSB2YWx1ZS4gU28sIHdlJ2xsIGRl
Y29yYXRlIGl0IGFzIFVOTElLRUxZLgorICAgICAgICBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNv
dmVyeSA9IGV4aXRTdGF0ZS5yZWNvdmVyeTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHJlY292ZXJ5
KSkgeworICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS0+dHlwZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIFNwZWN1bGF0aXZlQWRkOgorICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3Zlcnkt
PmRlc3QoKSkgPSBjcHUuZ3ByPHVpbnQzMl90PihyZWNvdmVyeS0+ZGVzdCgpKSAtIGNwdS5ncHI8
dWludDMyX3Q+KHJlY292ZXJ5LT5zcmMoKSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoIShjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID4+IDMyKSk7CisgICAg
ICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1iZXJU
YWc7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBT
cGVjdWxhdGl2ZUFkZFNlbGY6CisgICAgICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVz
dCgpKSA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihjcHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5LT5k
ZXN0KCkpID4+IDEpIF4gMHg4MDAwMDAwMFU7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoIShjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpID4+IDMyKSk7CisgICAg
ICAgICAgICAgICAgY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSB8PSBKU1ZhbHVlOjpOdW1iZXJU
YWc7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBT
cGVjdWxhdGl2ZUFkZEltbWVkaWF0ZToKKyAgICAgICAgICAgICAgICBjcHUuZ3ByKHJlY292ZXJ5
LT5kZXN0KCkpID0gKGNwdS5ncHI8dWludDMyX3Q+KHJlY292ZXJ5LT5kZXN0KCkpIC0gcmVjb3Zl
cnktPmltbWVkaWF0ZSgpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgICAgIEFT
U0VSVCghKGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPj4gMzIpKTsKKyAgICAgICAgICAgICAg
ICBjcHUuZ3ByKHJlY292ZXJ5LT5kZXN0KCkpIHw9IEpTVmFsdWU6Ok51bWJlclRhZzsKKyNlbmRp
ZgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEJvb2xlYW5TcGVj
dWxhdGlvbkNoZWNrOgorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgY3B1Lmdw
cihyZWNvdmVyeS0+ZGVzdCgpKSA9IGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgXiBKU1ZhbHVl
OjpWYWx1ZUZhbHNlOworI2VuZGlmCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA8PSBFeHRyYUluaXRp
YWxpemF0aW9uTGV2ZWw6OlNwZWN1bGF0aW9uUmVjb3ZlcnkpCisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAvLyBCZWdpbiBleHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBWYWx1ZVByb2Zp
bGVVcGRhdGUKKyAgICAgICAgSlNWYWx1ZSBwcm9maWxlZFZhbHVlOworICAgICAgICBpZiAoISFl
eGl0Lm1fanNWYWx1ZVNvdXJjZSkgeworICAgICAgICAgICAgcHJvZmlsZWRWYWx1ZSA9IGpzVmFs
dWVGb3IoY3B1LCBleGl0Lm1fanNWYWx1ZVNvdXJjZSk7CisgICAgICAgICAgICBpZiAoTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBwcm9maWxlID0gZXhpdC5tX3ZhbHVlUHJvZmlsZSkKKyAg
ICAgICAgICAgICAgICBwcm9maWxlLnJlcG9ydFZhbHVlKHByb2ZpbGVkVmFsdWUpOworICAgICAg
ICB9CisgICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwgPD0gRXh0cmFJbml0aWFs
aXphdGlvbkxldmVsOjpWYWx1ZVByb2ZpbGVVcGRhdGUpCisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAvLyBCZWdpbiBleHRyYSBpbml0aWxpemF0aW9uIGxldmVsOiBBcnJheVByb2ZpbGVV
cGRhdGUKKyAgICAgICAgaWYgKEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gZXhpdFN0YXRl
LmFycmF5UHJvZmlsZSkgeworICAgICAgICAgICAgQVNTRVJUKCEhZXhpdC5tX2pzVmFsdWVTb3Vy
Y2UpOworICAgICAgICAgICAgQVNTRVJUKGV4aXQubV9raW5kID09IEJhZENhY2hlIHx8IGV4aXQu
bV9raW5kID09IEJhZEluZGV4aW5nVHlwZSk7CisgICAgICAgICAgICBDb2RlQmxvY2sqIHByb2Zp
bGVkQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVC
bG9jayhleGl0Lm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLCBiYXNlbGluZUNvZGVCbG9jayk7
CisgICAgICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBwcm9maWxlZENv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmls
ZS5ieXRlY29kZUluZGV4KCkpLnB0cigpOworICAgICAgICAgICAgYm9vbCBkb1Byb2ZpbGUgPSAh
aW5zdHJ1Y3Rpb24tPmlzPE9wR2V0QnlJZD4oKSB8fCBpbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlk
PigpLm1ldGFkYXRhKHByb2ZpbGVkQ29kZUJsb2NrKS5tX21vZGVNZXRhZGF0YS5tb2RlID09IEdl
dEJ5SWRNb2RlOjpBcnJheUxlbmd0aDsKKyAgICAgICAgICAgIGlmIChkb1Byb2ZpbGUpIHsKKyAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHByb2ZpbGVkVmFsdWUuYXNDZWxs
KCktPnN0cnVjdHVyZSh2bSk7CisgICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5vYnNlcnZl
U3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgYXJyYXlQcm9maWxlLT5vYnNl
cnZlQXJyYXlNb2RlKGFycmF5TW9kZXNGcm9tU3RydWN0dXJlKHN0cnVjdHVyZSkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChleHRyYUluaXRpYWxpemF0aW9uTGV2ZWwg
PD0gRXh0cmFJbml0aWFsaXphdGlvbkxldmVsOjpBcnJheVByb2ZpbGVVcGRhdGUpCisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAvLyBCZWdpbiBFeHRyYSBpbml0aWxpemF0aW9uIGxldmVs
OiBPdGhlcgorICAgICAgICBpZiAoVU5MSUtFTFkoZXhpdC5tX2tpbmQgPT0gR2VuZXJpY1Vud2lu
ZCkpIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSBhY3RpbmcgYXMgYSBkZWZhY3RvIG9wX2NhdGNo
IGJlY2F1c2Ugd2UgYXJyaXZlIGhlcmUgZnJvbSBnZW5lcmljVW53aW5kKCkuCisgICAgICAgICAg
ICAvLyBTbywgd2UgbXVzdCByZXN0b3JlIG91ciBjYWxsIGZyYW1lIGFuZCBzdGFjayBwb2ludGVy
LgorICAgICAgICAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKGNvbnRleHQpOworICAgICAgICAgICAgQVNTRVJUKGNvbnRleHQuZnAoKSA9PSB2
bS5jYWxsRnJhbWVGb3JDYXRjaCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXhpdFN0YXRl
LnByb2ZpbGVyRXhpdCkKKyAgICAgICAgICAgIGV4aXRTdGF0ZS5wcm9maWxlckV4aXQtPmluY0Nv
dW50KCk7CisKKyAgICAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnByaW50RWFjaE9TUkV4aXQo
KSkpCisgICAgICAgICAgICBwcmludE9TUkV4aXQoY29udGV4dCwgdm0ub3NyRXhpdEluZGV4LCBl
eGl0KTsKKworICAgIH0gd2hpbGUgKGZhbHNlKTsgLy8gRW5kIGV4dHJhIGluaXRpYWxpemF0aW9u
LgorCisgICAgRnJhbWUgZnJhbWUoY3B1LmZwKCksIGNvbnRleHQuc3RhY2soKSk7CisgICAgQVNT
RVJUKCEoY29udGV4dC5mcDx1aW50cHRyX3Q+KCkgJiAweDcpKTsKKworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgQVNTRVJUKGNwdS5ncHI8aW50NjRfdD4oR1BSSW5mbzo6bnVtYmVyVGFnUmVnaXN0
ZXIpID09IEpTVmFsdWU6Ok51bWJlclRhZyk7CisgICAgQVNTRVJUKGNwdS5ncHI8aW50NjRfdD4o
R1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdpc3RlcikgPT0gSlNWYWx1ZTo6Tm90Q2VsbE1hc2spOwor
I2VuZGlmCisKKyAgICAvLyBEbyBhbGwgZGF0YSBmb3JtYXQgY29udmVyc2lvbnMgYW5kIHN0b3Jl
IHRoZSByZXN1bHRzIGludG8gdGhlIHN0YWNrLgorICAgIC8vIE5vdGU6IHdlIG5lZWQgdG8gcmVj
b3ZlciB2YWx1ZXMgYmVmb3JlIHJlc3RvcmluZyBjYWxsZWUgc2F2ZSByZWdpc3RlcnMgYmVsb3cK
KyAgICAvLyBiZWNhdXNlIHRoZSByZWNvdmVyeSBtYXkgcmVseSBvbiB2YWx1ZXMgaW4gc29tZSBv
ZiBjYWxsZWUgc2F2ZSByZWdpc3RlcnMuCisKKyAgICBpbnQgY2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzID0gc3RhdGljX2Nhc3Q8aW50PihiYXNlbGluZUNvZGVCbG9jay0+Y2FsbGVl
U2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpOworICAgIHNpemVfdCBudW1iZXJPZk9wZXJh
bmRzID0gb3BlcmFuZHMuc2l6ZSgpOworICAgIHNpemVfdCBudW1VbmRlZmluZWRPcGVyYW5kU3Bh
bnMgPSB1bmRlZmluZWRPcGVyYW5kU3BhbnMuc2l6ZSgpOworCisgICAgc2l6ZV90IG5leHRVbmRl
ZmluZWRTcGFuSW5kZXggPSAwOworICAgIHNpemVfdCBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4
ID0gbnVtYmVyT2ZPcGVyYW5kczsKKyAgICBpZiAobnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zKQor
ICAgICAgICBuZXh0VW5kZWZpbmVkT3BlcmFuZEluZGV4ID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5z
W25leHRVbmRlZmluZWRTcGFuSW5kZXhdLmZpcnN0SW5kZXg7CisKKyAgICBKU1ZhbHVlIHVuZGVm
aW5lZCA9IGpzVW5kZWZpbmVkKCk7CisgICAgZm9yIChzaXplX3Qgc3BhbkluZGV4ID0gMDsgc3Bh
bkluZGV4IDwgbnVtVW5kZWZpbmVkT3BlcmFuZFNwYW5zOyArK3NwYW5JbmRleCkgeworICAgICAg
ICBhdXRvJiBzcGFuID0gdW5kZWZpbmVkT3BlcmFuZFNwYW5zW3NwYW5JbmRleF07CisgICAgICAg
IGludCBmaXJzdE9mZnNldCA9IHNwYW4ubWluT2Zmc2V0OworICAgICAgICBpbnQgbGFzdE9mZnNl
dCA9IGZpcnN0T2Zmc2V0ICsgc3Bhbi5udW1iZXJPZlJlZ2lzdGVyczsKKworICAgICAgICBmb3Ig
KGludCBvZmZzZXQgPSBmaXJzdE9mZnNldDsgb2Zmc2V0IDwgbGFzdE9mZnNldDsgKytvZmZzZXQp
CisgICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9mZnNldCwgdW5kZWZpbmVkKTsKKyAgICB9
CisKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbnVtYmVyT2ZPcGVyYW5kczsg
KytpbmRleCkgeworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJh
bmRzW2luZGV4XTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmRzLnZpcnR1
YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKKworICAgICAgICBpZiAoVU5MSUtFTFkoaW5kZXgg
PT0gbmV4dFVuZGVmaW5lZE9wZXJhbmRJbmRleCkpIHsKKyAgICAgICAgICAgIGluZGV4ICs9IHVu
ZGVmaW5lZE9wZXJhbmRTcGFuc1tuZXh0VW5kZWZpbmVkU3BhbkluZGV4KytdLm51bWJlck9mUmVn
aXN0ZXJzIC0gMTsKKyAgICAgICAgICAgIGlmIChuZXh0VW5kZWZpbmVkU3BhbkluZGV4IDwgbnVt
VW5kZWZpbmVkT3BlcmFuZFNwYW5zKQorICAgICAgICAgICAgICAgIG5leHRVbmRlZmluZWRPcGVy
YW5kSW5kZXggPSB1bmRlZmluZWRPcGVyYW5kU3BhbnNbbmV4dFVuZGVmaW5lZFNwYW5JbmRleF0u
Zmlyc3RJbmRleDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBuZXh0VW5kZWZp
bmVkT3BlcmFuZEluZGV4ID0gbnVtYmVyT2ZPcGVyYW5kczsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwo
KSA8IGNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycykKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGludCBvcGVyYW5kID0gcmVnLm9mZnNldCgpOworCisgICAgICAgIHN3
aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpT
U3RhY2s6CisgICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNhbGxGcmFtZS0+
cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSkuYXNhblVuc2FmZUpTVmFsdWUoKSk7CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEluRlBSOgorICAgICAgICAgICAgZnJhbWUu
c2V0T3BlcmFuZChvcGVyYW5kLCBjcHUuZnByPEpTVmFsdWU+KHJlY292ZXJ5LmZwcigpKSk7Cisg
ICAgICAgICAgICBicmVhazsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGNhc2UgSW5H
UFI6CisgICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIGNwdS5ncHI8SlNWYWx1
ZT4ocmVjb3ZlcnkuZ3ByKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworI2Vsc2UKKyAgICAgICAg
Y2FzZSBJblBhaXI6CisgICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFs
dWUoY3B1LmdwcjxpbnQzMl90PihyZWNvdmVyeS50YWdHUFIoKSksIGNwdS5ncHI8aW50MzJfdD4o
cmVjb3ZlcnkucGF5bG9hZEdQUigpKSkpOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKwor
ICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6CisgICAgICAgICAgICBmcmFtZS5zZXRPcGVy
YW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxKU0NlbGwqPihyZWNvdmVyeS5ncHIoKSkpKTsK
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFj
azoKKyAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjYWxsRnJh
bWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJveGVkQ2VsbCgp
KSk7CisgICAgICAgICAgICBicmVhazsKKworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAg
IGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKKyAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQo
b3BlcmFuZCwganNCb29sZWFuKGNwdS5ncHI8Ym9vbD4ocmVjb3ZlcnkuZ3ByKCkpKSk7CisgICAg
ICAgICAgICBicmVhazsKKyNlbmRpZgorCisgICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZElu
SlNTdGFjazoKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFu
ZChvcGVyYW5kLCBjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5V
bnNhZmVKU1ZhbHVlKCkpOworI2Vsc2UKKyAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3Bl
cmFuZCwganNCb29sZWFuKGNhbGxGcmFtZS0+cihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSku
YXNhblVuc2FmZUpTVmFsdWUoKS5wYXlsb2FkKCkpKTsKKyNlbmRpZgorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgICAgIGZyYW1l
LnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1ZShjcHUuZ3ByPGludDMyX3Q+KHJlY292ZXJ5Lmdw
cigpKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNl
ZEluSlNTdGFjazoKKyAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgSlNWYWx1
ZShjYWxsRnJhbWUtPnIocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLmFzYW5VbnNhZmVVbmJv
eGVkSW50MzIoKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgICAgICBjYXNlIFVuYm94ZWRJbnQ1MkluR1BSOgorICAgICAgICAgICAgZnJhbWUuc2V0T3Bl
cmFuZChvcGVyYW5kLCBKU1ZhbHVlKGNwdS5ncHI8aW50NjRfdD4ocmVjb3ZlcnkuZ3ByKCkpID4+
IEpTVmFsdWU6OmludDUyU2hpZnRBbW91bnQpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgSW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdp
c3RlcigpKS5hc2FuVW5zYWZlVW5ib3hlZEludDUyKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgVW5ib3hlZFN0cmljdEludDUySW5HUFI6CisgICAgICAgICAgICBmcmFt
ZS5zZXRPcGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoY3B1LmdwcjxpbnQ2NF90PihyZWNvdmVyeS5n
cHIoKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU3RyaWN0SW50NTJE
aXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKG9wZXJhbmQs
IEpTVmFsdWUoY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5z
YWZlVW5ib3hlZFN0cmljdEludDUyKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisK
KyAgICAgICAgY2FzZSBVbmJveGVkRG91YmxlSW5GUFI6CisgICAgICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kKG9wZXJhbmQsIEpTVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHB1cmlmeU5h
TihjcHUuZnByKHJlY292ZXJ5LmZwcigpKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICAgICAgZnJhbWUuc2V0
T3BlcmFuZChvcGVyYW5kLCBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCBwdXJpZnlO
YU4oY2FsbEZyYW1lLT5yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS5hc2FuVW5zYWZlVW5i
b3hlZERvdWJsZSgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDb25z
dGFudDoKKyAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQob3BlcmFuZCwgcmVjb3ZlcnkuY29u
c3RhbnQoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIERpcmVjdEFyZ3Vt
ZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKKyAgICAgICAgY2FzZSBDbG9uZWRBcmd1bWVudHNUaGF0
V2VyZU5vdENyZWF0ZWQ6CisgICAgICAgICAgICAvLyBEb24ndCBkbyB0aGlzLCB5ZXQuCisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gUmVzdG9yZSB0aGUgREZHIGNhbGxlZSBzYXZlcyBhbmQgdGhlbiBzYXZlIHRo
ZSBvbmVzIHRoZSBiYXNlbGluZSBKSVQgdXNlcy4KKyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGb3Io
Y29udGV4dCwgY29kZUJsb2NrKTsKKyAgICBzYXZlQ2FsbGVlU2F2ZXNGb3IoY29udGV4dCwgYmFz
ZWxpbmVDb2RlQmxvY2spOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBjcHUuZ3ByKEdQUklu
Zm86Om51bWJlclRhZ1JlZ2lzdGVyKSA9IHN0YXRpY19jYXN0PEpTQzo6VUNQVVJlZ2lzdGVyPihK
U1ZhbHVlOjpOdW1iZXJUYWcpOworICAgIGNwdS5ncHIoR1BSSW5mbzo6bm90Q2VsbE1hc2tSZWdp
c3RlcikgPSBzdGF0aWNfY2FzdDxKU0M6OlVDUFVSZWdpc3Rlcj4oSlNWYWx1ZTo6Tm90Q2VsbE1h
c2spOworI2VuZGlmCisKKyAgICBpZiAoZXhpdC5pc0V4Y2VwdGlvbkhhbmRsZXIoKSkKKyAgICAg
ICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihjb250ZXh0
KTsKKworICAgIC8vIE5vdyB0aGF0IHRoaW5ncyBvbiB0aGUgc3RhY2sgYXJlIHJlY292ZXJlZCwg
ZG8gdGhlIGFyZ3VtZW50cyByZWNvdmVyeS4gV2UgYXNzdW1lIHRoYXQgYXJndW1lbnRzCisgICAg
Ly8gcmVjb3ZlcmllcyBkb24ndCByZWN1cnNpdmVseSByZWZlciB0byBlYWNoIG90aGVyLiBCdXQs
IHdlIGRvbid0IHRyeSB0byBhc3N1bWUgdGhhdCB0aGV5IG9ubHkKKyAgICAvLyByZWZlciB0byBj
ZXJ0YWluIHJhbmdlcyBvZiBsb2NhbHMuIEhlbmNlIHdoeSB3ZSBuZWVkIHRvIGRvIHRoaXMgaGVy
ZSwgb25jZSB0aGUgc3RhY2sgaXMgc2Vuc2libGUuCisgICAgLy8gTm90ZSB0aGF0IHdlIGFsc28g
cm91Z2hseSBhc3N1bWUgdGhhdCB0aGUgYXJndW1lbnRzIG1pZ2h0IHN0aWxsIGJlIG1hdGVyaWFs
aXplZCBvdXRzaWRlIG9mIGl0cworICAgIC8vIGlubGluZSBjYWxsIGZyYW1lIHNjb3BlIC0gYnV0
IGZvciBub3cgdGhlIERGRyB3b3VsZG4ndCBkbyB0aGF0LgorCisgICAgREZHOjplbWl0UmVzdG9y
ZUFyZ3VtZW50cyhjb250ZXh0LCBjb2RlQmxvY2ssIGRmZ0pJVENvZGUsIG9wZXJhbmRzKTsKKwor
ICAgIC8vIEFkanVzdCB0aGUgb2xkIEpJVCdzIGV4ZWN1dGUgY291bnRlci4gU2luY2Ugd2UgYXJl
IGV4aXRpbmcgT1NSLCB3ZSBrbm93CisgICAgLy8gdGhhdCBhbGwgbmV3IGNhbGxzIGludG8gdGhp
cyBjb2RlIHdpbGwgZ28gdG8gdGhlIG5ldyBKSVQsIHNvIHRoZSBleGVjdXRlCisgICAgLy8gY291
bnRlciBvbmx5IGFmZmVjdHMgY2FsbCBmcmFtZXMgdGhhdCBwZXJmb3JtZWQgT1NSIGV4aXQgYW5k
IGNhbGwgZnJhbWVzCisgICAgLy8gdGhhdCB3ZXJlIHN0aWxsIGV4ZWN1dGluZyB0aGUgb2xkIEpJ
VCBhdCB0aGUgdGltZSBvZiBhbm90aGVyIGNhbGwgZnJhbWUncworICAgIC8vIE9TUiBleGl0LiBX
ZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKKyAgICAvLworICAg
IC8vIChhKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBnZXRzIGEgY2hhbmNlIHRvIHJl
ZW50ZXIgb3B0aW1pemVkCisgICAgLy8gICAgIGNvZGUgZXZlbnR1YWxseSwgc2luY2Ugb3B0aW1p
emVkIGNvZGUgaXMgZmFzdGVyLiBCdXQgd2UgZG9uJ3QKKyAgICAvLyAgICAgd2FudCB0byBkbyBz
dWNoIHJlZW50ZXJ5IHRvbyBhZ2dyZXNzaXZlbHkgKHNlZSAoYykgYmVsb3cpLgorICAgIC8vCisg
ICAgLy8gKGIpIElmIHRoZXJlIGlzIGNvZGUgb24gdGhlIGNhbGwgc3RhY2sgdGhhdCBpcyBzdGls
bCBydW5uaW5nIHRoZSBvbGQKKyAgICAvLyAgICAgSklUJ3MgY29kZSBhbmQgaGFzIG5ldmVyIE9T
UidkLCB0aGVuIGl0IHNob3VsZCBnZXQgYSBjaGFuY2UgdG8KKyAgICAvLyAgICAgcGVyZm9ybSBP
U1IgZW50cnkgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGV4aXRlZC4KKyAgICAvLworICAg
IC8vIChjKSBDb2RlIHRoZSBwZXJmb3JtcyBhbiBPU1IgZXhpdCBzaG91bGQgbm90IGltbWVkaWF0
ZWx5IHJldHJ5IE9TUgorICAgIC8vICAgICBlbnRyeSwgc2luY2UgYm90aCBmb3JtcyBvZiBPU1Ig
YXJlIGV4cGVuc2l2ZS4gT1NSIGVudHJ5IGlzCisgICAgLy8gICAgIHBhcnRpY3VsYXJseSBleHBl
bnNpdmUuCisgICAgLy8KKyAgICAvLyAoZCkgRnJlcXVlbnQgT1NSIGZhaWx1cmVzLCBldmVuIHRo
b3NlIHRoYXQgZG8gbm90IHJlc3VsdCBpbiB0aGUgY29kZQorICAgIC8vICAgICBydW5uaW5nIGlu
IGEgaG90IGxvb3AsIHJlc3VsdCBpbiByZWNvbXBpbGF0aW9uIGdldHRpbmcgdHJpZ2dlcmVkLgor
ICAgIC8vCisgICAgLy8gVG8gZW5zdXJlIChjKSwgd2UnZCBsaWtlIHRvIHNldCB0aGUgZXhlY3V0
ZSBjb3VudGVyIHRvCisgICAgLy8gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgp
LiBUaGlzIHNlZW1zIGxpa2UgaXQgd291bGQgZW5kYW5nZXIKKyAgICAvLyAoYSkgYW5kIChiKSwg
c2luY2UgdGhlbiBldmVyeSBPU1IgZXhpdCB3b3VsZCBkZWxheSB0aGUgb3Bwb3J0dW5pdHkgZm9y
CisgICAgLy8gZXZlcnkgY2FsbCBmcmFtZSB0byBwZXJmb3JtIE9TUiBlbnRyeS4gRXNzZW50aWFs
bHksIGlmIE9TUiBleGl0IGhhcHBlbnMKKyAgICAvLyBmcmVxdWVudGx5IGFuZCB0aGUgZnVuY3Rp
b24gaGFzIGZldyBsb29wcywgdGhlbiB0aGUgY291bnRlciB3aWxsIG5ldmVyCisgICAgLy8gYmVj
b21lIG5vbi1uZWdhdGl2ZSBhbmQgT1NSIGVudHJ5IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkLiBP
U1IgZW50cnkKKyAgICAvLyB3aWxsIG9ubHkgaGFwcGVuIGlmIGEgbG9vcCBnZXRzIGhvdCBpbiB0
aGUgb2xkIEpJVCwgd2hpY2ggZG9lcyBhIHByZXR0eQorICAgIC8vIGdvb2Qgam9iIG9mIGVuc3Vy
aW5nIChhKSBhbmQgKGIpLiBCdXQgdGhhdCBkb2Vzbid0IHRha2UgY2FyZSBvZiAoZCksCisgICAg
Ly8gc2luY2UgZWFjaCBzcGVjdWxhdGlvbiBmYWlsdXJlIHdvdWxkIHJlc2V0IHRoZSBleGVjdXRl
IGNvdW50ZXIuCisgICAgLy8gU28gd2UgY2hlY2sgaGVyZSBpZiB0aGUgbnVtYmVyIG9mIHNwZWN1
bGF0aW9uIGZhaWx1cmVzIGlzIHNpZ25pZmljYW50bHkKKyAgICAvLyBsYXJnZXIgdGhhbiB0aGUg
bnVtYmVyIG9mIHN1Y2Nlc3NlcyAod2Ugd2FudCA5MCUgc3VjY2VzcyByYXRlKSwgYW5kIGlmCisg
ICAgLy8gdGhlcmUgaGF2ZSBiZWVuIGEgbGFyZ2UgZW5vdWdoIG51bWJlciBvZiBmYWlsdXJlcy4g
SWYgc28sIHdlIHNldCB0aGUKKyAgICAvLyBjb3VudGVyIHRvIDA7IG90aGVyd2lzZSB3ZSBzZXQg
dGhlIGNvdW50ZXIgdG8KKyAgICAvLyBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVw
KCkuCisKKyAgICBpZiAoVU5MSUtFTFkoY29kZUJsb2NrLT51cGRhdGVPU1JFeGl0Q291bnRlckFu
ZENoZWNrSWZOZWVkVG9SZW9wdGltaXplKGV4aXRTdGF0ZSkgPT0gQ29kZUJsb2NrOjpPcHRpbWl6
ZUFjdGlvbjo6UmVvcHRpbWl6ZU5vdykpCisgICAgICAgIHRyaWdnZXJSZW9wdGltaXphdGlvbk5v
dyhiYXNlbGluZUNvZGVCbG9jaywgY29kZUJsb2NrLCAmZXhpdCk7CisKKyAgICByZWlmeUlubGlu
ZWRDYWxsRnJhbWVzKGNvbnRleHQsIGJhc2VsaW5lQ29kZUJsb2NrLCBleGl0KTsKKyAgICBhZGp1
c3RBbmRKdW1wVG9UYXJnZXQoY29udGV4dCwgdm0sIGNvZGVCbG9jaywgYmFzZWxpbmVDb2RlQmxv
Y2ssIGV4aXQpOworfQorCitzdGF0aWMgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENvbnRl
eHQmIGNvbnRleHQsIENvZGVCbG9jayogb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2ssIGNvbnN0
IE9TUkV4aXRCYXNlJiBleGl0KQoreworICAgIGF1dG8mIGNwdSA9IGNvbnRleHQuY3B1OworICAg
IEZyYW1lIGZyYW1lKGNwdS5mcCgpLCBjb250ZXh0LnN0YWNrKCkpOworCisgICAgLy8gRklYTUU6
IFdlIHNob3VsZG4ndCBsZWF2ZSBob2xlcyBvbiB0aGUgc3RhY2sgd2hlbiBwZXJmb3JtaW5nIGFu
IE9TUiBleGl0CisgICAgLy8gaW4gcHJlc2VuY2Ugb2YgaW5saW5lZCB0YWlsIGNhbGxzLgorICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1MTEKKyAgICBB
U1NFUlQoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUob3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2st
PmppdFR5cGUoKSkpOworICAgIGZyYW1lLnNldE9wZXJhbmQ8Q29kZUJsb2NrKj4oQ2FsbEZyYW1l
U2xvdDo6Y29kZUJsb2NrLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7CisKKyAgICBjb25z
dCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOworICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1f
Y29kZU9yaWdpbjsgY29kZU9yaWdpbiAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKTsg
Y29kZU9yaWdpbiA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lw
cGluZ1RhaWxDYWxscygpKSB7CisgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7CisgICAgICAgIENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5l
Q29kZUJsb2NrKCpjb2RlT3JpZ2luLCBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jayk7CisgICAg
ICAgIElubGluZUNhbGxGcmFtZTo6S2luZCB0cnVlQ2FsbGVyQ2FsbEtpbmQ7CisgICAgICAgIENv
ZGVPcmlnaW4qIHRydWVDYWxsZXIgPSBpbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5n
VGFpbENhbGxzKCZ0cnVlQ2FsbGVyQ2FsbEtpbmQpOworICAgICAgICB2b2lkKiBjYWxsZXJGcmFt
ZSA9IGNwdS5mcCgpOworCisgICAgICAgIGJvb2wgY2FsbGVySXNMTEludCA9IGZhbHNlOworCisg
ICAgICAgIGlmICghdHJ1ZUNhbGxlcikgeworICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxG
cmFtZS0+aXNUYWlsKCkpOworICAgICAgICAgICAgdm9pZCogcmV0dXJuUEMgPSBmcmFtZS5nZXQ8
dm9pZCo+KENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSk7CisjaWYgQ1BVKEFSTTY0RSkKKyAg
ICAgICAgICAgIHZvaWQqIG9sZEVudHJ5U1AgPSBjcHUuZnA8dWludDhfdCo+KCkgKyBzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQyk7CisgICAgICAgICAgICB2b2lkKiBuZXdFbnRyeVNQID0gY3B1LmZw
PHVpbnQ4X3QqPigpICsgaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpICsgc2l6ZW9m
KHZvaWQqKTsKKyAgICAgICAgICAgIHJldHVyblBDID0gcmV0YWdDb2RlUHRyKHJldHVyblBDLCBi
aXR3aXNlX2Nhc3Q8UHRyVGFnPihvbGRFbnRyeVNQKSwgYml0d2lzZV9jYXN0PFB0clRhZz4obmV3
RW50cnlTUCkpOworI2VuZGlmCisgICAgICAgICAgICBmcmFtZS5zZXQ8dm9pZCo+KGlubGluZUNh
bGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSwgcmV0dXJuUEMpOworICAgICAgICAgICAgY2FsbGVy
RnJhbWUgPSBmcmFtZS5nZXQ8dm9pZCo+KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJs
b2NrRm9yQ2FsbGVyID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVC
bG9jaygqdHJ1ZUNhbGxlciwgb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2spOworICAgICAgICAg
ICAgQnl0ZWNvZGVJbmRleCBjYWxsQnl0ZWNvZGVJbmRleCA9IHRydWVDYWxsZXItPmJ5dGVjb2Rl
SW5kZXgoKTsKKyAgICAgICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjYWxsZXJSZXR1cm5QQyhi
YXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciwgY2FsbEJ5dGVjb2RlSW5kZXgsIHRydWVDYWxsZXJD
YWxsS2luZCwgY2FsbGVySXNMTEludCkudW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpOworCisg
ICAgICAgICAgICBpZiAodHJ1ZUNhbGxlci0+aW5saW5lQ2FsbEZyYW1lKCkpCisgICAgICAgICAg
ICAgICAgY2FsbGVyRnJhbWUgPSBjcHUuZnA8dWludDhfdCo+KCkgKyB0cnVlQ2FsbGVyLT5pbmxp
bmVDYWxsRnJhbWUoKS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworCisj
aWYgQ1BVKEFSTTY0RSkKKyAgICAgICAgICAgIHZvaWQqIG5ld0VudHJ5U1AgPSBjcHUuZnA8dWlu
dDhfdCo+KCkgKyBpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkgKyBzaXplb2Yodm9p
ZCopOworICAgICAgICAgICAganVtcFRhcmdldCA9IHRhZ0NvZGVQdHIoanVtcFRhcmdldCwgYml0
d2lzZV9jYXN0PFB0clRhZz4obmV3RW50cnlTUCkpOworI2VuZGlmCisgICAgICAgICAgICBmcmFt
ZS5zZXQ8dm9pZCo+KGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSwganVtcFRhcmdl
dCk7CisgICAgICAgIH0KKworICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHZvaWQqPihpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrLCBiYXNlbGlu
ZUNvZGVCbG9jayk7CisKKyAgICAgICAgLy8gUmVzdG9yZSB0aGUgaW5saW5lIGNhbGwgZnJhbWUn
cyBjYWxsZWUgc2F2ZSByZWdpc3RlcnMuCisgICAgICAgIC8vIElmIHRoaXMgaW5saW5lZCBmcmFt
ZSBpcyBhIHRhaWwgY2FsbCB0aGF0IHdpbGwgcmV0dXJuIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNh
bGxlciwgd2UgbmVlZCB0bworICAgICAgICAvLyBjb3B5IHRoZSBwcmlvciBjb250ZW50cyBvZiB0
aGUgdGFnIHJlZ2lzdGVycyBhbHJlYWR5IHNhdmVkIGZvciB0aGUgb3V0ZXIgZnJhbWUgdG8gdGhp
cyBmcmFtZS4KKyAgICAgICAgc2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKGNvbnRleHQsIGJhc2Vs
aW5lQ29kZUJsb2NrLCBWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCksICF0cnVlQ2FsbGVyKTsKKworICAgICAgICBpZiAoY2FsbGVySXNMTEludCkgeworICAgICAg
ICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGJhc2VsaW5lQ29k
ZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soKnRydWVDYWxsZXIsIG91dGVybW9z
dEJhc2VsaW5lQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIGZyYW1lLnNldDxjb25zdCB2b2lkKj4o
Y2FsbGVlU2F2ZVNsb3QoaW5saW5lQ2FsbEZyYW1lLCBiYXNlbGluZUNvZGVCbG9jaywgTExJbnQ6
OlJlZ2lzdGVyczo6bWV0YWRhdGFUYWJsZUdQUikub2Zmc2V0LCBiYXNlbGluZUNvZGVCbG9ja0Zv
ckNhbGxlci0+bWV0YWRhdGFUYWJsZSgpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAg
ICAgZnJhbWUuc2V0PGNvbnN0IHZvaWQqPihjYWxsZWVTYXZlU2xvdChpbmxpbmVDYWxsRnJhbWUs
IGJhc2VsaW5lQ29kZUJsb2NrLCBMTEludDo6UmVnaXN0ZXJzOjpwYkdQUikub2Zmc2V0LCBiYXNl
bGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcigpKTsKKyNlbmRp
ZgorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygp
KQorICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBQYXlsb2FkT2Zmc2V0LCBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKTsKKyAgICAgICAgQVNTRVJUKGNhbGxlckZyYW1lKTsKKyAgICAgICAgZnJhbWUuc2V0PHZv
aWQqPihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0KCksIGNhbGxlckZyYW1lKTsK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxs
U2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkuYml0cygpOworICAgICAgICBm
cmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFRhZ09mZnNldCwgbG9j
YXRpb25CaXRzKTsKKyAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwp
CisgICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUsIEpTVmFsdWUoaW5saW5lQ2FsbEZyYW1lLT5jYWxs
ZWVDb25zdGFudCgpKSk7CisjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KSAvLyBzbyB0aGlzIGlzIHRo
ZSAzMi1iaXQgcGFydAorICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBi
YXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJ
bmRleCgpKS5wdHIoKTsKKyAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJ
bmRleChCeXRlY29kZUluZGV4KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKSku
Yml0cygpOworICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsKKyAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1
aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNh
bGxlZSwgVGFnT2Zmc2V0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oSlNWYWx1ZTo6Q2VsbFRhZykp
OworICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKKyAgICAgICAg
ICAgIGZyYW1lLnNldE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxG
cmFtZVNsb3Q6OmNhbGxlZSwgUGF5bG9hZE9mZnNldCwgaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVD
b25zdGFudCgpKTsKKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSAvLyBlbmRpbmcgdGhlICNlbHNl
IHBhcnQsIHNvIGRpcmVjdGx5IGFib3ZlIGlzIHRoZSAzMi1iaXQgcGFydAorICAgIH0KKworICAg
IC8vIERvbid0IG5lZWQgdG8gc2V0IHRoZSB0b3BsZXZlbCBjb2RlIG9yaWdpbiBpZiB3ZSBvbmx5
IGRpZCBpbmxpbmUgdGFpbCBjYWxscworICAgIGlmIChjb2RlT3JpZ2luKSB7CisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChj
b2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJpdHMoKTsKKyNlbHNlCisgICAgICAgIGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLnB0cigpOworICAg
ICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgo
Yml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVjdGlvbikpKS5iaXRzKCk7CisjZW5kaWYKKyAg
ICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChDb250ZXh0JiBjb250ZXh0LCBWTSYg
dm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrLCBP
U1JFeGl0JiBleGl0KQoreworICAgIE9TUkV4aXRTdGF0ZSogZXhpdFN0YXRlID0gZXhpdC5leGl0
U3RhdGUuZ2V0KCk7CisKKyAgICBXVEY6OnN0b3JlTG9hZEZlbmNlKCk7IC8vIFRoZSBvcHRpbWl6
aW5nIGNvbXBpbGVyIGV4cGVjdHMgdGhhdCB0aGUgT1NSIGV4aXQgbWVjaGFuaXNtIHdpbGwgZXhl
Y3V0ZSB0aGlzIGZlbmNlLgorICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGJhc2VsaW5lQ29kZUJs
b2NrKTsKKworICAgIC8vIFdlIGJhcnJpZXIgYWxsIGlubGluZWQgZnJhbWVzIC0tIGFuZCBub3Qg
anVzdCB0aGUgY3VycmVudCBpbmxpbmUgc3RhY2sgLS0KKyAgICAvLyBiZWNhdXNlIHdlIGRvbid0
IGtub3cgd2hpY2ggaW5saW5lZCBmdW5jdGlvbiBvd25zIHRoZSB2YWx1ZSBwcm9maWxlIHRoYXQK
KyAgICAvLyB3ZSdsbCB1cGRhdGUgd2hlbiB3ZSBleGl0LiBJbiB0aGUgY2FzZSBvZiAiZigpIHsg
YSgpOyBiKCk7IH0iLCBpZiBib3RoCisgICAgLy8gYSBhbmQgYiBhcmUgaW5saW5lZCwgd2UgbWln
aHQgZXhpdCBpbnNpZGUgYiBkdWUgdG8gYSBiYWQgdmFsdWUgbG9hZGVkCisgICAgLy8gZnJvbSBh
LgorICAgIC8vIEZJWE1FOiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHNob3VsZCByZW1l
bWJlciB3aGljaCBDb2RlQmxvY2sgb3ducworICAgIC8vIHRoZSB2YWx1ZSBwcm9maWxlLgorICAg
IElubGluZUNhbGxGcmFtZVNldCogaW5saW5lQ2FsbEZyYW1lcyA9IGNvZGVCbG9jay0+aml0Q29k
ZSgpLT5kZmdDb21tb24oKS0+aW5saW5lQ2FsbEZyYW1lcy5nZXQoKTsKKyAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lcykgeworICAgICAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lIDogKmlubGluZUNhbGxGcmFtZXMpCisgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmll
cihpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrLmdldCgpKTsKKyAgICB9CisKKyAg
ICBhdXRvKiBleGl0SW5saW5lQ2FsbEZyYW1lID0gZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKCk7CisgICAgaWYgKGV4aXRJbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIGNvbnRleHQu
ZnAoKSA9IGNvbnRleHQuZnA8dWludDhfdCo+KCkgKyBleGl0SW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisKKyAgICB2b2lkKiBqdW1wVGFyZ2V0
ID0gZXhpdFN0YXRlLT5qdW1wVGFyZ2V0OworICAgIEFTU0VSVChqdW1wVGFyZ2V0KTsKKworICAg
IGlmIChleGl0LmlzRXhjZXB0aW9uSGFuZGxlcigpKSB7CisgICAgICAgIC8vIFNpbmNlIHdlJ3Jl
IGp1bXBpbmcgdG8gb3BfY2F0Y2gsIHdlIG5lZWQgdG8gc2V0IGNhbGxGcmFtZUZvckNhdGNoLgor
ICAgICAgICB2bS5jYWxsRnJhbWVGb3JDYXRjaCA9IGNvbnRleHQuZnA8Q2FsbEZyYW1lKj4oKTsK
KyAgICB9CisKKyAgICB2bS50b3BDYWxsRnJhbWUgPSBjb250ZXh0LmZwPENhbGxGcmFtZSo+KCk7
CisKKyAgICBpZiAoZXhpdFN0YXRlLT5pc0p1bXBUb0xMSW50KSB7CisgICAgICAgIENvZGVCbG9j
ayogY29kZUJsb2NrRm9yRXhpdCA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxp
bmVDb2RlQmxvY2soZXhpdC5tX2NvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKTsKKyAgICAg
ICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCgpOworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiYgY3VycmVudEluc3RydWN0aW9u
ID0gKmNvZGVCbG9ja0ZvckV4aXQtPmluc3RydWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpLnB0
cigpOworCisgICAgICAgIGNvbnRleHQuZ3ByKExMSW50OjpSZWdpc3RlcnM6Om1ldGFkYXRhVGFi
bGVHUFIpID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY29kZUJsb2NrRm9yRXhpdC0+bWV0YWRh
dGFUYWJsZSgpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBjb250ZXh0LmdwcihMTElu
dDo6UmVnaXN0ZXJzOjpwYkdQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2tG
b3JFeGl0LT5pbnN0cnVjdGlvbnNSYXdQb2ludGVyKCkpOworICAgICAgICBjb250ZXh0LmdwcihM
TEludDo6UmVnaXN0ZXJzOjpwY0dQUikgPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGV4aXQubV9j
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5vZmZzZXQoKSk7CisjZWxzZQorICAgICAgICBjb250
ZXh0LmdwcihMTEludDo6UmVnaXN0ZXJzOjpwY0dQUikgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PigmY3VycmVudEluc3RydWN0aW9uKTsKKyNlbmRpZgorCisgICAgICAgIGlmIChleGl0LmlzRXhj
ZXB0aW9uSGFuZGxlcigpKQorICAgICAgICAgICAgdm0udGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRo
cm93ID0gJmN1cnJlbnRJbnN0cnVjdGlvbjsKKyAgICB9CisKKyAgICBjb250ZXh0LnBjKCkgPSB1
bnRhZ0NvZGVQdHI8SlNFbnRyeVB0clRhZz4oanVtcFRhcmdldCk7Cit9CisKK3N0YXRpYyB2b2lk
IHByaW50T1NSRXhpdChDb250ZXh0JiBjb250ZXh0LCB1aW50MzJfdCBvc3JFeGl0SW5kZXgsIGNv
bnN0IE9TUkV4aXQmIGV4aXQpCit7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0
LmZwPENhbGxGcmFtZSo+KCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOworICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCk7CisgICAgRXhpdEtpbmQga2luZCA9IGV4aXQubV9raW5kOworICAgIEJ5dGVj
b2RlSW5kZXggYnl0ZWNvZGVPZmZzZXQgPSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4
KCk7CisKKyAgICBkYXRhTG9nKCJTcGVjdWxhdGlvbiBmYWlsdXJlIGluICIsICpjb2RlQmxvY2sp
OworICAgIGRhdGFMb2coIiBAIGV4aXQgIyIsIG9zckV4aXRJbmRleCwgIiAoIiwgYnl0ZWNvZGVP
ZmZzZXQsICIsICIsIGV4aXRLaW5kVG9TdHJpbmcoa2luZCksICIpIHdpdGggIik7CisgICAgaWYg
KGFsdGVybmF0aXZlKSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAiZXhlY3V0ZUNv
dW50ZXIgPSAiLCBhbHRlcm5hdGl2ZS0+aml0RXhlY3V0ZUNvdW50ZXIoKSwKKyAgICAgICAgICAg
ICIsIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID0gIiwgYWx0ZXJuYXRpdmUtPnJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyKCksCisgICAgICAgICAgICAiLCBvcHRpbWl6YXRpb25EZWxheUNv
dW50ZXIgPSAiLCBhbHRlcm5hdGl2ZS0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCkpOworICAg
IH0gZWxzZQorICAgICAgICBkYXRhTG9nKCJubyBhbHRlcm5hdGl2ZSBjb2RlIGJsb2NrIChpLmUu
IHdlJ3ZlIGJlZW4gamV0dGlzb25lZCkiKTsKKyAgICBkYXRhTG9nKCIsIG9zckV4aXRDb3VudGVy
ID0gIiwgY29kZUJsb2NrLT5vc3JFeGl0Q291bnRlcigpLCAiXG4iKTsKKyAgICBkYXRhTG9nKCIg
ICAgR1BScyBhdCB0aW1lIG9mIGV4aXQ6Iik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgR1BSUmVnIGdwciA9
IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGRhdGFMb2coIiAiLCBjb250ZXh0Lmdw
ck5hbWUoZ3ByKSwgIjoiLCBSYXdQb2ludGVyKGNvbnRleHQuZ3ByPHZvaWQqPihncHIpKSk7Cisg
ICAgfQorICAgIGRhdGFMb2coIlxuIik7CisgICAgZGF0YUxvZygiICAgIEZQUnMgYXQgdGltZSBv
ZiBleGl0OiIpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIEZQUlJlZyBmcHIgPSBGUFJJbmZvOjp0b1JlZ2lz
dGVyKGkpOworICAgICAgICBkYXRhTG9nKCIgIiwgY29udGV4dC5mcHJOYW1lKGZwciksICI6Iik7
CisgICAgICAgIHVpbnQ2NF90IGJpdHMgPSBjb250ZXh0LmZwcjx1aW50NjRfdD4oZnByKTsKKyAg
ICAgICAgZG91YmxlIHZhbHVlID0gY29udGV4dC5mcHIoZnByKTsKKyAgICAgICAgZGF0YUxvZ0Yo
IiVsbHg6JWxmIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihiaXRzKSwgdmFsdWUpOworICAgIH0K
KyAgICBkYXRhTG9nKCJcbiIpOworfQorCisvLyBKSVQgYmFzZWQgT1NSIEV4aXQuCisKIE9TUkV4
aXQ6Ok9TUkV4aXQoRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHZhbHVlUHJvZmlsZSwgU3BlY3VsYXRpdmVKSVQq
IGppdCwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAg
OiBPU1JFeGl0QmFzZShraW5kLCBqaXQtPm1fb3JpZ2luLmZvckV4aXQsIGppdC0+bV9vcmlnaW4u
c2VtYW50aWMsIGppdC0+bV9vcmlnaW4ud2FzSG9pc3RlZCkKICAgICAsIG1fanNWYWx1ZVNvdXJj
ZShqc1ZhbHVlU291cmNlKQpAQCAtNzAsMTggKzk1OCwxNSBAQCBDb2RlTG9jYXRpb25KdW1wPEpT
SW50ZXJuYWxQdHJUYWc+IE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goKSBjb25zdAog
CiB2b2lkIE9TUkV4aXQ6OmVtaXRSZXN0b3JlQXJndW1lbnRzKENDYWxsSGVscGVycyYgaml0LCBW
TSYgdm0sIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcykKIHsKLSAgICBI
YXNoTWFwPE1pbmlmaWVkSUQsIFZpcnR1YWxSZWdpc3Rlcj4gYWxyZWFkeUFsbG9jYXRlZEFyZ3Vt
ZW50czsgLy8gTWFwcyBwaGFudG9tIGFyZ3VtZW50cyBub2RlIElEIHRvIG9wZXJhbmQuCisgICAg
SGFzaE1hcDxNaW5pZmllZElELCBpbnQ+IGFscmVhZHlBbGxvY2F0ZWRBcmd1bWVudHM7IC8vIE1h
cHMgcGhhbnRvbSBhcmd1bWVudHMgbm9kZSBJRCB0byBvcGVyYW5kLgogICAgIGZvciAoc2l6ZV90
IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKICAgICAgICAg
Y29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CisgICAgICAg
IGludCBvcGVyYW5kID0gb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KTsKIAogICAgICAg
ICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlyZWN0QXJndW1lbnRzVGhhdFdlcmVOb3RD
cmVhdGVkCiAgICAgICAgICAgICAmJiByZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBDbG9uZWRBcmd1
bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAg
ICBPcGVyYW5kIG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwotICAg
ICAgICBpZiAob3BlcmFuZC5pc1RtcCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KICAgICAg
ICAgTWluaWZpZWRJRCBpZCA9IHJlY292ZXJ5Lm5vZGVJRCgpOwogICAgICAgICBhdXRvIGl0ZXIg
PSBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmZpbmQoaWQpOwogICAgICAgICBpZiAoaXRlciAh
PSBhbHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmVuZCgpKSB7CkBAIC0xMDIsNyArOTg3LDcgQEAg
dm9pZCBPU1JFeGl0OjplbWl0UmVzdG9yZUFyZ3VtZW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgVk0m
IHZtLCBjb25zdCBPcGVyYW5kczxWYWwKIAogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSB8
fCBpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpIHsKICAgICAgICAgICAgIGppdC5sb2Fk
UHRyKAotICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihWaXJ0dWFs
UmVnaXN0ZXIoc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwKKyAgICAgICAg
ICAgICAgICBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Ioc3RhY2tPZmZzZXQgKyBDYWxsRnJh
bWVTbG90OjpjYWxsZWUpLAogICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGppdC5tb3ZlKApAQCAtMTEyLDcgKzk5Nyw3IEBAIHZv
aWQgT1NSRXhpdDo6ZW1pdFJlc3RvcmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2
bSwgY29uc3QgT3BlcmFuZHM8VmFsCiAKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUgfHwg
aW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkgewogICAgICAgICAgICAgaml0LmxvYWQzMigK
LSAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoVmlydHVhbFJlZ2lz
dGVyKHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpKSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Ioc3RhY2tP
ZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksCiAgICAg
ICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDEpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgaml0Lm1vdmUoCkBAIC0xMzgsNyArMTAyMyw3IEBAIHZvaWQgT1NSRXhpdDo6ZW1pdFJlc3Rv
cmVBcmd1bWVudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIFZNJiB2bSwgY29uc3QgT3BlcmFuZHM8VmFs
CiAgICAgICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjAsIE9wZXJhdGlvblB0clRhZyk7
CiAgICAgICAgIGppdC5zdG9yZUNlbGwoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7CiAKLSAgICAgICAgYWxyZWFkeUFsbG9jYXRl
ZEFyZ3VtZW50cy5hZGQoaWQsIG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBh
bHJlYWR5QWxsb2NhdGVkQXJndW1lbnRzLmFkZChpZCwgb3BlcmFuZCk7CiAgICAgfQogfQogCkBA
IC01ODEsODAgKzE0NjYsMTcgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBl
cnMmIGppdCwgVk0mIHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25zdAogICAgIGlmIChleGl0
LmlzRXhjZXB0aW9uSGFuZGxlcigpKQogICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0udG9wRW50cnlGcmFtZSk7CiAKLSAgICBpZiAoZXhp
dC5tX2NvZGVPcmlnaW4uaW5saW5lU3RhY2tDb250YWluc0FjdGl2ZUNoZWNrcG9pbnQoKSkgewot
ICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxkbid0IHVzZSBhIHByb2JlIGJ1dCBmaWxs
aW5nIGFsbCB0aGUgc2lkZSBzdGF0ZSBvYmplY3RzIGlzIHRyaWNreSBvdGhlcndpc2UuLi4KLSAg
ICAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IHZhbHVlcyhvcGVyYW5kcy5udW1iZXJPZlRtcHMo
KSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BlcmFuZHMubnVtYmVyT2ZUbXBz
KCk7ICsraSkKLSAgICAgICAgICAgIHZhbHVlc1tpXSA9IG9wZXJhbmRzLnRtcChpKTsKLQotICAg
ICAgICBWTSogdm1QdHIgPSAmdm07Ci0gICAgICAgIGF1dG8qIHRtcFNjcmF0Y2ggPSBzY3JhdGNo
ICsgb3BlcmFuZHMudG1wSW5kZXgoMCk7Ci0gICAgICAgIGppdC5wcm9iZShbPSwgdmFsdWVzID0g
V1RGTW92ZSh2YWx1ZXMpXSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAg
IGF1dG8gYWRkU2lkZVN0YXRlID0gWyZdIChDYWxsRnJhbWUqIGZyYW1lLCBCeXRlY29kZUluZGV4
IGluZGV4LCBzaXplX3QgdG1wT2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiBzaWRlU3RhdGUgPSBXVEY6Om1ha2VVbmlx
dWU8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+KCk7Ci0KLSAgICAgICAgICAgICAgICBzaWRl
U3RhdGUtPmJ5dGVjb2RlSW5kZXggPSBpbmRleDsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1heE51bUNoZWNrcG9pbnRUbXBzOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byYgcmVjb3ZlcnkgPSB2YWx1ZXNbaSArIHRtcE9mZnNldF07Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8gd2hhdCB0aGUgRlRMIGRvZXMgYW5kIG1h
dGVyaWFsaXplIGFsbCB0aGUgSlNWYWx1ZXMgaW50byB0aGUgc2NyYXRjaCBidWZmZXIuCi0gICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBDb25zdGFudDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpZGVT
dGF0ZS0+dG1wc1tpXSA9IHJlY292ZXJ5LmNvbnN0YW50KCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BS
OgotICAgICAgICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5KU1N0YWNrOiB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSBqc051bWJlcihzdGF0
aWNfY2FzdDxpbnQzMl90Pih0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRdKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgotICAgICAgICAgICAgICAgICAgICBjYXNlIENl
bGxEaXNwbGFjZWRJbkpTU3RhY2s6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSW5HUFI6Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOiB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBzaWRlU3RhdGUtPnRtcHNbaV0gPSByZWludGVycHJldF9jYXN0PEpTVmFs
dWUqPih0bXBTY3JhdGNoKVtpICsgdG1wT2Zmc2V0XTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6IAotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdm1QdHItPmFkZENoZWNrcG9p
bnRPU1JTaWRlU3RhdGUoZnJhbWUsIFdURk1vdmUoc2lkZVN0YXRlKSk7Ci0gICAgICAgICAgICB9
OwotCi0gICAgICAgICAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOwotICAgICAgICAg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmdwcjxDYWxsRnJhbWUqPihHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgICAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhp
dC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1l
KCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVy
U2tpcHBpbmdUYWlsQ2FsbHMoKSkgewotICAgICAgICAgICAgICAgIEJ5dGVjb2RlSW5kZXggY2Fs
bEJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1l
ID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAgICAgICAgICAgICAgYWRkU2lk
ZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZyYW1lKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oY2FsbEZyYW1lKSArIGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSAtIHNpemVv
ZihDUFVSZWdpc3RlcikpLCBjYWxsQnl0ZWNvZGVJbmRleCwgaW5saW5lQ2FsbEZyYW1lLT50bXBP
ZmZzZXQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWNvZGVPcmlnaW4pCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpZiAoQnl0ZWNvZGVJbmRleCBi
eXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCgpOyBieXRlY29kZUluZGV4
LmNoZWNrcG9pbnQoKSkKLSAgICAgICAgICAgICAgICBhZGRTaWRlU3RhdGUoY2FsbEZyYW1lLCBi
eXRlY29kZUluZGV4LCAwKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCiAgICAgLy8gRG8gYWxsIGRh
dGEgZm9ybWF0IGNvbnZlcnNpb25zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBzdGFj
ay4KIAogICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7
ICsraW5kZXgpIHsKICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVy
YW5kc1tpbmRleF07Ci0gICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRG
b3JJbmRleChpbmRleCk7Ci0gICAgICAgIGlmIChvcGVyYW5kLmlzVG1wKCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG9wZXJhbmRzLnZpcnR1
YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKIAotICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2Fs
KCkgJiYgb3BlcmFuZC50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGppdC5iYXNlbGluZUNv
ZGVCbG9jaygpLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkpCisgICAgICAg
IGlmIChyZWcuaXNMb2NhbCgpICYmIHJlZy50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxpbnQ+KGpp
dC5iYXNlbGluZUNvZGVCbG9jaygpLT5jYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMo
KSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBpbnQgb3BlcmFuZCA9IHJlZy5v
ZmZzZXQoKTsKKwogICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAg
ICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgogICAgICAgICBjYXNlIEluRlBSOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAppbmRleCA5ZTliY2VhNDgxYzFkNjg3Nzk3MmYy
NTlkNjJjMWEyMzAwYjJiMTYxLi5hN2U1ODc4YzA3MTcwOGExZGE3NmMwYjBlYjU0ZDU0ZjFhMDRl
YjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaApAQCAtMTUwLDYgKzE1
MCw4IEBAIHN0cnVjdCBPU1JFeGl0IDogcHVibGljIE9TUkV4aXRCYXNlIHsKIAogICAgIGZyaWVu
ZCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ29tcGlsZU9TUkV4aXQoQ2FsbEZyYW1lKik7
CiAKKyAgICBzdGF0aWMgdm9pZCBleGVjdXRlT1NSRXhpdChQcm9iZTo6Q29udGV4dCYpOworCiAg
ICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNJbnRlcm5hbFB0clRhZz4gbV9wYXRjaGFibGVKdW1wTG9j
YXRpb247CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPE9TUkV4aXRQdHJUYWc+IG1fY29kZTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCmluZGV4IDAwM2I2
MThjZDQ0MGU0MDBhYmFhY2VjMGFmYmMzYzEyNDM1ZGI5NmUuLjMxMDk2M2Q4NDQzNmM1MzMyNzg0
ZjBhMjkyYTQ5Y2JlMWI4MmE1OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdEJhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRCYXNlLmgKQEAgLTcwLDExICs3MCw2IEBAIHN0cnVjdCBPU1JFeGl0QmFzZSB7CiAgICAg
ICAgIHJldHVybiBtX2tpbmQgPT0gR2VuZXJpY1Vud2luZDsKICAgICB9CiAKLSAgICBBTFdBWVNf
SU5MSU5FIGJvb2wgaXNFeGl0aW5nVG9DaGVja3BvaW50SGFuZGxlcigpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKS5jaGVja3BvaW50KCk7
Ci0gICAgfQotCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRF
eGl0U2l0ZShDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrLCBFeGl0aW5nSklUVHlwZSBqaXRU
eXBlKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmNwcAppbmRleCAyN2UyYWE4ZDk4Zjc3YzJjYmZkZDM3ZTJhY2Rj
NzJmNDhkYzVlOWQ5Li43YmE1ZDZlMjJiZTVmYWI0NjJlMjA1ZTAwMDBkMTg1ZmZkODgwMTI0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGls
ZXJDb21tb24uY3BwCkBAIC0yOSwxNSArMjksMTIgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAog
I2luY2x1ZGUgIkJ5dGVjb2Rlcy5oIgotI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0
YXRlLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMu
aCIKICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKLSNpbmNsdWRlICJM
TEludFRodW5rcy5oIgotI2luY2x1ZGUgIlByb2JlQ29udGV4dC5oIgogI2luY2x1ZGUgIlN0cnVj
dHVyZVN0dWJJbmZvLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTE0
NSwxMCArMTQyLDYgQEAgdm9pZCBoYW5kbGVFeGl0Q291bnRzKFZNJiB2bSwgQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGNhbGxlclJldHVyblBDKENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tG
b3JDYWxsZXIsIEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXgsIElubGluZUNhbGxGcmFt
ZTo6S2luZCB0cnVlQ2FsbGVyQ2FsbEtpbmQsIGJvb2wmIGNhbGxlcklzTExJbnQpCiB7CiAgICAg
Y2FsbGVySXNMTEludCA9IE9wdGlvbnM6OmZvcmNlT1NSRXhpdFRvTExJbnQoKSB8fCBiYXNlbGlu
ZUNvZGVCbG9ja0ZvckNhbGxlci0+aml0VHlwZSgpID09IEpJVFR5cGU6OkludGVycHJldGVyVGh1
bms7Ci0KLSAgICBpZiAoY2FsbEJ5dGVjb2RlSW5kZXguY2hlY2twb2ludCgpKQotICAgICAgICBy
ZXR1cm4gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY2hlY2twb2ludF9vc3JfZXhp
dF9mcm9tX2lubGluZWRfY2FsbF90cmFtcG9saW5lKTsKLQogICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBqdW1wVGFyZ2V0OwogCiAgICAgaWYgKGNhbGxlcklzTExJbnQp
IHsKQEAgLTI0NCw3ICsyMzcsNyBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogICAgIC8vIGluIHByZXNlbmNl
IG9mIGlubGluZWQgdGFpbCBjYWxscy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ3NTExCiAgICAgQVNTRVJUKEpJVENvZGU6OmlzQmFzZWxpbmVDb2Rl
KGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5qaXRUeXBlKCkpKTsKLSAgICBqaXQuc3RvcmVQdHIo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5iYXNlbGluZUNvZGVCbG9jaygpKSwg
QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOwor
ICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmJhc2Vs
aW5lQ29kZUJsb2NrKCkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdp
c3RlcilDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKIAogICAgIGNvbnN0IENvZGVPcmlnaW4q
IGNvZGVPcmlnaW47CiAgICAgZm9yIChjb2RlT3JpZ2luID0gJmV4aXQubV9jb2RlT3JpZ2luOyBj
b2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZSgpOyBjb2RlT3JpZ2luID0g
Y29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCktPmdldENhbGxlclNraXBwaW5nVGFpbENhbGxz
KCkpIHsKQEAgLTMxMSwzNCArMzA0LDMzIEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAgICBq
aXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9y
KFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CisgICAgICAgICAgICBqaXQuc3Rv
cmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
ICAgICBqaXQuc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNldCgpKSk7Ci0g
ICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYmFzZWxpbmVDb2Rl
QmxvY2stPmJ5dGVjb2RlSW5kZXhGb3JFeGl0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkp
LmJpdHMoKTsKLSAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
MzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVy
KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcykpKTsKKyAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2Fs
bFNpdGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJpdHMoKTsKKyAgICAgICAg
aml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwg
QXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KSkpOwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAg
ICAgICAgIGppdC5zdG9yZTY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkpKSwgQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICAgICAgaml0
LnN0b3JlNjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSkpLCBBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQp
IC8vIHNvIHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0CiAgICAgICAgIGppdC5zdG9yZVB0cihjYWxs
ZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVD
YWxsRnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uID0gYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGNv
ZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKSkucHRyKCk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0
aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoKS5iaXRzKCk7Ci0gICAgICAgIGppdC5zdG9yZTMyKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVy
czo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7Ci0gICAgICAgIGpp
dC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
LCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKKyAgICAgICAgdWludDMy
X3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGJpdHdpc2VfY2Fz
dDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKSkuYml0cygpOworICAgICAgICBqaXQuc3RvcmUzMihB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBl
cnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKSk7CisgICAgICAg
IGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOwogICAgICAgICBp
ZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGppdC5zdG9y
ZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lLT5jYWxs
ZWVDb25zdGFudCgpKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3Rl
cihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkp
OworICAgICAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0
cihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpLCBBc3NlbWJseUhlbHBlcnM6OnBh
eWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSAvLyBl
bmRpbmcgdGhlICNlbHNlIHBhcnQsIHNvIGRpcmVjdGx5IGFib3ZlIGlzIHRoZSAzMi1iaXQgcGFy
dAogICAgIH0KIAogICAgIC8vIERvbid0IG5lZWQgdG8gc2V0IHRoZSB0b3BsZXZlbCBjb2RlIG9y
aWdpbiBpZiB3ZSBvbmx5IGRpZCBpbmxpbmUgdGFpbCBjYWxscwogICAgIGlmIChjb2RlT3JpZ2lu
KSB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0g
Q2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgoKS5v
ZmZzZXQoKSkpLmJpdHMoKTsKKyAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNp
dGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpLmJpdHMoKTsKICNlbHNlCi0gICAg
ICAgIGF1dG8gYnl0ZWNvZGVJbmRleCA9IGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5ieXRlY29k
ZUluZGV4Rm9yRXhpdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICBjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+aW5z
dHJ1Y3Rpb25zKGJ5dGVjb2RlSW5kZXgpLmF0KCkucHRyKCk7Ci0gICAgICAgIHVpbnQzMl90IGxv
Y2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQzMl90PihpbnN0cnVj
dGlvbikpLmJpdHMoKTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0g
aml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmF0KGNvZGVPcmlnaW4tPmJ5
dGVjb2RlSW5kZXgoKSkucHRyKCk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGluc3RydWN0
aW9uKSkpLmJpdHMoKTsKICNlbmRpZgotICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihD
YWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgICAgICBqaXQu
c3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3Nl
bWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcykpKTsKICAgICB9CiB9CiAKQEAgLTM5MywxMSArMzg1LDcg
QEAgdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgaWYgKGV4aXRUb0xMSW50KSB7CiAgICAgICAg
IGF1dG8gYnl0ZWNvZGVJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsK
ICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24mIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICpjb2RlQmxv
Y2tGb3JFeGl0LT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KS5wdHIoKTsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3RpbmF0aW9uOwotICAg
ICAgICBpZiAoYnl0ZWNvZGVJbmRleC5jaGVja3BvaW50KCkpCi0gICAgICAgICAgICBkZXN0aW5h
dGlvbiA9IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGNoZWNrcG9pbnRfb3NyX2V4
aXRfdHJhbXBvbGluZSk7Ci0gICAgICAgIGVsc2UgCi0gICAgICAgICAgICBkZXN0aW5hdGlvbiA9
IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBkZXN0aW5hdGlvbiA9
IExMSW50OjpnZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KGN1cnJlbnRJbnN0cnVjdGlvbik7CiAK
ICAgICAgICAgaWYgKGV4aXQuaXNFeGNlcHRpb25IYW5kbGVyKCkpIHsKICAgICAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY3VycmVudEluc3RydWN0aW9uKSwg
R1BSSW5mbzo6cmVnVDIpOwpAQCAtNDEzLDE4ICs0MDEsMTAgQEAgdm9pZCBhZGp1c3RBbmRKdW1w
VG9UYXJnZXQoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4
aXQpCiAjZW5kaWYKICAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9T
UkV4aXRQdHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9IGVsc2UgewotICAgICAg
ICBCeXRlY29kZUluZGV4IGV4aXRJbmRleCA9IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgoKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGRlc3Rp
bmF0aW9uOwotICAgICAgICBpZiAoZXhpdEluZGV4LmNoZWNrcG9pbnQoKSkKLSAgICAgICAgICAg
IGRlc3RpbmF0aW9uID0gTExJbnQ6OmdldENvZGVQdHI8SlNFbnRyeVB0clRhZz4oY2hlY2twb2lu
dF9vc3JfZXhpdF90cmFtcG9saW5lKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NF
UlQoY29kZUJsb2NrRm9yRXhpdC0+Ynl0ZWNvZGVJbmRleEZvckV4aXQoZXhpdEluZGV4KSA9PSBl
eGl0SW5kZXgpOwotICAgICAgICAgICAgZGVzdGluYXRpb24gPSBjb2RlQmxvY2tGb3JFeGl0LT5q
aXRDb2RlTWFwKCkuZmluZChleGl0SW5kZXgpOwotICAgICAgICB9CisgICAgICAgIENvZGVMb2Nh
dGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGNvZGVMb2NhdGlvbiA9IGNvZGVCbG9ja0ZvckV4aXQt
PmppdENvZGVNYXAoKS5maW5kKGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSk7Cisg
ICAgICAgIEFTU0VSVChjb2RlTG9jYXRpb24pOwogCi0gICAgICAgIEFTU0VSVChkZXN0aW5hdGlv
bik7Ci0KLSAgICAgICAganVtcFRhcmdldCA9IGRlc3RpbmF0aW9uLnJldGFnZ2VkPE9TUkV4aXRQ
dHJUYWc+KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAganVtcFRhcmdldCA9IGNvZGVM
b2NhdGlvbi5yZXRhZ2dlZDxPU1JFeGl0UHRyVGFnPigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAg
ICAgfQogCiAgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKSVQ6
OnN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2tGb3JFeGl0KSAqIHNpemVvZihSZWdpc3Rl
cikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAppbmRleCBiODU5NTk4MTA3
MTA4MDRjMjUyNzc2NTI1ZTUxMjZjNjNhMjZlNzZmLi5hOTk1OTdmNjY0MzhjZGE3ODRlZTM5NmQz
MWU0MTY4YWIzZjk4NjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKQEAgLTIyNDIsNyAr
MjI0Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobV9oZWFwLmZvbGxvdyhhdmFpbGFi
aWxpdHkubV9sb2NhbHNbaV0ubm9kZSgpKSAhPSBlc2NhcGVlKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBhdmFpbGFiaWxpdHkubV9s
b2NhbHMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBhdmFp
bGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25l
LCBNb3ZIaW50LCBvcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKG9wZXJhbmQp
LAogICAgICAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbi0+ZGVmYXVsdEVkZ2UoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcEluZm8uaAppbmRleCA3N2VmY2ZiMjQ4MDAyYTRiZjVlYTYw
YTZlNjY1MjBmZTA1MTQ0YmNjLi5mMzljMTRiOWYwYTQ0ODc4OWQ3NzJkYzI3ZGYxNTg4MWU1MDg2
ODk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BJbmZvLmgKQEAgLTQ0LDcgKzQ0LDcg
QEAgc3RydWN0IE9wSW5mbyB7CiAgICAgZXhwbGljaXQgT3BJbmZvKEludGVncmFsVHlwZSB2YWx1
ZSkKICAgICAgICAgOiBtX3ZhbHVlKHN0YXRpY19jYXN0PHVpbnQ2NF90Pih2YWx1ZSkpIHsgfQog
ICAgIGV4cGxpY2l0IE9wSW5mbyhSZWdpc3RlcmVkU3RydWN0dXJlIHN0cnVjdHVyZSkgOiBtX3Zh
bHVlKHN0YXRpY19jYXN0PHVpbnQ2NF90PihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzdHJ1Y3R1
cmUpKSkgeyB9Ci0gICAgZXhwbGljaXQgT3BJbmZvKE9wZXJhbmQgb3ApIDogbV92YWx1ZShvcC5h
c0JpdHMoKSkgeyB9CisKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgIGV4cGxpY2l0
IE9wSW5mbyhUKiBwdHIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAppbmRleCBiMmI2YWE3YzMyMjRlZDA5OTMxZTE1MWFmOWZjODUwYWIyMWM5NTUxLi5iNTJh
ZjAzNjk1ODM3ZWE2NjE5NGMxZTA1YTczYTVlNzgzOWNkNzkzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKQEAgLTI5NzEsMTggKzI5NzEsMTcgQEAgaW50
MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5SW5kZXhPZlZhbHVlRG91YmxlKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmoKICAgICByZXR1cm4gLTE7CiB9CiAKLXZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Mb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBp
bnQzMl90IGZpcnN0RWxlbWVudERlc3QsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudHMs
IHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoSW5jbHVkaW5nVGhpcywgdWludDMyX3Qg
bWFuZGF0b3J5TWluaW11bSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Mb2FkVmFyYXJn
cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQzMl90IGZpcnN0RWxlbWVudERlc3Qs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudHMsIHVpbnQzMl90IG9mZnNldCwgdWludDMy
X3QgbGVuZ3RoLCB1aW50MzJfdCBtYW5kYXRvcnlNaW5pbXVtKQogewotICAgIFZpcnR1YWxSZWdp
c3RlciBmaXJzdEVsZW1lbnQgeyBmaXJzdEVsZW1lbnREZXN0IH07CiAgICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxM
X0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGNhbGxGcmFtZSk7CiAgICAgSlNWYWx1ZSBhcmd1bWVudHMgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZEFyZ3VtZW50cyk7CiAgICAgCi0gICAgbG9hZFZhcmFyZ3MoZ2xvYmFsT2JqZWN0
LCBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCZjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50KSksIGFy
Z3VtZW50cywgb2Zmc2V0LCBsZW5ndGhJbmNsdWRpbmdUaGlzIC0gMSk7CisgICAgbG9hZFZhcmFy
Z3MoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlcihmaXJzdEVsZW1lbnRE
ZXN0KSwgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgCi0gICAgZm9yICh1aW50MzJf
dCBpID0gbGVuZ3RoSW5jbHVkaW5nVGhpcyAtIDE7IGkgPCBtYW5kYXRvcnlNaW5pbXVtOyArK2kp
Ci0gICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnQgKyBpKSA9IGpzVW5kZWZpbmVkKCk7
CisgICAgZm9yICh1aW50MzJfdCBpID0gbGVuZ3RoOyBpIDwgbWFuZGF0b3J5TWluaW11bTsgKytp
KQorICAgICAgICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0ganNVbmRlZmlu
ZWQoKTsKIH0KIAogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRk1vZE9uSW50cyhpbnQz
Ml90IGEsIGludDMyX3QgYikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAppbmRleCAyYjEwNWIyY2FkZTdiN2Q1NTg5ZmFk
ZWFmYjAyYmMwOTY0NWUwOWJjLi5jYmMyYzhiZmFlNGU5NGQwOTVkZGM5MTU3ZGIzNmFiNWEwYzZh
ZGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNl
cnRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9t
SW5zZXJ0aW9uUGhhc2UuY3BwCkBAIC00Myw4ICs0MywxMSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CiAKK25hbWVzcGFjZSBERkdQaGFudG9tSW5zZXJ0
aW9uUGhhc2VJbnRlcm5hbCB7CitzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNl
OworfQorCiBjbGFzcyBQaGFudG9tSW5zZXJ0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgewotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAgICAgUGhh
bnRvbUluc2VydGlvblBoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwg
InBoYW50b20gaW5zZXJ0aW9uIikKQEAgLTU5LDcgKzYyLDcgQEAgcHVibGljOgogICAgICAgICAv
LyBTZXRMb2NhbHMgZXhlY3V0ZSwgd2hpY2ggaXMgaW5hY2N1cmF0ZS4gVGhhdCBjYXVzZXMgdXMg
dG8gaW5zZXJ0IHRvbyBmZXcgUGhhbnRvbXMuCiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwg
bnVsbHB0ciwgbV9ncmFwaC5tX3JlZkNvdW50U3RhdGUgPT0gRXhhY3RSZWZDb3VudCk7CiAgICAg
ICAgIAotICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICBpZiAoREZHUGhhbnRvbUluc2Vy
dGlvblBoYXNlSW50ZXJuYWw6OnZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBo
IGJlZm9yZSBQaGFudG9tIGluc2VydGlvbjpcbiIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1w
KCk7CiAgICAgICAgIH0KQEAgLTY5LDcgKzcyLDcgQEAgcHVibGljOgogICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKQogICAgICAg
ICAgICAgaGFuZGxlQmxvY2soYmxvY2spOwogICAgICAgICAKLSAgICAgICAgaWYgKHZlcmJvc2Up
IHsKKyAgICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2ZXJib3Nl
KSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBhZnRlciBQaGFudG9tIGluc2VydGlvbjpc
biIpOwogICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CiAgICAgICAgIH0KQEAgLTEwMCwyMiAr
MTAzLDIyIEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGxhc3RFeGl0aW5nSW5kZXggPSAw
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2Nr
LT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGlm
IChERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIE1vdkhp
bnQ6Ci0gICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJh
bmQoKSkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgbV92YWx1ZXMu
b3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2Fz
ZSBab21iaWVIaW50OgotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5s
aW5rZWRPcGVyYW5kKCkpID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVy
YW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBudWxscHRyOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogCiAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgY2FzZSBTZXRB
cmd1bWVudERlZmluaXRlbHk6CiAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50TWF5YmU6Ci0g
ICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT5vcGVyYW5kKCkpID0gbnVsbHB0
cjsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbnVs
bHB0cjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGRlZmF1bHQ6CkBAIC0xMzEsNDEgKzEzNCwzNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
bV9ncmFwaC5kb1RvQ2hpbGRyZW4oCiAgICAgICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAg
ICAgICBbJl0gKEVkZ2UgZWRnZSkgewotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2
ZXJib3NlLCAiVXBkYXRpbmcgZXBvY2ggZm9yICIsIGVkZ2UsICIgdG8gIiwgY3VycmVudEVwb2No
KTsKICAgICAgICAgICAgICAgICAgICAgZWRnZS0+c2V0RXBvY2goY3VycmVudEVwb2NoKTsKICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbm9kZS0+c2V0RXBv
Y2goY3VycmVudEVwb2NoKTsKIAotICAgICAgICAgICAgT3BlcmFuZCBhbHJlYWR5S2lsbGVkOwor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFscmVhZHlLaWxsZWQ7CiAKLSAgICAgICAgICAg
IGF1dG8gcHJvY2Vzc0tpbGxlZE9wZXJhbmQgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgewotICAg
ICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICIgICAgS2lsbGVkIG9wZXJhbmQ6ICIs
IG9wZXJhbmQpOworICAgICAgICAgICAgYXV0byBwcm9jZXNzS2lsbGVkT3BlcmFuZCA9IFsmXSAo
VmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICAgICAgICAgIGlmIChERkdQaGFudG9tSW5z
ZXJ0aW9uUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgIEtpbGxlZCBvcGVyYW5kOiAiLCByZWcsICJcbiIpOwogCiAgICAgICAgICAgICAgICAg
Ly8gQWxyZWFkeSBoYW5kbGVkIGZyb20gU2V0TG9jYWwuCi0gICAgICAgICAgICAgICAgaWYgKG9w
ZXJhbmQgPT0gYWxyZWFkeUtpbGxlZCkgewotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5J
Zih2ZXJib3NlLCAiICAgIE9wZXJhbmQgIiwgb3BlcmFuZCwgIiBhbHJlYWR5IGtpbGxlZCBieSBz
ZXQgbG9jYWwiKTsKKyAgICAgICAgICAgICAgICBpZiAocmVnID09IGFscmVhZHlLaWxsZWQpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZSoga2lsbGVkTm9kZSA9IG1fdmFsdWVzLm9wZXJh
bmQob3BlcmFuZCk7IAotICAgICAgICAgICAgICAgIGlmICgha2lsbGVkTm9kZSkgewotICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiICAgIE9wZXJhbmQgIiwgb3BlcmFu
ZCwgIiB3YXMgbm90IGRlZmluZWQgaW4gdGhpcyBibG9jay4iKTsKKyAgICAgICAgICAgICAgICBO
b2RlKiBraWxsZWROb2RlID0gbV92YWx1ZXMub3BlcmFuZChyZWcpOworICAgICAgICAgICAgICAg
IGlmICgha2lsbGVkTm9kZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQob3BlcmFuZCkgPSBu
dWxscHRyOworICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQocmVnKSA9IG51bGxwdHI7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIGlu
c2VydCBhIFBoYW50b20gaWYgdGhlIG5vZGUgaGFzbid0IGJlZW4gdXNlZCBzaW5jZSB0aGUgbGFz
dAogICAgICAgICAgICAgICAgIC8vIGV4aXQsIGFuZCB3YXMgYm9ybiBiZWZvcmUgdGhlIGxhc3Qg
ZXhpdC4KLSAgICAgICAgICAgICAgICBpZiAoa2lsbGVkTm9kZS0+ZXBvY2goKSA9PSBjdXJyZW50
RXBvY2gpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIiAgICBP
cGVyYW5kICIsIG9wZXJhbmQsICIgaGFzIGN1cnJlbnQgZXBvY2ggIiwgY3VycmVudEVwb2NoKTsK
KyAgICAgICAgICAgICAgICBpZiAoa2lsbGVkTm9kZS0+ZXBvY2goKSA9PSBjdXJyZW50RXBvY2gp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwKLSAgICAgICAg
ICAgICAgICAgICAgIiAgICBJbnNlcnRpbmcgUGhhbnRvbSBvbiAiLCBraWxsZWROb2RlLCAiIGFm
dGVyICIsCi0gICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hdChsYXN0RXhpdGluZ0luZGV4KSk7
CisgICAgICAgICAgICAgICAgaWYgKERGR1BoYW50b21JbnNlcnRpb25QaGFzZUludGVybmFsOjp2
ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIEluc2VydGluZyBQaGFudG9tIG9uICIsIGtpbGxlZE5vZGUsICIgYWZ0ZXIg
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hdChsYXN0RXhpdGluZ0luZGV4KSwg
IlxuIik7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIC8vIFdlIGhhdmUgZXhhY3QgcmVmIGNvdW50cywgc28gY3JlYXRpbmcgYSBuZXcgdXNlIG1l
YW5zIHRoYXQgd2UgaGF2ZSB0bwogICAgICAgICAgICAgICAgIC8vIGluY3JlbWVudCB0aGUgcmVm
IGNvdW50LgpAQCAtMTgwLDE0ICsxNzksMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH07CiAK
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFNldExvY2FsKSB7Ci0gICAgICAgICAgICAg
ICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+b3BlcmFuZCgpOworICAgICAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBsb2NhbCA9IG5vZGUtPmxvY2FsKCk7CiAgICAgICAgICAgICAgICAgaWYg
KG5vZGVNYXlFeGl0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBTZXRMb2NhbCBk
b2VzIGV4aXQsIHdlIG5lZWQgdGhlIE1vdkhpbnQgb2YgaXRzIGxvY2FsCiAgICAgICAgICAgICAg
ICAgICAgIC8vIHRvIGJlIGxpdmUgdW50aWwgdGhlIFNldExvY2FsIGlzIGRvbmUuCi0gICAgICAg
ICAgICAgICAgICAgIHByb2Nlc3NLaWxsZWRPcGVyYW5kKG9wZXJhbmQpOwotICAgICAgICAgICAg
ICAgICAgICBhbHJlYWR5S2lsbGVkID0gb3BlcmFuZDsKKyAgICAgICAgICAgICAgICAgICAgcHJv
Y2Vzc0tpbGxlZE9wZXJhbmQobG9jYWwpOworICAgICAgICAgICAgICAgICAgICBhbHJlYWR5S2ls
bGVkID0gbG9jYWw7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fdmFsdWVz
Lm9wZXJhbmQob3BlcmFuZCkgPSBudWxscHRyOworICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9w
ZXJhbmQobG9jYWwpID0gbnVsbHB0cjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZm9y
QWxsS2lsbGVkT3BlcmFuZHMobV9ncmFwaCwgbm9kZSwgYmxvY2stPnRyeUF0KG5vZGVJbmRleCAr
IDEpLCBwcm9jZXNzS2lsbGVkT3BlcmFuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCmluZGV4IDJhNmEwMmYyYmJkZjAx
ZmE4OTIwMzBjOWNkZDFhMzk2Nzk2OTZmYzIuLjEyOGM4NDFmMGFjN2Y5ZGViNjJmN2U2ZmM0NjNh
NTI4NzM0Yzc1NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
Y2lzZUxvY2FsQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNhbGxJZkFwcHJvcHJpYXRlKG1fcmVhZCwgaGVhcC5vcGVyYW5kKCkpOworICAgICAgICAg
ICAgY2FsbElmQXBwcm9wcmlhdGUobV9yZWFkLCBWaXJ0dWFsUmVnaXN0ZXIoaGVhcC5wYXlsb2Fk
KCkudmFsdWUzMigpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
CkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gV2UgZXhwZWN0IHN0YWNrIHdy
aXRlcyB0byBhbHJlYWR5IGJlIHByZWNpc2VseSBjaGFyYWN0ZXJpemVkIGJ5IERGRzo6Y2xvYmJl
cml6ZSgpLgogICAgICAgICBpZiAoaGVhcC5raW5kKCkgPT0gU3RhY2spIHsKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFoZWFwLnBheWxvYWQoKS5pc1RvcCgpKTsKLSAgICAgICAgICAgIGNh
bGxJZkFwcHJvcHJpYXRlKG1fdW5jb25kaXRpb25hbFdyaXRlLCBoZWFwLm9wZXJhbmQoKSk7Cisg
ICAgICAgICAgICBjYWxsSWZBcHByb3ByaWF0ZShtX3VuY29uZGl0aW9uYWxXcml0ZSwgVmlydHVh
bFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgpLnZhbHVlMzIoKSkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIApAQCAtODcsMTIgKzg3LDEyIEBAIHB1YmxpYzoKICAgICAg
ICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxvY2F0aW9uLmhlYXAoKS5raW5kKCkgPT0gU3Rh
Y2spOwogICAgICAgICAKLSAgICAgICAgbV9kZWYobG9jYXRpb24uaGVhcCgpLm9wZXJhbmQoKSwg
bm9kZSk7CisgICAgICAgIG1fZGVmKFZpcnR1YWxSZWdpc3Rlcihsb2NhdGlvbi5oZWFwKCkucGF5
bG9hZCgpLnZhbHVlMzIoKSksIG5vZGUpOwogICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGNhbGxJZkFwcHJvcHJpYXRlKGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IsIE9wZXJhbmQgb3BlcmFuZCkKKyAgICB2b2lkIGNhbGxJZkFwcHJv
cHJpYXRlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQog
ICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpICYmIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihvcGVyYW5kLnRvTG9jYWwoKSkgPj0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRI
ZWFkLm51bWJlck9mTG9jYWxzKCkpCiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5j
cHAKaW5kZXggNWI0Zjk5MjkzNDExNzljMjA0OTk1MmJkYzM4Njk2NTI5ZjBmYzMxMS4uNDQ3ZTI0
ZTJhMTE2MzM3YzgzZTNiYWEzMTI3MzU3OTJiOTA0NzI5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcApA
QCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICBjb25zdCBPcGVyYW5kczxPcHRpb25hbDxKU1ZhbHVlPj4mIG11c3RIYW5kbGVWYWx1
ZXMgPSBtX2dyYXBoLm1fcGxhbi5tdXN0SGFuZGxlVmFsdWVzKCk7CiAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICBPcGVyYW5kIG9wZXJhbmQgPSBtdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJ
bmRleChpKTsKKyAgICAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMu
b3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHZh
bHVlID0gbXVzdEhhbmRsZVZhbHVlc1tpXTsKICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKaW5kZXgg
ZjkyYWU5ZGIwYmQ3ZDM4MWUwZWI1ZmEyNzYwNzZkMWE0MTlkMDM2NC4uZjExY2U3NjRiMzk2ZDlh
M2E5ZmY3YThkNWVjNGMxOGFlMTFlNDcwNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTEz
NzQsNyArMTM3NCw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAg
Y2FzZSBab21iaWVIaW50OgogICAgICAgICBjYXNlIEV4aXRPSzoKLSAgICAgICAgY2FzZSBWYXJh
cmdzTGVuZ3RoOgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIEZvcndh
cmRWYXJhcmdzOgogICAgICAgICBjYXNlIFB1dER5bmFtaWNWYXI6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCmluZGV4IGM5
NzkzMzVhMzAxZWY0NmI5OTIzZWRmZjU1NmJlNzNkNTdmNThmMzEuLjg3Mjc3NjBjNmVjYmRiMzJl
YWU2MDNiYWNiZDEwMDM3NGQ4MTRmZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCkBAIC00Miw4ICs0MiwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIG5hbWVzcGFjZSB7CiAKK25hbWVzcGFj
ZSBERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVybmFsIHsKK3N0YXRpYyBjb25zdGV4cHIgYm9v
bCB2ZXJib3NlID0gZmFsc2U7Cit9CisKIGNsYXNzIFB1dFN0YWNrU2lua2luZ1BoYXNlIDogcHVi
bGljIFBoYXNlIHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwog
cHVibGljOgogICAgIFB1dFN0YWNrU2lua2luZ1BoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAg
OiBQaGFzZShncmFwaCwgIlB1dFN0YWNrIHNpbmtpbmciKQpAQCAtNzAsNyArNzMsNyBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIHRoZSBzdGFjay4gSXQncyBub3QgY2xlYXIgdG8gbWUgaWYgdGhpcyBp
cyBpbXBvcnRhbnQgb3Igbm90LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ1Mjk2CiAgICAgICAgIAotICAgICAgICBpZiAodmVyYm9zZSkgewor
ICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkgewog
ICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYmVmb3JlIFB1dFN0YWNrIHNpbmtpbmc6XG4iKTsK
ICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CkBAIC04NSw4ICs4OCwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIEJsb2NrTWFwPE9wZXJhbmRzPGJvb2w+PiBsaXZlQXRUYWlsKG1f
Z3JhcGgpOwogICAgICAgICAKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3Jh
cGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewotICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9j
a10gPSBPcGVyYW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQs
IGZhbHNlKTsKLSAgICAgICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4o
T3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCBmYWxzZSk7CisgICAgICAgICAg
ICBsaXZlQXRIZWFkW2Jsb2NrXSA9IE9wZXJhbmRzPGJvb2w+KE9wZXJhbmRzTGlrZSwgYmxvY2st
PnZhcmlhYmxlc0F0SGVhZCk7CisgICAgICAgICAgICBsaXZlQXRUYWlsW2Jsb2NrXSA9IE9wZXJh
bmRzPGJvb2w+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdLmZpbGwoZmFsc2UpOworICAgICAg
ICAgICAgbGl2ZUF0VGFpbFtibG9ja10uZmlsbChmYWxzZSk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIGJvb2wgY2hhbmdlZDsKQEAgLTEwMSwzNCArMTA3LDMzIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBPcGVyYW5kczxib29sPiBsaXZlID0gbGl2ZUF0VGFpbFtibG9ja107CiAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBu
b2RlSW5kZXgtLTspIHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5h
dChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2Up
CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJMaXZlIGF0ICIsIG5vZGUsICI6ICIs
IGxpdmUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
VmVjdG9yPE9wZXJhbmQsIDQ+IHJlYWRzOwotICAgICAgICAgICAgICAgICAgICBWZWN0b3I8T3Bl
cmFuZCwgND4gd3JpdGVzOwotICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIg
PSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8Vmly
dHVhbFJlZ2lzdGVyLCA0PiByZWFkczsKKyAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFZpcnR1
YWxSZWdpc3RlciwgND4gd3JpdGVzOworICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhh
bmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZl
cmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIG9wZXJh
bmQsICIgaXMgbGl2ZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IHJlYWRzLmFwcGVuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgfTsKIAotICAgICAg
ICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoT3BlcmFuZCBvcGVyYW5kKSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNI
ZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvIG9wID0gbm9kZS0+b3AoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG9wID09IFB1dFN0YWNrIHx8IG9wID09IExvYWRWYXJhcmdzIHx8
IG9wID09IEZvcndhcmRWYXJhcmdzIHx8IG9wID09IEtpbGxTdGFjayk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFB1dFN0YWNrIHx8IG5vZGUt
Pm9wKCkgPT0gTG9hZFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyB8fCBu
b2RlLT5vcCgpID09IEtpbGxTdGFjayk7CiAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXMu
YXBwZW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAg
ICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCiAgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCB3cml0ZUhhbmRsZXIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBbJl0gKE9wZXJhbmQsIExhenlOb2RlKSB7IH0pOworICAgICAgICAgICAgICAg
ICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIsIExhenlOb2RlKSB7IH0pOwogCi0gICAgICAg
ICAgICAgICAgICAgIGZvciAoT3BlcmFuZCBvcGVyYW5kIDogd3JpdGVzKQorICAgICAgICAgICAg
ICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kIDogd3JpdGVzKQogICAgICAgICAg
ICAgICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gZmFsc2U7Ci0gICAgICAgICAg
ICAgICAgICAgIGZvciAoT3BlcmFuZCBvcGVyYW5kIDogcmVhZHMpCisgICAgICAgICAgICAgICAg
ICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgOiByZWFkcykKICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IHRydWU7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIApAQCAtMjI5LDcgKzIzNCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBPcGVyYW5kczxGbHVzaEZvcm1hdD4gZGVmZXJyZWQgPSBkZWZlcnJlZEF0SGVhZFti
bG9ja107CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBub2Rl
IDogKmJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmVkIGF0ICIsIG5vZGUsICI6
IiwgZGVmZXJyZWQsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0U3RhY2spIHsKQEAgLTI1Niw3ICsyNjEsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMzk4CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
aXNDb25mbGljdGluZyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3Bl
cmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFuZCkgPT0gQ29uZmxpY3RpbmdGbHVz
aDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnN0
YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkgPT0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25FbmFi
bGVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBu
b2RlLCAhaXNDb25mbGljdGluZyk7CkBAIC0yNzAsMjAgKzI3NSwxNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBmcm9tLgogICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBQdXRT
dGFjaykgewotICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kID0gbm9kZS0+
c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nTG5JZih2ZXJib3NlLCAiU2V0dGluZyBmbHVzaCBmb3JtYXQgZm9yICIsIG5vZGUsICIgYXQg
b3BlcmFuZCAiLCBvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsOwogICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpLT5mb3JtYXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5vcCgpID09IEtpbGxTdGFjaykgewog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzaW5rIGEgUHV0U3Rh
Y2sgcGFzdCBhIEtpbGxTdGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiS2lsbGluZyBzdGFjayBm
b3IgIiwgbm9kZS0+dW5saW5rZWRPcGVyYW5kKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBDb25mbGljdGluZ0Zs
dXNoOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxp
bmtlZExvY2FsKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3Bl
cmFuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFz
ZUludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IkZvciAiLCBub2RlLCAiIGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CkBAIC0yOTEsMTggKzI5MywxNiBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gRGVhZEZsdXNoOwogICAg
ICAgICAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gd3JpdGVIYW5k
bGVyID0gWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVCghb3BlcmFuZC5pc1RtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB3cml0ZUhh
bmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUt
Pm9wKCkgPT0gVmFyYXJnc0xlbmd0aCB8fCBub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5v
ZGUtPm9wKCkgPT0gRm9yd2FyZFZhcmFyZ3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuSWYodmVyYm9zZSwgIldyaXRpbmcgZGVhZCBmbHVzaCBmb3IgIiwgbm9kZSwgIiBhdCBv
cGVyYW5kICIsIG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobm9kZS0+b3AoKSA9PSBMb2FkVmFyYXJncyB8fCBub2RlLT5vcCgpID09IEZvcndhcmRWYXJh
cmdzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkg
PSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgd3JpdGVIYW5kbGVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kLCBMYXp5Tm9kZSkgeyB9KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBMYXp5Tm9kZSkg
eyB9KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgaWYgKGRlZmVycmVkID09IGRlZmVycmVkQXRUYWlsW2Jsb2NrXSkKQEAgLTMxMywxMyArMzEz
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IGRlZmVycmVkLnNpemUoKTsgaS0tOykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgIiwgZGVmZXJyZWQub3BlcmFuZEZvckluZGV4KGkpLCAi
IGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSwg
IjogIiwgZGVmZXJyZWRbaV0sICIgYW5kICIsIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0s
ICIgbWVyZ2VzIHRvICIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNr
U2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgIiwgVmlydHVhbFJlZ2lzdGVyKGRlZmVycmVkLm9wZXJh
bmRGb3JJbmRleChpKSksICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVy
RHVtcChzdWNjZXNzb3IpLCAiOiAiLCBkZWZlcnJlZFtpXSwgIiBhbmQgIiwgZGVmZXJyZWRBdEhl
YWRbc3VjY2Vzc29yXVtpXSwgIiBtZXJnZXMgdG8gIik7CiAKICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0gPQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1lcmdlKGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sIGRlZmVycmVkW2ldKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhh
c2VJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sICJcbiIpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMzUyLDEwICszNTIsMTAgQEAgcHVibGljOgogICAg
ICAgICAKICAgICAgICAgT3BlcmFuZHM8U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBvcGVyYW5k
VG9WYXJpYWJsZSgKICAgICAgICAgICAgIE9wZXJhbmRzTGlrZSwgbV9ncmFwaC5ibG9jaygwKS0+
dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgVmVjdG9yPE9wZXJhbmQ+IGluZGV4VG9PcGVyYW5k
OworICAgICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyPiBpbmRleFRvT3BlcmFuZDsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5zaXpl
KCk7IGktLTspIHsKLSAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG1fZ3JhcGguYmxvY2so
MCktPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSk7Ci0KKyAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5v
cGVyYW5kRm9ySW5kZXgoaSkpOworICAgICAgICAgICAgCiAgICAgICAgICAgICBTU0FDYWxjdWxh
dG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBzc2FDYWxjdWxhdG9yLm5ld1ZhcmlhYmxlKCk7CiAg
ICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG9wZXJhbmQpID0gdmFyaWFibGU7
CiAgICAgICAgICAgICBBU1NFUlQoaW5kZXhUb09wZXJhbmQuc2l6ZSgpID09IHZhcmlhYmxlLT5p
bmRleCgpKTsKQEAgLTM3MCwxMiArMzcwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBj
YXNlIFB1dFN0YWNrOgogICAgICAgICAgICAgICAgICAgICBwdXRTdGFja3NUb1NpbmsuYWRkKG5v
ZGUpOwogICAgICAgICAgICAgICAgICAgICBzc2FDYWxjdWxhdG9yLm5ld0RlZigKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nl
c3NEYXRhKCktPm9wZXJhbmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFy
aWFibGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgYmxvY2ssIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgICAg
ICAgICAgICAgICAgIHNzYUNhbGN1bGF0b3IubmV3RGVmKAotICAgICAgICAgICAgICAgICAgICAg
ICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3Bl
cmFuZCksCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5k
KG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICBibG9jaywgbm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CkBAIC0zODYsNyArMzg2LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAg
ICAgc3NhQ2FsY3VsYXRvci5jb21wdXRlUGhpcygKICAgICAgICAgICAgIFsmXSAoU1NBQ2FsY3Vs
YXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSogewot
ICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxl
LT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGlu
ZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBpZiAoIWxpdmVBdEhlYWRbYmxvY2tdLm9wZXJhbmQob3BlcmFuZCkpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzk3LDcgKzM5Nyw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBpZiAoIWlzQ29uY3JldGUoZm9ybWF0KSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVy
Ym9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQWRkaW5nIFBoaSBmb3IgIiwgb3Bl
cmFuZCwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICJcbiIpOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY0hl
YXBUb3AsIFBoaSwgYmxvY2stPmF0KDApLT5vcmlnaW4ud2l0aEludmFsaWRFeGl0KCkpOwpAQCAt
NDExLDcgKzQxMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1hcHBpbmcuZmlsbChudWxscHRy
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1hcHBpbmcuc2l6
ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgT3BlcmFuZCBvcGVyYW5kKG1hcHBpbmcub3Bl
cmFuZEZvckluZGV4KGkpKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZChtYXBwaW5nLm9wZXJhbmRGb3JJbmRleChpKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gb3BlcmFuZFRvVmFy
aWFibGUub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpE
ZWYqIGRlZiA9IHNzYUNhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHZhcmlhYmxl
KTsKQEAgLTQyMSwxNSArNDIxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBtYXBwaW5n
Lm9wZXJhbmQob3BlcmFuZCkgPSBkZWYtPnZhbHVlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgaWYgKERGR1B1dFN0
YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiTWFwcGluZyBhdCB0b3Agb2YgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiOiAiLCBtYXBwaW5n
LCAiXG4iKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpE
ZWYqIHBoaURlZiA6IHNzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJsb2NrKSkgewotICAgICAg
ICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3BoaURlZi0+dmFyaWFi
bGUoKS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
PSBpbmRleFRvT3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoMCwgcGhpRGVmLT52
YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgICAgICBpZiAoREZHUHV0U3RhY2tTaW5raW5nUGhhc2VJbnRlcm5hbDo6dmVy
Ym9zZSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTWFwcGluZyAiLCBvcGVyYW5k
LCAiIHRvICIsIHBoaURlZi0+dmFsdWUoKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgbWFwcGlu
Zy5vcGVyYW5kKG9wZXJhbmQpID0gcGhpRGVmLT52YWx1ZSgpOwogICAgICAgICAgICAgfQpAQCAt
NDM3LDE1ICs0MzcsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgZGVmZXJyZWQgPSBkZWZlcnJl
ZEF0SGVhZFtibG9ja107CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7
IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUlu
dGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJEZWZlcnJlZCBh
dCAiLCBub2RlLCAiOiIsIGRlZmVycmVkLCAiXG4iKTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIFB1
dFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5v
ZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBPcGVyYW5kIG9wZXJh
bmQgPSBkYXRhLT5vcGVyYW5kOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
b3BlcmFuZCA9IGRhdGEtPmxvY2FsOwogICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVy
YW5kKG9wZXJhbmQpID0gZGF0YS0+Zm9ybWF0OwotICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50
ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBNYXBw
aW5nICIsIG9wZXJhbmQsICIgdG8gIiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAiIGF0ICIsIG5v
ZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkg
PSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
NDUzLDE2ICs0NTMsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrQWNjZXNz
RGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAg
ICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpOwor
ICAgICAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBkZWZlcnJlZC5vcGVyYW5k
KGRhdGEtPmxvY2FsKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NvbmNyZXRlKGZvcm1h
dCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZlcnJlZC5vcGVyYW5kKGRhdGEtPm9wZXJhbmQpICE9IENvbmZsaWN0aW5nRmx1c2gsIGRl
ZmVycmVkLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmVycmVkLm9wZXJhbmQoZGF0YS0+bG9jYWwpICE9IENvbmZsaWN0aW5nRmx1c2gsIGRl
ZmVycmVkLm9wZXJhbmQoZGF0YS0+bG9jYWwpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGVyZSBpcyBubyBkZWZlcnJh
bC4gTm8gZGVmZXJyYWwgbWVhbnMgdGhhdCB0aGUgbW9zdAogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYXV0aG9yaXRhdGl2ZSB2YWx1ZSBmb3IgdGhpcyBzdGFjayBzbG90IGlzIHdoYXQgaXMg
c3RvcmVkIGluIHRoZSBzdGFjay4gU28sCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBrZWVw
IHRoZSBHZXRTdGFjay4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChk
YXRhLT5vcGVyYW5kKSA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9w
ZXJhbmQoZGF0YS0+bG9jYWwpID0gbm9kZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNDcyLDIw
ICs0NzIsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIHN0b3JlZCBh
bmQgZ2V0IHJpZCBvZiB0aGUgR2V0U3RhY2suCiAgICAgICAgICAgICAgICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbm9kZSwgZm9ybWF0ID09IGRhdGEtPmZvcm1hdCwgZm9ybWF0LCBkYXRhLT5m
b3JtYXQpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgTm9kZSog
aW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQoZGF0YS0+b3BlcmFuZCk7CisgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIGluY29taW5nID0gbWFwcGluZy5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBpbmNvbWluZy0+ZGVmYXVsdEVkZ2Uo
KTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRlbnRpdHkoKTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAg
ICAgY2FzZSBLaWxsU3RhY2s6IHsKLSAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFu
ZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKSkgPSBDb25mbGljdGluZ0ZsdXNoOworICAgICAgICAg
ICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBDb25m
bGljdGluZ0ZsdXNoOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVmYXVsdDogewotICAgICAg
ICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdQdXRTdGFja1NpbmtpbmdQaGFzZUludGVy
bmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkZvciAi
LCBub2RlLCAiIGVzY2FwaW5nICIsIG9wZXJhbmQsICJcbiIpOwogCiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQpAQCAtNDk5LDcgKzQ5OSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBHb3R0YSBpbnNlcnQgYSBQdXRTdGFjay4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiSW5zZXJ0aW5nIGEgUHV0U3RhY2sgZm9yICIsIG9wZXJh
bmQsICIgYXQgIiwgbm9kZSwgIlxuIik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUq
IGluY29taW5nID0gbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpOwpAQCAtNTEzLDcgKzUxMyw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFu
ZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byB3cml0ZUhhbmRsZXIgPSBbJl0gKE9wZXJhbmQgb3BlcmFuZCkgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvIHdyaXRlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gTG9hZFZhcmFyZ3MgYW5kIEZvcndhcmRWYXJhcmdzIGFyZSB1bmNvbmRpdGlvbmFs
IHdyaXRlcyB0byB0aGUgc3RhY2sKQEAgLTUyMSwxMyArNTIxLDEzIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGxvY2F0aW9ucyB0aGV5IHdyaXRlIHRvLiBUaGlzIG1ha2Vz
IHRob3NlIHN0YWNrIGxvY2F0aW9ucyBkZWFkIHJpZ2h0IAogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYmVmb3JlIGEgTG9hZFZhcmFyZ3MvRm9yd2FyZFZhcmFyZ3MuIFRoaXMgbWVhbnMgd2Ug
c2hvdWxkIG5ldmVyIHNpbmsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFB1dFN0YWNrcyBy
aWdodCB0byB0aGlzIHBvaW50LgotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobm9kZS0+b3AoKSA9PSBWYXJhcmdzTGVuZ3RoIHx8IG5vZGUtPm9wKCkgPT0gTG9hZFZhcmFy
Z3MgfHwgbm9kZS0+b3AoKSA9PSBGb3J3YXJkVmFyYXJncyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IExvYWRWYXJhcmdzIHx8IG5vZGUtPm9w
KCkgPT0gRm9yd2FyZFZhcmFyZ3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQu
b3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgfTsKIAog
ICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgd3JpdGVIYW5kbGVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChPcGVyYW5kLCBMYXp5Tm9kZSkgeyB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBMYXp5Tm9kZSkgeyB9
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfSB9CiAgICAg
ICAgICAgICB9CkBAIC01MzksOCArNTM5LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGZv
ciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBzc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9j
ayhzdWNjZXNzb3JCbG9jaykpIHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9
IHBoaURlZi0+dmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOwotICAgICAgICAgICAgICAgICAg
ICBPcGVyYW5kIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6
OnZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDcmVhdGluZyBVcHNp
bG9uIGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+IiwgcG9p
bnRlckR1bXAoc3VjY2Vzc29yQmxvY2spLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgRmx1
c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yQmxvY2tdLm9wZXJhbmQo
b3BlcmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0
ciwgaXNDb25jcmV0ZShmb3JtYXQpLCBmb3JtYXQpOwpAQCAtNTg1LDcgKzU4NSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKHZlcmJv
c2UpIHsKKyAgICAgICAgaWYgKERGR1B1dFN0YWNrU2lua2luZ1BoYXNlSW50ZXJuYWw6OnZlcmJv
c2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGFmdGVyIFB1dFN0YWNrIHNpbmtpbmc6
XG4iKTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKaW5kZXgg
Y2E5OTAyNjFjOTMzNWI5OTJlZDA2Mjk5Zjc1MTM5MWUwYTI3N2Y3MS4uMjNkNGI5NDUzMTA2NjY1
MGE4YWQ5MGVlNTFhYTViZGIyZTI5Y2VjNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAgIEdl
dFN0YWNrLCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9n
cmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyaWFibGUtPm9wZXJhbmQoKSwgdmFyaWFibGUt
PmZsdXNoRm9ybWF0KCkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFw
aC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyaWFibGUtPmxvY2FsKCksIHZhcmlhYmxlLT5mbHVz
aEZvcm1hdCgpKSkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50R2V0dGVycy5hZGQoY2hpbGROb2RlKTsK
ICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudE1hcHBpbmcuYWRkKG5vZGUsIGNoaWxkTm9k
ZSk7CkBAIC0xNzgsNyArMTc4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhbc3NhVmFyaWFibGUt
PmluZGV4KCldOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFBydW5lIGJ5
IGxpdmVuZXNzLiBUaGlzIGRvZXNuJ3QgYnV5IHVzIG11Y2ggb3RoZXIgdGhhbiBjb21waWxlIHRp
bWVzLgotICAgICAgICAgICAgICAgIE5vZGUqIGhlYWROb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpOworICAgICAgICAgICAgICAgIE5vZGUq
IGhlYWROb2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKTsKICAgICAgICAgICAgICAgICBpZiAoIWhlYWROb2RlKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMzAwLDcgKzMwMCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+cmVwbGFjZW1lbnQoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nOiAiLCB2YWx1ZUZvck9wZXJhbmQub3BlcmFu
ZEZvckluZGV4KGkpLCAiIC0+ICIsIG5vZGUsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiTWFwcGluZzogIiwgVmlydHVhbFJlZ2lzdGVyKHZhbHVlRm9yT3BlcmFuZC5v
cGVyYW5kRm9ySW5kZXgoaSkpLCAiIC0+ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAg
ICAgICB2YWx1ZUZvck9wZXJhbmRbaV0gPSBub2RlOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KQEAgLTMxMywxMSArMzEzLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUluZGV4W3BoaURl
Zi0+dmFyaWFibGUoKS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KHBoaUluc2VydGlvblBvaW50LCBwaGlEZWYtPnZhbHVl
KCkpOwotICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5v
cGVyYW5kKCkpID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAgICAgIHZhbHVlRm9yT3Bl
cmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IHBoaURlZi0+dmFsdWUoKTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAog
ICAgICAgICAgICAgICAgICAgICBwaGlJbnNlcnRpb25Qb2ludCwgU3BlY05vbmUsIE1vdkhpbnQs
IGJsb2NrLT5hdCgwKS0+b3JpZ2luLndpdGhJbnZhbGlkRXhpdCgpLAotICAgICAgICAgICAgICAg
ICAgICBPcEluZm8odmFyaWFibGUtPm9wZXJhbmQoKSksIHBoaURlZi0+dmFsdWUoKS0+ZGVmYXVs
dEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZS0+bG9jYWwoKS5v
ZmZzZXQoKSksIHBoaURlZi0+dmFsdWUoKS0+ZGVmYXVsdEVkZ2UoKSk7CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGlmIChibG9jay0+YXQoMCktPm9yaWdpbi5leGl0T0spCkBAIC0zMzcs
NyArMzM3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDogewogICAg
ICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbFN0YWNrLCBub2RlLT5vcmlnaW4s
Ci0gICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obm9kZS0+dW5saW5rZWRPcGVyYW5kKCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT51bmxpbmtlZExvY2FsKCku
b2Zmc2V0KCkpKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGZh
bHNlOyAvLyBLaWxsU3RhY2sgY2xvYmJlcnMgZXhpdC4KICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzQ5LDE5ICszNDksMTkgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICBpZiAoISEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVJc0ZsdXNoZWQpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QdXRTdGFjaygKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCgKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPm9wZXJhbmQoKSwgdmFyaWFi
bGUtPmZsdXNoRm9ybWF0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
aWFibGUtPmxvY2FsKCksIHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKG1fZ3Jh
cGgpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nOiAiLCB2YXJpYWJs
ZS0+b3BlcmFuZCgpLCAiIC0+ICIsIGNoaWxkLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAg
dmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkgPSBjaGlsZDsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIHZhcmlhYmxlLT5sb2Nh
bCgpLCAiIC0+ICIsIGNoaWxkLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JP
cGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gY2hpbGQ7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgY2FzZSBHZXRTdGFjazogewogICAgICAgICAgICAgICAgICAgICBBU1NF
UlQobV9hcmd1bWVudEdldHRlcnMuY29udGFpbnMobm9kZSkpOwotICAgICAgICAgICAgICAgICAg
ICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+b3BlcmFu
ZCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZChu
b2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpID0gbm9kZTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTM3
MSw4ICszNzEsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICBub2RlLT5yZW1vdmUobV9ncmFwaCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiUmVwbGFjaW5nIG5vZGUg
Iiwgbm9kZSwgIiB3aXRoICIsIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVy
YW5kKCkpLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVwbGFjZW1lbnQo
dmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPm9wZXJhbmQoKSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiUmVwbGFjaW5nIG5vZGUgIiwgbm9kZSwgIiB3aXRoICIs
IHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSwgIlxuIik7CisgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlcGxhY2VtZW50KHZhbHVlRm9yT3BlcmFuZC5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0zODUsNyArMzg1LDcgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxvY2FsOiB7CiAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7
CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCkgPSB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgpKS0+ZGVmYXVs
dEVkZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSB2YWx1ZUZvck9w
ZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSktPmRlZmF1bHRFZGdlKCk7CiAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPnJlbW92ZShtX2dyYXBoKTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDI1LDEyICs0MjUsMTIgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICAvLyBpcyBub3QgZXhpdE9LLgogICAgICAgICAgICAgICAgICAg
ICBVc2VLaW5kIHVzZUtpbmQgPSB1bmNoZWNrZWRVc2VLaW5kRm9yKGZvcm1hdCk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIkluc2VydGluZyBVcHNpbG9uIGZv
ciAiLCB2YXJpYWJsZS0+b3BlcmFuZCgpLCAiIHByb3BhZ2F0aW5nICIsIHZhbHVlRm9yT3BlcmFu
ZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLCAiIHRvICIsIHBoaU5vZGUpOworICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiSW5zZXJ0aW5nIFVwc2lsb24gZm9y
ICIsIHZhcmlhYmxlLT5sb2NhbCgpLCAiIHByb3BhZ2F0aW5nICIsIHZhbHVlRm9yT3BlcmFuZC5v
cGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSwgIiB0byAiLCBwaGlOb2RlKTsKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CiAgICAgICAgICAgICAgICAgICAgICAgICB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIFNwZWNOb25l
LCBVcHNpbG9uLCB1cHNpbG9uT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KHBoaU5vZGUpLCBFZGdlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3Bl
cmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1c2VLaW5kKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZl
VG9FeGVjdXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aAppbmRleCAyMDMzODdiNjY1NjQ4NmMwNjUzOTllMWUxY2RiZTBiOWMzNTVlNmVhLi5mOTFiYTQ4
ZjU4ODlkNTQzY2Y5OWJmYWJmNDdkMWMwMzM4YTQ5ZWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMzIzLDcgKzMyMyw2IEBAIGJvb2wgc2Fm
ZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSwgYm9vbCBpZ25vCiAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgog
ICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgY2FzZSBD
b25zdHJ1Y3RWYXJhcmdzOgotICAgIGNhc2UgVmFyYXJnc0xlbmd0aDoKICAgICBjYXNlIExvYWRW
YXJhcmdzOgogICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgIGNhc2UgQ29uc3RydWN0
Rm9yd2FyZFZhcmFyZ3M6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCmluZGV4IDA3MDI0Y2RiNDA2NTQ5YjI2YWYyNzdmMzMzODk1NTI1ZTY0YmRl
NDAuLmViZjNiNmJjZWY4YTUyN2M5M2M4ZmQzOGEzZGEyYmY1MWM0ZTRlYWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0xNzc4LDcg
KzE3NzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludChOb2RlKiBub2Rl
KQogICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgIG5vdGljZU9T
UkJpcnRoKGNoaWxkKTsKICAgICAKLSAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxl
RXZlbnQ6Om1vdkhpbnQoTWluaWZpZWRJRChjaGlsZCksIG5vZGUtPnVubGlua2VkT3BlcmFuZCgp
KSk7CisgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50Ojptb3ZIaW50KE1p
bmlmaWVkSUQoY2hpbGQpLCBub2RlLT51bmxpbmtlZExvY2FsKCkpKTsKIH0KIAogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUNoZWNrTmV1dGVyZWQoTm9kZSogbm9kZSkKQEAgLTE4NDMsNyAr
MTg0Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2soKQogICAg
IG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKG1fYmxvY2spOwogICAgIAogICAgIGZvciAoc2l6ZV90
IGkgPSBtX2Jsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIE9w
ZXJhbmQgb3BlcmFuZCA9IG1fYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgo
aSk7CisgICAgICAgIGludCBvcGVyYW5kID0gbV9ibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJh
bmRGb3JJbmRleChpKTsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPnZhcmlhYmxlc0F0
SGVhZFtpXTsKICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgY29udGludWU7IC8vIE5v
IG5lZWQgdG8gcmVjb3JkIGRlYWQgU2V0TG9jYWwncy4KQEAgLTE4NTMsOCArMTg1MywxMSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKCkKICAgICAgICAgaWYgKCFu
b2RlLT5yZWZDb3VudCgpKQogICAgICAgICAgICAgY29udGludWU7IC8vIE5vIG5lZWQgdG8gcmVj
b3JkIGRlYWQgU2V0TG9jYWwncy4KICAgICAgICAgZm9ybWF0ID0gZGF0YUZvcm1hdEZvcih2YXJp
YWJsZS0+Zmx1c2hGb3JtYXQoKSk7Ci0gICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwg
bm9kZSwgIW9wZXJhbmQuaXNBcmd1bWVudCgpIHx8IG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCku
dG9Bcmd1bWVudCgpID49IDApOwotICAgICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlh
YmxlRXZlbnQ6OnNldExvY2FsKG9wZXJhbmQsIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwgZm9y
bWF0KSk7CisgICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coCisgICAgICAgICAgICBWYXJp
YWJsZUV2ZW50OjpzZXRMb2NhbCgKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIob3Bl
cmFuZCksCisgICAgICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLAorICAgICAg
ICAgICAgICAgIGZvcm1hdCkpOwogICAgIH0KIAogICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbigp
OwpAQCAtMTkzNCw4ICsxOTM3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVu
dFR5cGVzKCkKICAgICAgICAgaWYgKGZvcm1hdCA9PSBGbHVzaGVkSlNWYWx1ZSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlciA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+b3BlcmFuZCgpLnZpcnR1YWxSZWdpc3Rlcigp
OwotICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyLmlzQXJndW1lbnQoKSk7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxv
Y2FsKCk7CiAKICAgICAgICAgSlNWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZSA9IEpTVmFsdWVTb3Vy
Y2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAgIApA
QCAtNzM1OCw1NSArNzM2MCw1NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0RnVu
Y3Rpb25OYW1lKE5vZGUqIG5vZGUpCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVWYXJhcmdzTGVuZ3RoKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlTG9hZFZhcmFyZ3MoTm9kZSogbm9kZSkKIHsKICAgICBMb2FkVmFy
YXJnc0RhdGEqIGRhdGEgPSBub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKIAogICAgIEpTVmFsdWVS
ZWdzIGFyZ3VtZW50c1JlZ3M7Ci0gICAgbG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0g
ICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnRzKHRoaXMsIG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkp
OwotICAgIGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsKLSAgICBmbHVz
aFJlZ2lzdGVycygpOwotICAgIHVubG9jayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAg
eworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudHModGhpcywgbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICBhcmd1bWVudHNSZWdzID0gYXJndW1lbnRzLmpzVmFsdWVSZWdzKCk7CisgICAg
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgfQogCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25TaXplT2ZWYXJhcmdzLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNldCk7CiAgICAgbV9qaXQuZXhj
ZXB0aW9uQ2hlY2soKTsKIAogICAgIGxvY2soR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAg
IEdQUlRlbXBvcmFyeSBhcmdDb3VudEluY2x1ZGluZ1RoaXModGhpcyk7Ci0gICAgR1BSUmVnIGFy
Z0NvdW50SW5jbHVkaW5nVGhpc0dQUiA9IGFyZ0NvdW50SW5jbHVkaW5nVGhpcy5ncHIoKTsKKyAg
ICB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsKKyAg
ICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICB9CiAgICAgdW5sb2NrKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKIAotICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIsIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQUik7CisgICAgLy8gRklYTUU6
IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBsZW5ndGgg
cHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQorICAgIC8vIGZyb20gdGhlIHN0YW5kcG9pbnQg
b2YgdGhlIFZNJ3MgaW50ZWdyaXR5LCBidXQgaXQncyBzdWJ0bHkgd3JvbmcgZnJvbSBhIHNwZWMg
Y29tcGxpYW5jZQorICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9uIHdvdWxkIGJl
IG9uZSB3aGVyZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJncyByaWdodAor
ICAgIC8vIHBhc3QgdGhlIHNpemluZy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQxNDQ4CiAKLSAgICBpbnQzMlJlc3VsdChhcmdDb3VudEluY2x1ZGlu
Z1RoaXNHUFIsIG5vZGUpOyAgCi19CisgICAgR1BSUmVnIGFyZ0NvdW50SW5jbHVkaW5nVGhpc0dQ
UiA9CisgICAgICAgIEpJVENvbXBpbGVyOjpzZWxlY3RTY3JhdGNoR1BSKEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBhcmd1bWVudHNSZWdzKTsKIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUxvYWRWYXJhcmdzKE5vZGUqIG5vZGUpCi17Ci0gICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0g
bm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0KLSAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgYXJndW1lbnRDb3VudCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7ICAgIAotICAgIEpTVmFsdWVP
cGVyYW5kIGFyZ3VtZW50cyh0aGlzLCBub2RlLT5hcmd1bWVudHNDaGlsZCgpKTsKLSAgICBHUFJS
ZWcgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBhcmd1bWVudENvdW50LmdwcigpOwotICAg
IEpTVmFsdWVSZWdzIGFyZ3VtZW50c1JlZ3MgPSBhcmd1bWVudHMuanNWYWx1ZVJlZ3MoKTsKKyAg
ICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBh
cmdDb3VudEluY2x1ZGluZ1RoaXNHUFIpOwogCiAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAg
ICAgVmFyYXJnc092ZXJmbG93LCBKU1ZhbHVlU291cmNlKCksIEVkZ2UoKSwgbV9qaXQuYnJhbmNo
VGVzdDMyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sCi0gICAgICAgICAgICBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpT
VmFsdWVTb3VyY2UoKSwgRWRnZSgpLCBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZSwKKyAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAor
ICAgICAgICAgICAgYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSKSk7CiAKICAgICBzcGVjdWxhdGlv
bkNoZWNrKAogICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIEpTVmFsdWVTb3VyY2UoKSwgRWRnZSgp
LCBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwKLSAg
ICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLAorICAgICAgICAgICAgYXJnQ291
bnRJbmNsdWRpbmdUaGlzR1BSLAogICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGRhdGEtPmxpbWl0
KSkpOwogCi0gICAgZmx1c2hSZWdpc3RlcnMoKTsKLQotICAgIG1faml0LnN0b3JlMzIoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGRhdGEtPm1hY2hp
bmVDb3VudCkpOworICAgIG1faml0LnN0b3JlMzIoYXJnQ291bnRJbmNsdWRpbmdUaGlzR1BSLCBK
SVRDb21waWxlcjo6cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKIAotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
LCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFyZ3VtZW50c1JlZ3MsIGRhdGEtPm9mZnNl
dCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCBkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCksIGFyZ3VtZW50c1JlZ3MsIGRh
dGEtPm9mZnNldCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIGRhdGEtPm1hbmRhdG9yeU1pbmlt
dW0pOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBub1Jlc3VsdChub2RlKTsK
QEAgLTc0MTYsMTkgKzc0MTcsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZvcndh
cmRWYXJhcmdzKE5vZGUqIG5vZGUpCiB7CiAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9k
ZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWU7Ci0gICAgaWYgKG5vZGUtPmFyZ3VtZW50c0NoaWxkKCkpCi0gICAgICAgIGlubGluZUNhbGxG
cmFtZSA9IG5vZGUtPmFyZ3VtZW50c0NoaWxkKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUoKTsKKyAgICBpZiAobm9kZS0+Y2hpbGQxKCkpCisgICAgICAgIGlubGluZUNhbGxGcmFt
ZSA9IG5vZGUtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAg
ICAgZWxzZQogICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lKCk7CiAKLSAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgYXJn
dW1lbnRDb3VudCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSVGVtcG9yYXJ5IGxlbmd0
aCh0aGlzKTsKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgIEdQUlJl
ZyBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGFyZ3VtZW50Q291bnQuZ3ByKCk7Ci0gICAg
R1BSUmVnIGxlbmd0aEdQUiA9IGFyZ3VtZW50Q291bnQuZ3ByKCk7CisgICAgR1BSUmVnIGxlbmd0
aEdQUiA9IGxlbmd0aC5ncHIoKTsKICAgICBKU1ZhbHVlUmVncyB0ZW1wUmVncyA9IHRlbXAucmVn
cygpOwotICAgIAotICAgIG1faml0Lm1vdmUoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGxl
bmd0aEdQUik7CisgICAgICAgIAorICAgIGVtaXRHZXRMZW5ndGgoaW5saW5lQ2FsbEZyYW1lLCBs
ZW5ndGhHUFIsIC8qIGluY2x1ZGVUaGlzID0gKi8gdHJ1ZSk7CiAgICAgaWYgKGRhdGEtPm9mZnNl
dCkKICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKGRhdGEtPm9mZnNldCksIGxlbmd0
aEdQUik7CiAgICAgICAgIApAQCAtNzU4Nyw3ICs3NTg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlKQogICAgIGF1dG8qIGlu
bGluZUNhbGxGcmFtZSA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsK
ICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCiAgICAgICAgICYmICFpbmxpbmVDYWxsRnJhbWUtPmlz
VmFyYXJncygpKSB7Ci0gICAgICAgIGtub3duTGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsKKyAgICAg
ICAga25vd25MZW5ndGggPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzIC0gMTsKICAgICAgICAgbGVuZ3RoSXNLbm93biA9IHRydWU7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAga25vd25MZW5ndGggPSBVSU5UX01BWDsKQEAgLTEyNDkyLDcgKzEyNDkxLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKE5v
ZGUqIG5vZGUpCiAgICAgaWYgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbm9k
ZS0+YXJndW1lbnRzSW5saW5lQ2FsbEZyYW1lKCkpCiAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdp
c3RlciA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOwogICAgIGVsc2UK
LSAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXM7CisgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAg
ICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRSZWdp
c3RlciksIHJlc3VsdC5ncHIoKSk7CiAgICAgaW50MzJSZXN1bHQocmVzdWx0LmdwcigpLCBub2Rl
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaApp
bmRleCA0YTJmMGY3NDk2OTM4YWJjYjNiNjJiYjBmNjQwNDQ1OWI4ZjNiYzFmLi4yMjIzMDM0NDdl
YzQ2ZGNhNmYwOWM0Nzk5ODc5MzliNzYyYzgzMGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC0xMzk1LDcgKzEzOTUsNiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjb21waWxlU2V0RnVuY3Rpb25OYW1lKE5vZGUqKTsKICAgICB2b2lkIGNvbXBp
bGVOZXdSZWdleHAoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzKE5vZGUq
KTsKLSAgICB2b2lkIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKE5vZGUqKTsKICAgICB2b2lkIGNvbXBp
bGVMb2FkVmFyYXJncyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlQWN0aXZhdGlvbihO
b2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKE5vZGUqKTsKQEAg
LTE2NzQsMTYgKzE2NzMsMTUgQEAgcHVibGljOgogICAgIHZvaWQgY2FnZVR5cGVkQXJyYXlTdG9y
YWdlKEdQUlJlZywgR1BSUmVnKTsKICAgICAKICAgICB2b2lkIHJlY29yZFNldExvY2FsKAotICAg
ICAgICBPcGVyYW5kIGJ5dGVjb2RlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0
YUZvcm1hdCBmb3JtYXQpCisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBieXRlY29kZVJlZywgVmly
dHVhbFJlZ2lzdGVyIG1hY2hpbmVSZWcsIERhdGFGb3JtYXQgZm9ybWF0KQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKCFieXRlY29kZVJlZy5pc0FyZ3VtZW50KCkgfHwgYnl0ZWNvZGVSZWcudmlydHVh
bFJlZ2lzdGVyKCkudG9Bcmd1bWVudCgpID49IDApOwogICAgICAgICBtX3N0cmVhbS0+YXBwZW5k
QW5kTG9nKFZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKGJ5dGVjb2RlUmVnLCBtYWNoaW5lUmVnLCBm
b3JtYXQpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZWNvcmRTZXRMb2NhbChEYXRhRm9ybWF0
IGZvcm1hdCkKICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBt
X2N1cnJlbnROb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgcmVjb3JkU2V0TG9j
YWwodmFyaWFibGUtPm9wZXJhbmQoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLCBmb3JtYXQp
OworICAgICAgICByZWNvcmRTZXRMb2NhbCh2YXJpYWJsZS0+bG9jYWwoKSwgdmFyaWFibGUtPm1h
Y2hpbmVMb2NhbCgpLCBmb3JtYXQpOwogICAgIH0KIAogICAgIEdlbmVyYXRpb25JbmZvJiBnZW5l
cmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCmluZGV4IDUxNjI5MTc3OWJlYTQ0YTFhNjE4ZjdhNzU2ZGNhYWYzNjdlYWY1
OWQuLjllNjUwYzgzMjA3MWRkNzBmMjk5NGFiYzRhMjhiODUwYWJkNWZmNDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApA
QCAtMTgyOCw3ICsxODI4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKLSAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKTsKKyAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSk7CiAKICAgICAgICAgLy8gSWYgdGhlIENGQSBpcyB0cmFja2luZyB0aGlzIHZhcmlhYmxlIGFu
ZCBpdCBmb3VuZCB0aGF0IHRoZSB2YXJpYWJsZQogICAgICAgICAvLyBjYW5ub3QgaGF2ZSBiZWVu
IGFzc2lnbmVkLCB0aGVuIGRvbid0IGF0dGVtcHQgdG8gcHJvY2VlZC4KQEAgLTE5MTIsNyArMTkx
Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgWm9tYmllSGludDogewotICAgICAgICByZWNvcmRTZXRMb2NhbCht
X2N1cnJlbnROb2RlLT51bmxpbmtlZE9wZXJhbmQoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFG
b3JtYXREZWFkKTsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5r
ZWRMb2NhbCgpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERlYWQpOwogICAgICAgICBu
b1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzgzNCwxMSArMzgzNCw2
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgZW1p
dENhbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBWYXJhcmdzTGVuZ3RoOiB7
Ci0gICAgICAgIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKG5vZGUpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CiAgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJn
cyhub2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCA0NmIxMWRhYjIxZjUxMjNkNTA2ZGY1M2Nl
MzViMjQ3ZTUxZmU4YTNhLi40NDczOTI1NDA0NzI4ZGZhNjM3MTU3MTEzOTkxYmZjMWY0MzNiN2M2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKQEAgLTE5MzYsNyArMTkzNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldExvY2FsOiB7Ci0gICAg
ICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUtPm9wZXJhbmQo
KSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5vcGVyYW5kKG5vZGUt
PmxvY2FsKCkpOwogCiAgICAgICAgIC8vIElmIHRoZSBDRkEgaXMgdHJhY2tpbmcgdGhpcyB2YXJp
YWJsZSBhbmQgaXQgZm91bmQgdGhhdCB0aGUgdmFyaWFibGUKICAgICAgICAgLy8gY2Fubm90IGhh
dmUgYmVlbiBhc3NpZ25lZCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIHByb2NlZWQuCkBAIC0yMDA3
LDcgKzIwMDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKLSAgICAgICAgcmVjb3JkU2V0
TG9jYWwobV9jdXJyZW50Tm9kZS0+dW5saW5rZWRPcGVyYW5kKCksIFZpcnR1YWxSZWdpc3Rlcigp
LCBEYXRhRm9ybWF0RGVhZCk7CisgICAgICAgIHJlY29yZFNldExvY2FsKG1fY3VycmVudE5vZGUt
PnVubGlua2VkTG9jYWwoKSwgVmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXREZWFkKTsKICAg
ICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ0NzQsMTEg
KzQ0NzQsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgVmFyYXJnc0xl
bmd0aDogewotICAgICAgICBjb21waWxlVmFyYXJnc0xlbmd0aChub2RlKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCiAgICAgY2FzZSBMb2FkVmFyYXJnczogewogICAgICAgICBjb21waWxlTG9h
ZFZhcmFyZ3Mobm9kZSk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAKaW5kZXggNmUwOTQ5YjBmYThjMDg3MTE3
NTNiYjFjNmE3ZjJhMzI2ZDAyYTE5MC4uMTY4YjNkZjQzMzQ2NTdlNmFhZGI2NGJiZjYzM2VlYzVh
ZmExYjA0NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xh
eW91dFBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5
b3V0UGhhc2UuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gdHJlYXQg
YSB2YXJpYWJsZSBhcyBiZWluZyAidXNlZCIgaWYgdGhlcmUgZXhpc3RzIGFuIGFjY2VzcyB0byBp
dCAoU2V0TG9jYWwsIEdldExvY2FsLAogICAgICAgICAvLyBGbHVzaCwgUGhhbnRvbUxvY2FsKS4K
ICAgICAgICAgCi0gICAgICAgIE9wZXJhbmRzPGJvb2w+IHVzZWRPcGVyYW5kcygwLCBncmFwaCgp
Lm1fbG9jYWxWYXJzLCBncmFwaCgpLm1fdG1wcywgZmFsc2UpOworICAgICAgICBCaXRWZWN0b3Ig
dXNlZExvY2FsczsKICAgICAgICAgCiAgICAgICAgIC8vIENvbGxlY3QgdGhvc2UgdmFyaWFibGVz
IHRoYXQgYXJlIHVzZWQgZnJvbSBJUi4KICAgICAgICAgYm9vbCBoYXNOb2Rlc1RoYXROZWVkRml4
dXAgPSBmYWxzZTsKQEAgLTY3LDIyICs2NywyMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
Y2FzZSBGbHVzaDoKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDogewogICAgICAg
ICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+b3BlcmFu
ZCgpLmlzQXJndW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2Nh
bCgpLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0T3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFuZCgp
LCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgdXNlZExvY2Fscy5zZXQodmFyaWFibGUtPmxv
Y2FsKCkudG9Mb2NhbCgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIExvYWRW
YXJhcmdzOgogICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAg
ICAgICAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRh
KCk7Ci0gICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKGRhdGEtPmNv
dW50LCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPmNvdW50LmlzTG9jYWwo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KGRhdGEtPmNvdW50LnRv
TG9jYWwoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLT5zdGFydC5pc0xvY2FsKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgcGFydCByZWFsbHkgcmVsaWVzIG9u
IHRoZSBjb250aWd1aXR5IG9mIHN0YWNrIGxheW91dAogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gYXNzaWdubWVudHMuCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoVmlydHVhbFJl
Z2lzdGVyKGRhdGEtPnN0YXJ0Lm9mZnNldCgpICsgZGF0YS0+bGltaXQgLSAxKS5pc0xvY2FsKCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+bGltaXQ7
IGktLTspIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVy
YW5kKFZpcnR1YWxSZWdpc3RlcihkYXRhLT5zdGFydC5vZmZzZXQoKSArIGkpLCB0cnVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0ZXIo
ZGF0YS0+c3RhcnQub2Zmc2V0KCkgKyBpKS50b0xvY2FsKCkpOwogICAgICAgICAgICAgICAgICAg
ICB9IC8vIHRoZSBlbHNlIGNhc2Ugc2hvdWxkbid0IGhhcHBlbi4KICAgICAgICAgICAgICAgICAg
ICAgaGFzTm9kZXNUaGF0TmVlZEZpeHVwID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC05MSw5ICs5Miw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIFB1dFN0
YWNrOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAgICAgICAgICAgICAg
ICAgU3RhY2tBY2Nlc3NEYXRhKiBzdGFjayA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoc3RhY2stPm9wZXJhbmQuaXNBcmd1bWVudCgpKQorICAgICAg
ICAgICAgICAgICAgICBpZiAoc3RhY2stPmxvY2FsLmlzQXJndW1lbnQoKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0
T3BlcmFuZChzdGFjay0+b3BlcmFuZCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHVzZWRM
b2NhbHMuc2V0KHN0YWNrLT5sb2NhbC50b0xvY2FsKCkpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTA3LDIx
ICsxMDgsMjEgQEAgcHVibGljOgogICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUgPSAqaXRlcjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlubGluZUNh
bGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAgICAgICAgICAgICAgICB1c2VkT3BlcmFuZHMuc2V0
T3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoCi0gICAgICAgICAgICAgICAgICAgIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCksIHRydWUpOworICAgICAgICAgICAgICAgIHVzZWRMb2NhbHMuc2V0KFZpcnR1YWxSZWdp
c3RlcigKKyAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFy
Z3VtZW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNXaXRoRml4dXAuc2l6ZSgpOyBhcmd1
bWVudC0tOykgewotICAgICAgICAgICAgICAgIHVzZWRPcGVyYW5kcy5zZXRPcGVyYW5kKFZpcnR1
YWxSZWdpc3RlcigKKyAgICAgICAgICAgICAgICB1c2VkTG9jYWxzLnNldChWaXJ0dWFsUmVnaXN0
ZXIoCiAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3Vt
ZW50KS5vZmZzZXQoKSArCi0gICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCkudG9Mb2NhbCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBhbGxvY2F0aW9uKHVzZWRPcGVyYW5kcy5zaXpl
KCkpOworICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IGFsbG9jYXRpb24odXNlZExvY2Fscy5zaXpl
KCkpOwogICAgICAgICBtX2dyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbCA9IGNvZGVCbG9jaygpLT5j
YWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHVzZWRPcGVyYW5kcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYg
KCF1c2VkT3BlcmFuZHMuZ2V0Rm9yT3BlcmFuZEluZGV4KGkpKSB7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB1c2VkTG9jYWxzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBp
ZiAoIXVzZWRMb2NhbHMuZ2V0KGkpKSB7CiAgICAgICAgICAgICAgICAgYWxsb2NhdGlvbltpXSA9
IFVJTlRfTUFYOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQpAQCAt
MTM0LDUwICsxMzUsNDkgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCF2YXJpYWJsZS0+aXNS
b290KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmICh2YXJpYWJsZS0+b3BlcmFuZCgpLmlzQXJndW1lbnQoKSkgewotICAgICAgICAgICAg
ICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IHZhcmlhYmxlLT5vcGVyYW5kKCkudmlydHVh
bFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBpZiAodmFyaWFibGUtPmxvY2FsKCkuaXNBcmd1bWVu
dCgpKSB7CisgICAgICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpID0gdmFyaWFi
bGUtPmxvY2FsKCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IHZhcmlhYmxlLT5vcGVy
YW5kKCk7Ci0gICAgICAgICAgICBzaXplX3QgaW5kZXggPSB1c2VkT3BlcmFuZHMub3BlcmFuZElu
ZGV4KG9wZXJhbmQpOwotICAgICAgICAgICAgaWYgKGluZGV4ID49IGFsbG9jYXRpb24uc2l6ZSgp
KQorICAgICAgICAgICAgc2l6ZV90IGxvY2FsID0gdmFyaWFibGUtPmxvY2FsKCkudG9Mb2NhbCgp
OworICAgICAgICAgICAgaWYgKGxvY2FsID49IGFsbG9jYXRpb24uc2l6ZSgpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYWxsb2NhdGlv
bltpbmRleF0gPT0gVUlOVF9NQVgpCisgICAgICAgICAgICBpZiAoYWxsb2NhdGlvbltsb2NhbF0g
PT0gVUlOVF9NQVgpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IGFzc2lnbih1c2VkT3BlcmFuZHMs
IGFsbG9jYXRpb24sIHZhcmlhYmxlLT5vcGVyYW5kKCkpOworICAgICAgICAgICAgdmFyaWFibGUt
Pm1hY2hpbmVMb2NhbCgpID0gYXNzaWduKGFsbG9jYXRpb24sIHZhcmlhYmxlLT5sb2NhbCgpKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZm9yIChTdGFja0FjY2Vzc0RhdGEqIGRhdGEg
OiBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhKSB7Ci0gICAgICAgICAgICBpZiAoZGF0YS0+b3Bl
cmFuZC5pc0FyZ3VtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9jYWwg
PSBkYXRhLT5vcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICAgICAgaWYgKCFkYXRh
LT5sb2NhbC5pc0xvY2FsKCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9jYWwg
PSBkYXRhLT5sb2NhbDsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGRhdGEtPm9wZXJhbmQuaXNMb2NhbCgpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+b3BlcmFuZC50
b0xvY2FsKCkpID49IGFsbG9jYXRpb24uc2l6ZSgpKQotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAoYWxsb2NhdGlvbltkYXRhLT5vcGVyYW5kLnRvTG9j
YWwoKV0gPT0gVUlOVF9NQVgpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+bG9jYWwu
dG9Mb2NhbCgpKSA+PSBhbGxvY2F0aW9uLnNpemUoKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uW2RhdGEtPmxvY2FsLnRvTG9jYWwoKV0gPT0g
VUlOVF9NQVgpCisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGRhdGEtPm1hY2hpbmVMb2NhbCA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRp
b24sIGRhdGEtPm9wZXJhbmQpOworICAgICAgICAgICAgZGF0YS0+bWFjaGluZUxvY2FsID0gYXNz
aWduKGFsbG9jYXRpb24sIGRhdGEtPmxvY2FsKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgaWYgKCFtX2dyYXBoLm5lZWRzU2NvcGVSZWdpc3RlcigpKQogICAgICAgICAgICAgY29kZUJs
b2NrKCktPnNldFNjb3BlUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBjb2RlQmxvY2soKS0+c2V0U2NvcGVSZWdpc3Rlcihhc3NpZ24odXNlZE9w
ZXJhbmRzLCBhbGxvY2F0aW9uLCBjb2RlQmxvY2soKS0+c2NvcGVSZWdpc3RlcigpKSk7CisgICAg
ICAgICAgICBjb2RlQmxvY2soKS0+c2V0U2NvcGVSZWdpc3Rlcihhc3NpZ24oYWxsb2NhdGlvbiwg
Y29kZUJsb2NrKCktPnNjb3BlUmVnaXN0ZXIoKSkpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1fZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURhdGEuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAg
ICAgICBJbmxpbmVWYXJpYWJsZURhdGEgZGF0YSA9IG1fZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURh
dGFbaV07CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGRh
dGEuaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKSkKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRSZWdpc3RlciA9IGFzc2lnbih1c2VkT3BlcmFuZHMsIGFsbG9jYXRpb24s
IFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKLQorICAgICAgICAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAgICAgICAgICAgICBpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlciA9IGFzc2lnbigKKyAgICAgICAgICAgICAgICAg
ICAgYWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50
ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNXaXRoRml4dXAuc2l6ZSgpOyBhcmd1bWVudC0t
OykgewogICAgICAgICAgICAgICAgIEFyZ3VtZW50UG9zaXRpb24mIHBvc2l0aW9uID0gbV9ncmFw
aC5tX2FyZ3VtZW50UG9zaXRpb25zWwogICAgICAgICAgICAgICAgICAgICBkYXRhLmFyZ3VtZW50
UG9zaXRpb25TdGFydCArIGFyZ3VtZW50XTsKQEAgLTIxNSw4ICsyMTUsOCBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICAgICAgICAg
IGNhc2UgRm9yd2FyZFZhcmFyZ3M6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIExvYWRWYXJh
cmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YS0+bWFjaGluZUNvdW50ID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2Nh
dGlvbiwgZGF0YS0+Y291bnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGlu
ZVN0YXJ0ID0gYXNzaWduKHVzZWRPcGVyYW5kcywgYWxsb2NhdGlvbiwgZGF0YS0+c3RhcnQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bWFjaGluZUNvdW50ID0gYXNzaWduKGFsbG9j
YXRpb24sIGRhdGEtPmNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm1hY2hp
bmVTdGFydCA9IGFzc2lnbihhbGxvY2F0aW9uLCBkYXRhLT5zdGFydCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgCkBAIC0yMzEsMTYgKzIzMSwxNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRl
OgotICAgIFZpcnR1YWxSZWdpc3RlciBhc3NpZ24oY29uc3QgT3BlcmFuZHM8Ym9vbD4mIHVzZWRP
cGVyYW5kcywgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgYWxsb2NhdGlvbiwgT3BlcmFuZCBvcGVy
YW5kKQorICAgIFZpcnR1YWxSZWdpc3RlciBhc3NpZ24oY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYg
YWxsb2NhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHNyYykKICAgICB7Ci0gICAgICAgIGlmIChvcGVy
YW5kLmlzQXJndW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYW5kLnZpcnR1YWxSZWdp
c3RlcigpOwotCi0gICAgICAgIHNpemVfdCBvcGVyYW5kSW5kZXggPSB1c2VkT3BlcmFuZHMub3Bl
cmFuZEluZGV4KG9wZXJhbmQpOwotICAgICAgICB1bnNpZ25lZCBteUFsbG9jYXRpb24gPSBhbGxv
Y2F0aW9uW29wZXJhbmRJbmRleF07Ci0gICAgICAgIGlmIChteUFsbG9jYXRpb24gPT0gVUlOVF9N
QVgpCi0gICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgIHJldHVy
biB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChteUFsbG9jYXRpb24pOworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0ID0gc3JjOworICAgICAgICBpZiAocmVzdWx0LmlzTG9jYWwoKSkgewor
ICAgICAgICAgICAgdW5zaWduZWQgbXlBbGxvY2F0aW9uID0gYWxsb2NhdGlvbltyZXN1bHQudG9M
b2NhbCgpXTsKKyAgICAgICAgICAgIGlmIChteUFsbG9jYXRpb24gPT0gVUlOVF9NQVgpCisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gVmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobXlBbGxv
Y2F0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rp
b25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0
aW9uUGhhc2UuY3BwCmluZGV4IGIzZTQxZDhkN2UxZGUzNmUyNzE2MTNhNDYyNTU3NmM5ZjY2ZTc2
MmMuLjE4ZTY3ZTc2MjU3MWNkYmE1ZWViZjFlMGZjNGY5MTg3YmYzMjVkNTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNl
LmNwcApAQCAtMjg1LDE3ICsyODUsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBudWxscHRyOwotICAgICAgICAg
ICAgT3BlcmFuZCBvcGVyYW5kID0gbV9ub2RlLT5vcGVyYW5kKCk7CisgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgbG9jYWwgPSBtX25vZGUtPmxvY2FsKCk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fbm9kZUluZGV4OyBpLS07KSB7CiAgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IG1fYmxvY2stPmF0KGkpOwogCi0gICAgICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwgJiYgbm9kZS0+b3BlcmFuZCgpID09IG9wZXJhbmQpIHsK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCAmJiBub2RlLT5sb2Nh
bCgpID09IGxvY2FsKSB7CiAgICAgICAgICAgICAgICAgICAgIHNldExvY2FsID0gbm9kZTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgaWYgKGFjY2Vzc2VzT3ZlcmxhcChtX2dyYXBoLCBub2RlLCBBYnN0cmFjdEhlYXAoU3Rh
Y2ssIG9wZXJhbmQpKSkKKyAgICAgICAgICAgICAgICBpZiAoYWNjZXNzZXNPdmVybGFwKG1fZ3Jh
cGgsIG5vZGUsIEFic3RyYWN0SGVhcChTdGFjaywgbG9jYWwpKSkKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVGh1bmtzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1
bmtzLmNwcAppbmRleCBmMWIxZmY2NGRkYTUzY2Y0NTk2NzA0ZWViODMxNWYxNmJmYmU5MDllLi42
YWNhZmJmM2JmNTM1Yzk2OTZiZTY0OGEyMDcwYjZlZTZmNGY4YmY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUaHVua3MuY3BwCkBAIC00MCw2ICs0MCwxNCBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gb3NyRXhpdFRodW5rR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICBDQ2FsbEhlbHBlcnMg
aml0KG51bGxwdHIpOworICAgIGppdC5wcm9iZShPU1JFeGl0OjpleGVjdXRlT1NSRXhpdCwgJnZt
KTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAg
ICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJERkcg
T1NSIGV4aXQgdGh1bmsiKTsKK30KKwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNJiB2bSkKIHsKICAgICBDQ2Fs
bEhlbHBlcnMgaml0KG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUaHVua3MuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmgK
aW5kZXggOGI1YzNmMDFhNDg1MjBiN2FhYWFhZWJhZmY5M2MzYjI2Y2NkOTg0Zi4uMDVhNTBhNTRi
MjVkNTFkYmNiMTg1OGZlN2FhZGNhNDg2ODIwNWQ5ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdUaHVua3MuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1RodW5rcy5oCkBAIC0zNSw2ICszNSw3IEBAIGNsYXNzIFZNOwogCiBuYW1lc3BhY2UgREZH
IHsKIAorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvc3JFeGl0VGh1bmtH
ZW5lcmF0b3IoVk0mKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gb3Ny
RXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSYpOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBvc3JFbnRyeVRodW5rR2VuZXJhdG9yKFZNJik7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2Uu
Y3BwCmluZGV4IDc1MjhlNWU0MDJmNmE0MTgyOGMzZWNiYjljYmFkOGFmNTU2ZDllNjcuLjBlMjVk
N2QxNGJlNWZkNGFhNDA5MWZkOTgxM2YxNGQwZGNmODY2ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcApAQCAt
MTQ2LDcgKzE0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXItPnZh
bHVlLm1fc3RydWN0dXJlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNoZWNrT3Ag
PSBDaGVja1N0cnVjdHVyZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTcGVjQ2VsbENo
ZWNrICYgU3BlY0VtcHR5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGxvY2FsID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPm9wZXJhbmQoKS52aXJ0
dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgbG9jYWwgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bG9jYWwoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhdXRvKiBpbmxpbmVDYWxsRnJhbWUgPSBub2RlLT5vcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKChsb2NhbCAtIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0IDogMCkpID09IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHx0aGlzfCBjYW4gYmUgdGhlIFREWiB2YWx1ZS4gVGhl
IGNhbGwgZW50cnlwb2ludCB3b24ndCBoYXZlIHx0aGlzfCBhcyBURFosCkBAIC0xNjgsOCArMTY4
LDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+b3BlcmFu
ZCgpKSA9PSBub2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5vcGVyYW5kKCkpID0gZ2V0TG9jYWw7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxv
Y2FsKCkpID09IG5vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVz
QXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gZ2V0TG9jYWw7CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnN1YnN0aXR1dGVHZXRMb2Nh
bCgqYmxvY2ssIGluZGV4SW5CbG9jaywgdmFyaWFibGUsIGdldExvY2FsKTsKICAgICAgICAgICAg
ICAgICAgICAgCkBAIC00NDgsNyArNDQ4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIGNvbnN0IE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiYg
bXVzdEhhbmRsZVZhbHVlcyA9IG1fZ3JhcGgubV9wbGFuLm11c3RIYW5kbGVWYWx1ZXMoKTsKICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1
ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgICAgIGludCBvcGVyYW5kID0gbXVz
dEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsKICAgICAgICAg
ICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAppbmRleCAzNzE1ZjcyNWI1NWIyNmNm
N2M2NDgyNWExNGVmYzAwNGQ5MGUzZTU3Li43ZWE5MzQ4OWRlYWMxNzRhZTcyZWY1NjhmM2FjZTY1
NWFhZGZlOTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlk
YXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApA
QCAtNDgzLDcgKzQ4Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJsb2NrLT5waGlzW2ldOwogICAgICAgICAgICAgICAgIEFTU0VSVChwaGlzSW5UaGlzQmxvY2su
Y29udGFpbnMobm9kZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+
b3AoKSA9PSBQaGkpOwotICAgICAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IG5vZGUtPm9w
ZXJhbmQoKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwgPSBub2RlLT5s
b2NhbCgpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBo
Lm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgLy8gUGhpIGNo
aWxkcmVuIGluIExvYWRTdG9yZSBmb3JtIGFyZSBpbnZhbGlkLgogICAgICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gTG9hZFN0b3JlICYmIGJsb2NrLT5pc1BoaUluZGV4KGkp
KQpAQCAtNTE5LDEwICs1MTksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBrID0gMDsgayA8IGJsb2NrLT5wcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2spIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZXZCbG9jayA9IGJsb2NrLT5w
cmVkZWNlc3NvcnNba107CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgoYmxvY2st
PnByZWRlY2Vzc29yc1trXSksIHByZXZCbG9jayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBO
b2RlKiBwcmV2Tm9kZSA9IHByZXZCbG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQob3BlcmFu
ZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwcmV2Tm9kZSA9IHByZXZCbG9jay0+
dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQobG9jYWwpOwogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSWYgd2UgaGF2ZSBhIFBoaSB0aGF0IGlzIG5vdCByZWZlcnJpbmcgdG8gKnRoaXMqIGJsb2Nr
IHRoZW4gYWxsIHByZWRlY2Vzc29ycwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbXVzdCBo
YXZlIHRoYXQgbG9jYWwgYXZhaWxhYmxlLgotICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURB
VEUoKG9wZXJhbmQsIGJsb2NrLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdKSwgcHJldk5vZGUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKGxvY2FsLCBibG9jaywgYmxvY2stPnBy
ZWRlY2Vzc29yc1trXSksIHByZXZOb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRj
aCAocHJldk5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9j
YWw6CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgpAQCAtNTMzLDExICs1MzMs
MTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5z
aG91bGRHZW5lcmF0ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KG9wZXJhbmQsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobG9jYWwsIGJsb2NrLT5wcmVkZWNlc3NvcnNba10s
IHByZXZOb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9k
ZS0+c2hvdWxkR2VuZXJhdGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
b3BlcmFuZCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChsb2NhbCwgYmxvY2stPnByZWRlY2Vzc29yc1trXSwgcHJldk5vZGUp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZOb2RlLT5vcCgpID09IFNldExvY2Fs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gU2V0QXJn
dW1lbnREZWZpbml0ZWx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUt
Pm9wKCkgPT0gU2V0QXJndW1lbnRNYXliZQpAQCAtNTQ3LDE1ICs1NDcsMTkgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgaXQgY2Fubm90
IHJlZmVyIGludG8gdGhpcyBibG9jay4KLSAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KChvcGVyYW5kLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksICFwcmV2QmxvY2st
PmlzSW5CbG9jayhlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURB
VEUoKGxvY2FsLCBibG9jay0+cHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksICFwcmV2QmxvY2st
PmlzSW5CbG9jayhlZGdlLm5vZGUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwgZWRnZSks
IGZvdW5kKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4gZ2V0TG9jYWxQb3NpdGlvbnMoT3BlcmFuZHNM
aWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgICAgIE9wZXJhbmRzPHNpemVf
dD4gc2V0TG9jYWxQb3NpdGlvbnMoT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFk
KTsKKyAgICAgICAgICAgIE9wZXJhbmRzPHNpemVfdD4gZ2V0TG9jYWxQb3NpdGlvbnMoCisgICAg
ICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpLAor
ICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7
CisgICAgICAgICAgICBPcGVyYW5kczxzaXplX3Q+IHNldExvY2FsUG9zaXRpb25zKAorICAgICAg
ICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSwKKyAg
ICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52
YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CiAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLCBibG9jayksICFibG9j
ay0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpIHx8IGJsb2NrLT52YXJpYWJsZXNBdEhlYWQu
YXJndW1lbnQoaSktPmFjY2Vzc2VzU3RhY2sobV9ncmFwaCkpOwpAQCAtNjY0LDI0ICs2NjgsMjQg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX215UmVmQ291bnRzLmdldChu
b2RlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChub2RlLCBibG9jayksIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQo
bm9kZS0+b3BlcmFuZCgpKSA9PSBub3RTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUsIGJsb2NrKSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9PSBub3RTZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUs
IGJsb2NrKSwgISFub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJ
REFURSgobm9kZSwgYmxvY2spLCBub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBTZXRBcmd1bWVudERl
ZmluaXRlbHkgfHwgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5v
ZGUtPm9wZXJhbmQoKSkgPSBpOworICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9u
cy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgICAgICAgICAgLy8g
T25seSByZWNvcmQgdGhlIGZpcnN0IFNldExvY2FsLiBUaGVyZSBtYXkgYmUgbXVsdGlwbGUgU2V0
TG9jYWxzCiAgICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugb2YgZmx1c2hpbmcuCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChzZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPm9wZXJh
bmQoKSkgIT0gbm90U2V0KQorICAgICAgICAgICAgICAgICAgICBpZiAoc2V0TG9jYWxQb3NpdGlv
bnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSAhPSBub3RTZXQpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFu
ZChub2RlLT5vcGVyYW5kKCkpID0gaTsKKyAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3Np
dGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnREZWZpbml0ZWx5OgogICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIGFjdHMgbGlrZSBhIHJlc2V0LiBJdCdzIG9rIHRvIGhhdmUg
YSBzZWNvbmQgR2V0TG9jYWwgZm9yIGEgbG9jYWwgaW4gdGhlIHNhbWUKICAgICAgICAgICAgICAg
ICAgICAgLy8gYmxvY2sgaWYgd2UgaGFkIGEgU2V0QXJndW1lbnREZWZpbml0ZWx5IGZvciB0aGF0
IGxvY2FsLgotICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5v
ZGUtPm9wZXJhbmQoKSkgPSBub3RTZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHNldExvY2FsUG9z
aXRpb25zLm9wZXJhbmQobm9kZS0+b3BlcmFuZCgpKSA9IG5vdFNldDsKKyAgICAgICAgICAgICAg
ICAgICAgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG5vdFNldDsK
KyAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9IG5vdFNldDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgY2FzZSBTZXRBcmd1bWVudE1heWJlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTk2NCwyNiArOTY4LDI2IEBAIHByaXZhdGU6CiAgICAgICAgIGRhdGFMb2cobm9kZSwgIiAtPiAi
LCBlZGdlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4dChP
cGVyYW5kIG9wZXJhbmQsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHZvaWQgcmVwb3J0VmFsaWRh
dGlvbkNvbnRleHQoVmlydHVhbFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBibG9jaykKICAg
ICB7CiAgICAgICAgIGlmICghYmxvY2spIHsKLSAgICAgICAgICAgIGRhdGFMb2cob3BlcmFuZCwg
IiBpbiBudWxsIEJsb2NrICIpOworICAgICAgICAgICAgZGF0YUxvZyhsb2NhbCwgIiBpbiBudWxs
IEJsb2NrICIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgZGF0
YUxvZyhvcGVyYW5kLCAiIGluIEJsb2NrICIsICpibG9jayk7CisgICAgICAgIGRhdGFMb2cobG9j
YWwsICIgaW4gQmxvY2sgIiwgKmJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRW
YWxpZGF0aW9uQ29udGV4dCgKLSAgICAgICAgT3BlcmFuZCBvcGVyYW5kLCBCYXNpY0Jsb2NrKiBz
b3VyY2VCbG9jaywgQmFzaWNCbG9jayogZGVzdGluYXRpb25CbG9jaykKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGxvY2FsLCBCYXNpY0Jsb2NrKiBzb3VyY2VCbG9jaywgQmFzaWNCbG9jayogZGVz
dGluYXRpb25CbG9jaykKICAgICB7Ci0gICAgICAgIGRhdGFMb2cob3BlcmFuZCwgIiBpbiBCbG9j
ayAiLCAqc291cmNlQmxvY2ssICIgLT4gIiwgKmRlc3RpbmF0aW9uQmxvY2spOworICAgICAgICBk
YXRhTG9nKGxvY2FsLCAiIGluIEJsb2NrICIsICpzb3VyY2VCbG9jaywgIiAtPiAiLCAqZGVzdGlu
YXRpb25CbG9jayk7CiAgICAgfQogICAgIAogICAgIHZvaWQgcmVwb3J0VmFsaWRhdGlvbkNvbnRl
eHQoCi0gICAgICAgIE9wZXJhbmQgb3BlcmFuZCwgQmFzaWNCbG9jayogc291cmNlQmxvY2ssIE5v
ZGUqIHByZXZOb2RlKQorICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEJhc2ljQmxvY2sq
IHNvdXJjZUJsb2NrLCBOb2RlKiBwcmV2Tm9kZSkKICAgICB7Ci0gICAgICAgIGRhdGFMb2cocHJl
dk5vZGUsICIgZm9yICIsIG9wZXJhbmQsICIgaW4gQmxvY2sgIiwgKnNvdXJjZUJsb2NrKTsKKyAg
ICAgICAgZGF0YUxvZyhwcmV2Tm9kZSwgIiBmb3IgIiwgbG9jYWwsICIgaW4gQmxvY2sgIiwgKnNv
dXJjZUJsb2NrKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCByZXBvcnRWYWxpZGF0aW9uQ29udGV4
dChOb2RlKiBub2RlLCBCYXNpY0Jsb2NrKiBibG9jaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCmluZGV4IDc0ZWE2
MThlOTAxMTI5YTU3ZTJjODNiYjg5MmE3NWI3YjgwNjMzYjcuLjAzZTg5MjBmMmY2ZjNlZThiYTE0
ODZiMGJkNzc2NTYxZjEwZTU5NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcApAQCAtNDEsOSArNDEsMTEgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBuYW1lc3BhY2UgewogCituYW1lc3Bh
Y2UgREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsIHsKK3N0YXRpYyBjb25zdGV4cHIg
Ym9vbCB2ZXJib3NlID0gZmFsc2U7Cit9CiAKIGNsYXNzIFZhcmFyZ3NGb3J3YXJkaW5nUGhhc2Ug
OiBwdWJsaWMgUGhhc2UgewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CiBwdWJsaWM6CiAgICAgVmFyYXJnc0ZvcndhcmRpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCiAg
ICAgICAgIDogUGhhc2UoZ3JhcGgsICJ2YXJhcmdzIGZvcndhcmRpbmciKQpAQCAtNTQsNyArNTYs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIs
IG1fZ3JhcGgubV9mb3JtICE9IFNTQSk7CiAgICAgICAgIAotICAgICAgICBpZiAodmVyYm9zZSkg
eworICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3Nl
KSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgdmFyYXJncyBmb3J3YXJkaW5n
OlxuIik7CiAgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQpAQCAtODYsNyAr
ODgsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyBXZSBleHBlY3QgY2FsbHMgaW50byB0aGlzIGZ1
bmN0aW9uIHRvIGJlIHJhcmUuIFNvLCB0aGlzIGlzIHdyaXR0ZW4gaW4gYSBzaW1wbGUgTyhuKSBt
YW5uZXIuCiAgICAgICAgIAogICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBibG9jay0+YXQoY2Fu
ZGlkYXRlTm9kZUluZGV4KTsKLSAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGlmIChERkdW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRh
TG9nKCJIYW5kbGluZyBjYW5kaWRhdGUgIiwgY2FuZGlkYXRlLCAiXG4iKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIFdlIGVsaW1pbmF0ZSBHZXRCdXR0ZXJmbHkgb3ZlciBDcmVhdGVDbG9uZWRBcmd1
bWVudHMgaWYgdGhlIGJ1dHRlcmZseSBpcyBvbmx5CkBAIC0xMDMsNyArMTA1LDcgQEAgcHJpdmF0
ZToKIAogICAgICAgICAgICAgYXV0byBkZWZhdWx0RXNjYXBlID0gWyZdIHsKICAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC51c2VzKG5vZGUsIGNhbmRpZGF0ZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9y
d2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgRXNjYXBlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMTUsMTAgKzExNyw5IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMSgpICE9IGNhbmRpZGF0ZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbm9kZS0+dW5saW5rZWRPcGVyYW5k
KCkuaXNUbXAoKSwgIldlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IGEgdG1wIHJlZmVycmluZyB0
byBhbiBhcmd1bWVudHMgb2JqZWN0LiIpOwogICAgICAgICAgICAgICAgIGxhc3RVc2VySW5kZXgg
PSBub2RlSW5kZXg7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZWxldmFudExvY2Fscy5jb250YWlu
cyhub2RlLT51bmxpbmtlZE9wZXJhbmQoKS52aXJ0dWFsUmVnaXN0ZXIoKSkpCi0gICAgICAgICAg
ICAgICAgICAgIHJlbGV2YW50TG9jYWxzLmFwcGVuZChub2RlLT51bmxpbmtlZE9wZXJhbmQoKS52
aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFyZWxldmFudExvY2Fscy5j
b250YWlucyhub2RlLT51bmxpbmtlZExvY2FsKCkpKQorICAgICAgICAgICAgICAgICAgICByZWxl
dmFudExvY2Fscy5hcHBlbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hlY2tWYXJhcmdz
OgpAQCAtMTM5LDE0ICsxNDAsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAg
IHNhd0VzY2FwZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
ICAgIGlmIChzYXdFc2NhcGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6
OnZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0
ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgY2FzZSBWYXJhcmdzTGVuZ3RoOgogICAgICAgICAgICAgY2Fz
ZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC51c2VzKG5vZGUsIGNh
bmRpZGF0ZSkpCiAgICAgICAgICAgICAgICAgICAgIGxhc3RVc2VySW5kZXggPSBub2RlSW5kZXg7
CkBAIC0xNTcsNyArMTU3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxW
YXJhcmdzOgogICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgog
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjYW5kaWRhdGUgfHwgbm9kZS0+
Y2hpbGQyKCkgPT0gY2FuZGlkYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVy
bmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2Fw
ZSBhdCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgICAgIH0KQEAgLTE2Nyw3ICsxNjcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCkgPT0gY2FuZGlkYXRlICYmIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0xv
YWRlZEZyb20oKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9z
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBFc2NhcGUgYXQgIiwgbm9k
ZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9
CkBAIC0yMjYsNyArMjI2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghdmFsaWRHZXRC
eU9mZnNldCkgewogICAgICAgICAgICAgICAgIGZvciAoTm9kZSogYnV0dGVyZmx5IDogY2FuZGlk
YXRlQnV0dGVyZmxpZXMpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudXNlcyhu
b2RlLCBidXR0ZXJmbHkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlSW50
ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
IEJ1dHRlcmZseSBlc2NhcGVkIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMzUsMTEgKzIzNSwxMSBA
QCBwcml2YXRlOgogCiAgICAgICAgICAgICBmb3JBbGxLaWxsZWRPcGVyYW5kcygKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLCBub2RlLCBibG9jay0+dHJ5QXQobm9kZUluZGV4ICsgMSksCi0gICAg
ICAgICAgICAgICAgWyZdIChPcGVyYW5kIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgS2lsbGlu
ZyAiLCBvcGVyYW5kLCAiIHdoaWxlIHdlIGFyZSBpbnRlcmVzdGVkIGluICIsIGxpc3REdW1wKHJl
bGV2YW50TG9jYWxzKSwgIlxuIik7CisgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0
ZXIgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJhcmdzRm9yd2FyZGluZ1Bo
YXNlSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgS2lsbGluZyAiLCByZWcsICIgd2hpbGUgd2UgYXJlIGludGVyZXN0ZWQgaW4gIiwgbGlzdER1
bXAocmVsZXZhbnRMb2NhbHMpLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHJlbGV2YW50TG9jYWxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAob3BlcmFuZCA9PSByZWxldmFudExvY2Fsc1tpXSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxzW2ldID09IHJlZykgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxzW2ktLV0gPSByZWxldmFudExvY2Fs
cy5sYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbHMucmVt
b3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RVc2VySW5kZXggPSBu
b2RlSW5kZXg7CkBAIC0yNDcsNyArMjQ3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9Ci0gICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJib3Nl
KQogICAgICAgICAgICAgZGF0YUxvZygiU2VsZWN0ZWQgbGFzdFVzZXJJbmRleCA9ICIsIGxhc3RV
c2VySW5kZXgsICIsICIsIGJsb2NrLT5hdChsYXN0VXNlckluZGV4KSwgIlxuIik7CiAgICAgICAg
IAogICAgICAgICAvLyBXZSdyZSBzdGlsbCBpbiBidXNpbmVzcy4gRGV0ZXJtaW5lIGlmIGJldHdl
ZW4gdGhlIGNhbmRpZGF0ZSBhbmQgdGhlIGxhc3QgdXNlciB0aGVyZSBpcyBhbnkKQEAgLTI2Mywx
NiArMjYzLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAg
ICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICBjYXNlIEtpbGxTdGFjazoKLSAgICAg
ICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUsIG5vZGUt
PnVubGlua2VkT3BlcmFuZCgpKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0YWNrU2xvdChjYW5kaWRhdGUs
IG5vZGUtPnVubGlua2VkTG9jYWwoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERGR1Zh
cmFyZ3NGb3J3YXJkaW5nUGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dFN0YWNrOgot
ICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwg
bm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm9wZXJhbmQpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tT
bG90KGNhbmRpZGF0ZSwgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZUludGVybmFsOjp2ZXJi
b3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEludGVyZmVyZW5jZSBh
dCAiLCBub2RlLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTI4MCw4ICsyODAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgIGNhc2UgRmx1c2g6Ci0gICAg
ICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0ludm9sdmVTdGFja1Nsb3QoY2FuZGlkYXRlLCBub2Rl
LT5vcGVyYW5kKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0ZSwgbm9kZS0+
bG9jYWwoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERGR1ZhcmFyZ3NGb3J3YXJkaW5n
UGhhc2VJbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICBJbnRlcmZlcmVuY2UgYXQgIiwgbm9kZSwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0yOTcsMTIgKzI5NywxMyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaGVhcC5wYXlsb2FkKCku
aXNUb3AoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzSW52b2x2ZVN0
YWNrU2xvdChjYW5kaWRhdGUsIGhlYXAub3BlcmFuZCgpKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciByZWcoaGVhcC5wYXlsb2FkKCkudmFsdWUzMigpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNJbnZvbHZlU3RhY2tTbG90KGNhbmRpZGF0
ZSwgcmVnKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2VzSW50ZXJmZXJlID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgTm9PcENsb2Ji
ZXJpemUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGRvZXNJbnRlcmZlcmUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGlmIChERkdWYXJh
cmdzRm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgSW50ZXJmZXJlbmNlIGF0ICIsIG5vZGUsICJcbiIpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMzEwLDcgKzMxMSw3
IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFdlIGNhbiBtYWtl
IHRoaXMgd29yay4KLSAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGlmIChERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgV2lsbCBkbyBmb3J3YXJkaW5nIVxuIik7CiAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAg
ICAgICAgIApAQCAtMzQwLDE2ICszNDEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8v
IFdlIGRvbid0IG5lZWQgdG8gY2hhbmdlIGFueXRoaW5nIHdpdGggdGhlc2UuCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFZhcmFyZ3NM
ZW5ndGg6IHsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJndW1lbnRzQ2hpbGQoKSAhPSBj
YW5kaWRhdGUpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAg
bm9kZS0+Y29udmVydFRvSWRlbnRpdHlPbihlbWl0Q29kZVRvR2V0QXJndW1lbnRzQXJyYXlMZW5n
dGgoaW5zZXJ0aW9uU2V0LCBjYW5kaWRhdGUsIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLCAvKiBh
ZGRUaGlzID0gKi8gdHJ1ZSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotCiAgICAgICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5hcmd1bWVudHNDaGlsZCgpICE9IGNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCkgIT0gY2FuZGlkYXRlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhGb3J3YXJkVmFyYXJn
cyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAKaW5kZXggMmFjMmVlMzliNGNjYWQzMDgx
MjViNGU2ZWNjODhhODdjN2QxNzlkOC4uOGViZmZiNDM1ZWQ0ZGJmNjAyYmQ2MmFlZDRjMzQzMmVh
NWE4MjkwMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUFjY2Vzc0RhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmNwcApAQCAtMzEsNyArMzEsOCBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCiBWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YSgpCi0g
ICAgOiBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCisgICAgOiBtX2xvY2FsKHN0YXRpY19jYXN0PFZp
cnR1YWxSZWdpc3Rlcj4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSkpCisgICAgLCBt
X3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgLCBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKFNw
ZWNOb25lKQogICAgICwgbV9mbGFncygwKQogICAgICwgbV9zaG91bGROZXZlclVuYm94KGZhbHNl
KQpAQCAtNDQsMTAgKzQ1LDEwIEBAIFZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NE
YXRhKCkKICAgICBjbGVhclZvdGVzKCk7CiB9CiAKLVZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFi
bGVBY2Nlc3NEYXRhKE9wZXJhbmQgb3BlcmFuZCkKLSAgICA6IG1fcHJlZGljdGlvbihTcGVjTm9u
ZSkKK1ZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3Rl
ciBsb2NhbCkKKyAgICA6IG1fbG9jYWwobG9jYWwpCisgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05v
bmUpCiAgICAgLCBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKFNwZWNOb25lKQotICAgICwgbV9v
cGVyYW5kKG9wZXJhbmQpCiAgICAgLCBtX2ZsYWdzKDApCiAgICAgLCBtX3Nob3VsZE5ldmVyVW5i
b3goZmFsc2UpCiAgICAgLCBtX3N0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoZmFsc2UpCkBA
IC04Niw3ICs4Nyw3IEBAIGJvb2wgVmFyaWFibGVBY2Nlc3NEYXRhOjpzaG91bGRVc2VEb3VibGVG
b3JtYXRBY2NvcmRpbmdUb1ZvdGUoKQogewogICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgdGhpcyBm
YWNpbGl0eSBmb3IgYXJndW1lbnRzLCB5ZXQuCiAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3Jr
IGZvciBhcmd1bWVudHMuCi0gICAgaWYgKG9wZXJhbmQoKS5pc0FyZ3VtZW50KCkpCisgICAgaWYg
KGxvY2FsKCkuaXNBcmd1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAog
ICAgIC8vIElmIHRoZSB2YXJpYWJsZSBpcyBub3QgYSBudW1iZXIgcHJlZGljdGlvbiwgdGhlbiB0
aGlzIGRvZXNuJ3QKQEAgLTEyMCw3ICsxMjEsNyBAQCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6
dGFsbHlWb3Rlc0ZvclNob3VsZFVzZURvdWJsZUZvcm1hdCgpCiB7CiAgICAgQVNTRVJUKGlzUm9v
dCgpKTsKICAgICAgICAgCi0gICAgaWYgKG9wZXJhbmQoKS5pc0FyZ3VtZW50KCkgfHwgc2hvdWxk
TmV2ZXJVbmJveCgpCisgICAgaWYgKGxvY2FsKCkuaXNBcmd1bWVudCgpIHx8IHNob3VsZE5ldmVy
VW5ib3goKQogICAgICAgICB8fCAoZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc0FycmF5SW5k
ZXgpKQogICAgICAgICByZXR1cm4gREZHOjptZXJnZURvdWJsZUZvcm1hdFN0YXRlKG1fZG91Ymxl
Rm9ybWF0U3RhdGUsIE5vdFVzaW5nRG91YmxlRm9ybWF0KTsKICAgICAKQEAgLTE3NSw3ICsxNzYs
NyBAQCBib29sIFZhcmlhYmxlQWNjZXNzRGF0YTo6Y291bGRSZXByZXNlbnRJbnQ1MkltcGwoKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gV2UgcHVudCBmb3IgbWFjaGluZSBh
cmd1bWVudHMuCi0gICAgaWYgKG9wZXJhbmQoKS5pc0FyZ3VtZW50KCkpCisgICAgaWYgKG1fbG9j
YWwuaXNBcmd1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gVGhl
IGFyZ3VtZW50LWF3YXJlIHByZWRpY3Rpb24gLS0gd2hpY2ggbWVyZ2VzIGFsbCBvZiBhbiAoaW5s
aW5lZCBvciBtYWNoaW5lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
aWFibGVBY2Nlc3NEYXRhLmgKaW5kZXggYmUyZmI1NDAxMzUyNjU1YjljN2FjYjEzYmRhZWE3NTU3
M2ZjZWZmOS4uMWQzODkyZjllYzA5Y2JhMjA0M2ZhMjU0ZTYwOTQyMzIwMTRhMjg0ZSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCkBA
IC00OCwxMiArNDgsMTIgQEAgY2xhc3MgVmFyaWFibGVBY2Nlc3NEYXRhIDogcHVibGljIFVuaW9u
RmluZDxWYXJpYWJsZUFjY2Vzc0RhdGE+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYXJp
YWJsZUFjY2Vzc0RhdGEpOwogcHVibGljOgogICAgIFZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAg
IFZhcmlhYmxlQWNjZXNzRGF0YShPcGVyYW5kKTsKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoVmly
dHVhbFJlZ2lzdGVyIGxvY2FsKTsKICAgICAKLSAgICBPcGVyYW5kIG9wZXJhbmQoKQorICAgIFZp
cnR1YWxSZWdpc3RlciBsb2NhbCgpCiAgICAgewotICAgICAgICBBU1NFUlQobV9vcGVyYW5kID09
IGZpbmQoKS0+bV9vcGVyYW5kKTsKLSAgICAgICAgcmV0dXJuIG1fb3BlcmFuZDsKKyAgICAgICAg
QVNTRVJUKG1fbG9jYWwgPT0gZmluZCgpLT5tX2xvY2FsKTsKKyAgICAgICAgcmV0dXJuIG1fbG9j
YWw7CiAgICAgfQogICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciYgbWFjaGluZUxvY2FsKCkKQEAg
LTIwOCwxMCArMjA4LDEwIEBAIHByaXZhdGU6CiAgICAgLy8gcHV0dGluZyB0aGVtIGhlcmUgc2lt
cGxpZmllcyB0aGUgY29kZSwgYW5kIHdlIGRvbid0IGV4cGVjdCBERkcgc3BhY2UKICAgICAvLyB1
c2FnZSBmb3IgdmFyaWFibGUgYWNjZXNzIG5vZGVzIGRvIGJlIHNpZ25pZmljYW50LgogCisgICAg
VmlydHVhbFJlZ2lzdGVyIG1fbG9jYWw7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1fbWFjaGluZUxv
Y2FsOwogICAgIFNwZWN1bGF0ZWRUeXBlIG1fcHJlZGljdGlvbjsKICAgICBTcGVjdWxhdGVkVHlw
ZSBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9uOwotICAgIE9wZXJhbmQgbV9vcGVyYW5kOwotICAg
IFZpcnR1YWxSZWdpc3RlciBtX21hY2hpbmVMb2NhbDsKICAgICBOb2RlRmxhZ3MgbV9mbGFnczsK
IAogICAgIGJvb2wgbV9zaG91bGROZXZlclVuYm94OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAKaW5kZXggOWNlMGY2N2Y5Nzk1MTk5YzA1YmYxMDA4
OTRmOTg1OWFmMzQ5OGU2Zi4uZDNiNjZjYmFhNjExZmM0MDVlZTRmZWMwODEwNjM3YTg5Njc4ZDEy
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3Bw
CkBAIC02MCwxMSArNjAsMTEgQEAgdm9pZCBWYXJpYWJsZUV2ZW50OjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CiAgICAgICAgIG91dC5wcmludCgiRGVhdGgoIiwgaWQoKSwgIikiKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBNb3ZIaW50RXZlbnQ6Ci0gICAgICAgIG91dC5wcmludCgi
TW92SGludCgiLCBpZCgpLCAiLCAiLCBvcGVyYW5kKCksICIpIik7CisgICAgICAgIG91dC5wcmlu
dCgiTW92SGludCgiLCBpZCgpLCAiLCAiLCBieXRlY29kZVJlZ2lzdGVyKCksICIpIik7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgU2V0TG9jYWxFdmVudDoKICAgICAgICAgb3V0LnByaW50KAot
ICAgICAgICAgICAgIlNldExvY2FsKG1hY2hpbmU6IiwgbWFjaGluZVJlZ2lzdGVyKCksICIgLT4g
Ynl0ZWNvZGU6Iiwgb3BlcmFuZCgpLAorICAgICAgICAgICAgIlNldExvY2FsKG1hY2hpbmU6Iiwg
bWFjaGluZVJlZ2lzdGVyKCksICIgLT4gYnl0ZWNvZGU6IiwgYnl0ZWNvZGVSZWdpc3RlcigpLAog
ICAgICAgICAgICAgIiwgIiwgZGF0YUZvcm1hdFRvU3RyaW5nKGRhdGFGb3JtYXQoKSksICIpIik7
CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVFdmVudC5oCmluZGV4IDdjOTkyMmM5MDZhYjQ0ZDdiMDM3NWY1NjlmY2Yz
ZTI1ZTRmOGQ4ZTYuLmNlMmNhYzAxOTIzZjg2ODQ5YjE3OGZlMDZmNzY3OTAzMTUxOWYwODEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCkBAIC02OSwx
MCArNjksNiBAQCBlbnVtIFZhcmlhYmxlRXZlbnRLaW5kIDogdWludDhfdCB7CiB9OwogCiB1bmlv
biBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHsKLSAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uKCkg
Ci0gICAgICAgIDogb3BlcmFuZCgpIAotICAgIHsgfQotCiAgICAgTWFjcm9Bc3NlbWJsZXI6OlJl
Z2lzdGVySUQgZ3ByOwogICAgIE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgZnByOwogI2lm
IFVTRShKU1ZBTFVFMzJfNjQpCkBAIC04MSw3ICs3Nyw3IEBAIHVuaW9uIFZhcmlhYmxlUmVwcmVz
ZW50YXRpb24gewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXlsb2FkR1BS
OwogICAgIH0gcGFpcjsKICNlbmRpZgotICAgIE9wZXJhbmQgb3BlcmFuZDsKKyAgICBpbnQzMl90
IHZpcnR1YWxSZWc7CiB9OwogCiBjbGFzcyBWYXJpYWJsZUV2ZW50IHsKQEAgLTE2Nyw3ICsxNjMs
NyBAQCBwdWJsaWM6CiAgICAgICAgIFdoaWNoVHlwZSB3aGljaDsKICAgICAgICAgd2hpY2guaWQg
PSBpZC5iaXRzKCk7CiAgICAgICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRp
b247Ci0gICAgICAgIHJlcHJlc2VudGF0aW9uLm9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXI7Cisg
ICAgICAgIHJlcHJlc2VudGF0aW9uLnZpcnR1YWxSZWcgPSB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0
KCk7CiAgICAgICAgIGV2ZW50Lm1fa2luZCA9IGtpbmQ7CiAgICAgICAgIGV2ZW50Lm1fZGF0YUZv
cm1hdCA9IGZvcm1hdDsKICAgICAgICAgZXZlbnQubV93aGljaCA9IFdURk1vdmUod2hpY2gpOwpA
QCAtMTg2LDEzICsxODIsMTMgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBzdGF0aWMgVmFy
aWFibGVFdmVudCBzZXRMb2NhbCgKLSAgICAgICAgT3BlcmFuZCBieXRlY29kZU9wZXJhbmQsIFZp
cnR1YWxSZWdpc3RlciBtYWNoaW5lUmVnLCBEYXRhRm9ybWF0IGZvcm1hdCkKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIGJ5dGVjb2RlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIgbWFjaGluZVJlZywgRGF0
YUZvcm1hdCBmb3JtYXQpCiAgICAgewogICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OwogICAg
ICAgICBXaGljaFR5cGUgd2hpY2g7CiAgICAgICAgIHdoaWNoLnZpcnR1YWxSZWcgPSBtYWNoaW5l
UmVnLm9mZnNldCgpOwogICAgICAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0
aW9uOwotICAgICAgICByZXByZXNlbnRhdGlvbi5vcGVyYW5kID0gYnl0ZWNvZGVPcGVyYW5kOwor
ICAgICAgICByZXByZXNlbnRhdGlvbi52aXJ0dWFsUmVnID0gYnl0ZWNvZGVSZWcub2Zmc2V0KCk7
CiAgICAgICAgIGV2ZW50Lm1fa2luZCA9IFNldExvY2FsRXZlbnQ7CiAgICAgICAgIGV2ZW50Lm1f
ZGF0YUZvcm1hdCA9IGZvcm1hdDsKICAgICAgICAgZXZlbnQubV93aGljaCA9IFdURk1vdmUod2hp
Y2gpOwpAQCAtMjAwLDEzICsxOTYsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZXZlbnQ7
CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IG1vdkhpbnQoTWluaWZpZWRJ
RCBpZCwgT3BlcmFuZCBieXRlY29kZVJlZykKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBtb3ZI
aW50KE1pbmlmaWVkSUQgaWQsIFZpcnR1YWxSZWdpc3RlciBieXRlY29kZVJlZykKICAgICB7CiAg
ICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CiAgICAgICAgIFdoaWNoVHlwZSB3aGljaDsKICAg
ICAgICAgd2hpY2guaWQgPSBpZC5iaXRzKCk7CiAgICAgICAgIFZhcmlhYmxlUmVwcmVzZW50YXRp
b24gcmVwcmVzZW50YXRpb247Ci0gICAgICAgIHJlcHJlc2VudGF0aW9uLm9wZXJhbmQgPSBieXRl
Y29kZVJlZzsKKyAgICAgICAgcmVwcmVzZW50YXRpb24udmlydHVhbFJlZyA9IGJ5dGVjb2RlUmVn
Lm9mZnNldCgpOwogICAgICAgICBldmVudC5tX2tpbmQgPSBNb3ZIaW50RXZlbnQ7CiAgICAgICAg
IGV2ZW50Lm1fd2hpY2ggPSBXVEZNb3ZlKHdoaWNoKTsKICAgICAgICAgZXZlbnQubV9yZXByZXNl
bnRhdGlvbiA9IFdURk1vdmUocmVwcmVzZW50YXRpb24pOwpAQCAtMjcwLDEzICsyNjYsMTMgQEAg
cHVibGljOgogICAgIFZpcnR1YWxSZWdpc3RlciBzcGlsbFJlZ2lzdGVyKCkgY29uc3QKICAgICB7
CiAgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gQmlydGhUb1NwaWxsIHx8IG1fa2luZCA9PSBTcGls
bCk7Ci0gICAgICAgIHJldHVybiBtX3JlcHJlc2VudGF0aW9uLmdldCgpLm9wZXJhbmQudmlydHVh
bFJlZ2lzdGVyKCk7CisgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9yZXByZXNlbnRh
dGlvbi5nZXQoKS52aXJ0dWFsUmVnKTsKICAgICB9Ci0KLSAgICBPcGVyYW5kIG9wZXJhbmQoKSBj
b25zdAorICAgIAorICAgIFZpcnR1YWxSZWdpc3RlciBieXRlY29kZVJlZ2lzdGVyKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gU2V0TG9jYWxFdmVudCB8fCBtX2tpbmQg
PT0gTW92SGludEV2ZW50KTsKLSAgICAgICAgcmV0dXJuIG1fcmVwcmVzZW50YXRpb24uZ2V0KCku
b3BlcmFuZDsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihtX3JlcHJlc2VudGF0aW9u
LmdldCgpLnZpcnR1YWxSZWcpOwogICAgIH0KICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbWFj
aGluZVJlZ2lzdGVyKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCmluZGV4IGVmNzA4NzQ1MWIwMzQ0NzFmYWI2MTk5
ZjJlMTNjMDhlYTJhZmZjNzEuLjRiMjZjYjAyYzkzYTllODFjZmY0MDc0NmM2N2U3MDVjZDVkMjEw
YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVu
dFN0cmVhbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2
ZW50U3RyZWFtLmNwcApAQCAtNDMsNyArNDMsNyBAQCB2b2lkIFZhcmlhYmxlRXZlbnRTdHJlYW06
OmxvZ0V2ZW50KGNvbnN0IFZhcmlhYmxlRXZlbnQmIGV2ZW50KQogewogICAgIGRhdGFMb2dGKCJz
ZXEjJXU6Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpemUoKSkpOwogICAgIGV2ZW50LmR1bXAo
V1RGOjpkYXRhRmlsZSgpKTsKLSAgICBkYXRhTG9nTG4oIiAiKTsKKyAgICBkYXRhTG9nRigiICIp
OwogfQogCiBuYW1lc3BhY2UgewpAQCAtMTIwLDEyICsxMjAsMTAgQEAgdW5zaWduZWQgVmFyaWFi
bGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwgTWluaWZpZWRHcmFwaCYgZ3JhcGgsCiAgICAgdW5zaWduZWQg
aW5kZXgsIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiB2YWx1ZVJlY292ZXJpZXMsIFZlY3RvcjxV
bmRlZmluZWRPcGVyYW5kU3Bhbj4qIHVuZGVmaW5lZE9wZXJhbmRTcGFucykgY29uc3QKIHsKLSAg
ICBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCk7CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNv
ZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CiAKICAgICB1bnNpZ25lZCBu
dW1WYXJpYWJsZXM7Ci0gICAgdW5zaWduZWQgbnVtVG1wczsKICAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIGludmFsaWRJbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKTsKICAgICB1bnNpZ25lZCBmaXJzdFVuZGVmaW5lZCA9IGludmFsaWRJbmRleDsKICAgICBi
b29sIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCA9IGZhbHNlOwpAQCAtMTMzLDQyICsxMzEsMzcg
QEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgYXV0byBm
bHVzaFVuZGVmaW5lZE9wZXJhbmRTcGFuID0gWyZdICh1bnNpZ25lZCBpKSB7CiAgICAgICAgIGlm
IChmaXJzdFVuZGVmaW5lZCA9PSBpbnZhbGlkSW5kZXgpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGludCBmaXJzdE9mZnNldCA9IHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgo
Zmlyc3RVbmRlZmluZWQpLnZpcnR1YWxSZWdpc3RlcigpLm9mZnNldCgpOwotICAgICAgICBpbnQg
bGFzdE9mZnNldCA9IHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoaSAtIDEpLnZpcnR1
YWxSZWdpc3RlcigpLm9mZnNldCgpOworICAgICAgICBpbnQgZmlyc3RPZmZzZXQgPSB2YWx1ZVJl
Y292ZXJpZXMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoZmlyc3RVbmRlZmluZWQpLm9mZnNldCgp
OworICAgICAgICBpbnQgbGFzdE9mZnNldCA9IHZhbHVlUmVjb3Zlcmllcy52aXJ0dWFsUmVnaXN0
ZXJGb3JJbmRleChpIC0gMSkub2Zmc2V0KCk7CiAgICAgICAgIGludCBtaW5PZmZzZXQgPSBzdGQ6
Om1pbihmaXJzdE9mZnNldCwgbGFzdE9mZnNldCk7CiAgICAgICAgIHVuZGVmaW5lZE9wZXJhbmRT
cGFucy0+YXBwZW5kKHsgZmlyc3RVbmRlZmluZWQsIG1pbk9mZnNldCwgaSAtIGZpcnN0VW5kZWZp
bmVkIH0pOwogICAgICAgICBmaXJzdFVuZGVmaW5lZCA9IGludmFsaWRJbmRleDsKICAgICB9Owog
ICAgIGF1dG8gcmVjb3JkVW5kZWZpbmVkT3BlcmFuZCA9IFsmXSAodW5zaWduZWQgaSkgewogICAg
ICAgICAvLyBXZSB3YW50IHRvIHNlcGFyYXRlIHRoZSBzcGFuIG9mIGFyZ3VtZW50cyBmcm9tIHRo
ZSBzcGFuIG9mIGxvY2FscyBldmVuIGlmIHRoZXkgaGF2ZSBhZGphY2VudCBvcGVyYW5kcyBpbmRl
eGVzLgotICAgICAgICBpZiAoZmlyc3RVbmRlZmluZWQgIT0gaW52YWxpZEluZGV4ICYmIGZpcnN0
VW5kZWZpbmVkSXNBcmd1bWVudCAhPSB2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkp
LmlzQXJndW1lbnQoKSkKKyAgICAgICAgaWYgKGZpcnN0VW5kZWZpbmVkICE9IGludmFsaWRJbmRl
eCAmJiBmaXJzdFVuZGVmaW5lZElzQXJndW1lbnQgIT0gdmFsdWVSZWNvdmVyaWVzLmlzQXJndW1l
bnQoaSkpCiAgICAgICAgICAgICBmbHVzaFVuZGVmaW5lZE9wZXJhbmRTcGFuKGkpOwogCiAgICAg
ICAgIGlmIChmaXJzdFVuZGVmaW5lZCA9PSBpbnZhbGlkSW5kZXgpIHsKICAgICAgICAgICAgIGZp
cnN0VW5kZWZpbmVkID0gaTsKLSAgICAgICAgICAgIGZpcnN0VW5kZWZpbmVkSXNBcmd1bWVudCA9
IHZhbHVlUmVjb3Zlcmllcy5vcGVyYW5kRm9ySW5kZXgoaSkuaXNBcmd1bWVudCgpOworICAgICAg
ICAgICAgZmlyc3RVbmRlZmluZWRJc0FyZ3VtZW50ID0gdmFsdWVSZWNvdmVyaWVzLmlzQXJndW1l
bnQoaSk7CiAgICAgICAgIH0KICAgICB9OwogCiAgICAgYXV0byogaW5saW5lQ2FsbEZyYW1lID0g
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7
Ci0gICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxp
bmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgbnVtVmFyaWFibGVzID0gY29k
ZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSArIFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0KS50b0xvY2FsKCkgKyAxOwotICAgICAgICBudW1UbXBzID0gY29kZUJs
b2NrLT5udW1UbXBzKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldDsKLSAgICB9IGVsc2Ug
eworICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIG51bVZhcmlhYmxlcyA9IGJhc2Vs
aW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSktPm51bUNhbGxl
ZUxvY2FscygpICsgVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQp
LnRvTG9jYWwoKSArIDE7CisgICAgZWxzZQogICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGlu
ZUNvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCk7Ci0gICAgICAgIG51bVRtcHMgPSBiYXNlbGlu
ZUNvZGVCbG9jay0+bnVtVG1wcygpOwotICAgIH0KICAgICAKICAgICAvLyBDcmF6eSBzcGVjaWFs
IGNhc2U6IGlmIHdlJ3JlIGF0IGluZGV4ID09IDAgdGhlbiB0aGlzIG11c3QgYmUgYW4gYXJndW1l
bnQgY2hlY2sKICAgICAvLyBmYWlsdXJlLCBpbiB3aGljaCBjYXNlIGFsbCB2YXJpYWJsZXMgYXJl
IGFscmVhZHkgc2V0IHVwLiBUaGUgcmVjb3ZlcmllcyBzaG91bGQKICAgICAvLyByZWZsZWN0IHRo
aXMuCiAgICAgaWYgKCFpbmRleCkgewotICAgICAgICAvLyBXZSBkb24ndCBpbmNsdWRlIHRtcHMg
aGVyZSBiZWNhdXNlIHRoZXkgY2FuJ3QgYmUgdXNlZCB5ZXQuCi0gICAgICAgIHZhbHVlUmVjb3Zl
cmllcyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
LCBudW1WYXJpYWJsZXMsIDApOworICAgICAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxW
YWx1ZVJlY292ZXJ5Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZVJlY292ZXJpZXMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVjb3Zlcnk6OmRp
c3BsYWNlZEluSlNTdGFjaygKLSAgICAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXMub3BlcmFu
ZEZvckluZGV4KGkpLnZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0SlMpOworICAgICAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVJlY292ZXJpZXMub3BlcmFuZEZvckluZGV4KGkp
KSwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVtVmFyaWFibGVz
OwogICAgIH0KQEAgLTE3OSwxMyArMTcyLDEyIEBAIHVuc2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJl
YW06OnJlY29uc3RydWN0KAogICAgICAgICBzdGFydEluZGV4LS07CiAgICAgCiAgICAgLy8gU3Rl
cCAyOiBDcmVhdGUgYSBtb2NrLXVwIG9mIHRoZSBERkcncyBzdGF0ZSBhbmQgZXhlY3V0ZSB0aGUg
ZXZlbnRzLgotICAgIE9wZXJhbmRzPFZhbHVlU291cmNlPiBvcGVyYW5kU291cmNlcyhjb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzLCBudW1UbXBzKTsKKyAgICBPcGVyYW5k
czxWYWx1ZVNvdXJjZT4gb3BlcmFuZFNvdXJjZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCks
IG51bVZhcmlhYmxlcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gb3BlcmFuZFNvdXJjZXMuc2l6
ZSgpOyBpLS07KQogICAgICAgICBvcGVyYW5kU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFNvdXJj
ZUlzRGVhZCk7CiAgICAgSGFzaE1hcDxNaW5pZmllZElELCBNaW5pZmllZEdlbmVyYXRpb25JbmZv
PiBnZW5lcmF0aW9uSW5mb3M7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8
IGluZGV4OyArK2kpIHsKICAgICAgICAgY29uc3QgVmFyaWFibGVFdmVudCYgZXZlbnQgPSBhdChp
KTsKLSAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIlByb2Nlc3NpbmcgZXZlbnQgIiwgZXZl
bnQpOwogICAgICAgICBzd2l0Y2ggKGV2ZW50LmtpbmQoKSkgewogICAgICAgICBjYXNlIFJlc2V0
OgogICAgICAgICAgICAgLy8gbm90aGluZyB0byBkby4KQEAgLTIwNywyMyArMTk5LDIxIEBAIHVu
c2lnbmVkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBNb3ZIaW50RXZlbnQ6Ci0gICAgICAgICAgICBp
ZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5vcGVyYW5kKCkpKQotICAgICAgICAg
ICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQub3BlcmFuZCgpLCBWYWx1ZVNv
dXJjZShldmVudC5pZCgpKSk7CisgICAgICAgICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFzT3Bl
cmFuZChldmVudC5ieXRlY29kZVJlZ2lzdGVyKCkpKQorICAgICAgICAgICAgICAgIG9wZXJhbmRT
b3VyY2VzLnNldE9wZXJhbmQoZXZlbnQuYnl0ZWNvZGVSZWdpc3RlcigpLCBWYWx1ZVNvdXJjZShl
dmVudC5pZCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTZXRMb2NhbEV2
ZW50OgotICAgICAgICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQub3Bl
cmFuZCgpKSkKLSAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50
Lm9wZXJhbmQoKSwgVmFsdWVTb3VyY2U6OmZvckRhdGFGb3JtYXQoZXZlbnQubWFjaGluZVJlZ2lz
dGVyKCksIGV2ZW50LmRhdGFGb3JtYXQoKSkpOworICAgICAgICAgICAgaWYgKG9wZXJhbmRTb3Vy
Y2VzLmhhc09wZXJhbmQoZXZlbnQuYnl0ZWNvZGVSZWdpc3RlcigpKSkKKyAgICAgICAgICAgICAg
ICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50LmJ5dGVjb2RlUmVnaXN0ZXIoKSwgVmFs
dWVTb3VyY2U6OmZvckRhdGFGb3JtYXQoZXZlbnQubWFjaGluZVJlZ2lzdGVyKCksIGV2ZW50LmRh
dGFGb3JtYXQoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiT3BlcmFuZCBz
b3VyY2VzOiAiLCBvcGVyYW5kU291cmNlcyk7CiAgICAgCiAgICAgLy8gU3RlcCAzOiBDb21wdXRl
IHZhbHVlIHJlY292ZXJpZXMhCi0gICAgdmFsdWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8VmFsdWVS
ZWNvdmVyeT4oT3BlcmFuZHNMaWtlLCBvcGVyYW5kU291cmNlcyk7CisgICAgdmFsdWVSZWNvdmVy
aWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCks
IG51bVZhcmlhYmxlcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9wZXJhbmRTb3Vy
Y2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFZhbHVlU291cmNlJiBzb3VyY2UgPSBvcGVyYW5k
U291cmNlc1tpXTsKICAgICAgICAgaWYgKHNvdXJjZS5pc1RyaXZpYWxseVJlY292ZXJhYmxlKCkp
IHsKQEAgLTI0MSw3ICsyMzEsNiBAQCB1bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNv
bnN0cnVjdCgKICAgICAgICAgTWluaWZpZWROb2RlKiBub2RlID0gZ3JhcGguYXQoc291cmNlLmlk
KCkpOwogICAgICAgICBNaW5pZmllZEdlbmVyYXRpb25JbmZvIGluZm8gPSBnZW5lcmF0aW9uSW5m
b3MuZ2V0KHNvdXJjZS5pZCgpKTsKICAgICAgICAgaWYgKCFpbmZvLmFsaXZlKSB7Ci0gICAgICAg
ICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAiT3BlcmFuZCAiLCB2YWx1ZVJlY292ZXJpZXMub3Bl
cmFuZEZvckluZGV4KGkpLCAiIGlzIGRlYWQuIik7CiAgICAgICAgICAgICB2YWx1ZVJlY292ZXJp
ZXNbaV0gPSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKICAgICAgICAg
ICAgIGlmIChzdHlsZSA9PSBSZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBhcmF0ZWQpCiAgICAgICAg
ICAgICAgICAgcmVjb3JkVW5kZWZpbmVkT3BlcmFuZChpKTsKQEAgLTI0OSw3ICsyMzgsNiBAQCB1
bnNpZ25lZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgfQogCiAg
ICAgICAgIGlmICh0cnlUb1NldENvbnN0YW50UmVjb3ZlcnkodmFsdWVSZWNvdmVyaWVzW2ldLCBu
b2RlKSkgewotICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgIk9wZXJhbmQgIiwgdmFs
dWVSZWNvdmVyaWVzLm9wZXJhbmRGb3JJbmRleChpKSwgIiBpcyBjb25zdGFudC4iKTsKICAgICAg
ICAgICAgIGlmIChzdHlsZSA9PSBSZWNvbnN0cnVjdGlvblN0eWxlOjpTZXBhcmF0ZWQpIHsKICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSAmJiBub2RlLT5jb25zdGFudCgp
ID09IGpzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICAgICAgICAgIHJlY29yZFVuZGVmaW5lZE9w
ZXJhbmQoaSk7CkBAIC0yNzksNyArMjY3LDcgQEAgdW5zaWduZWQgVmFyaWFibGVFdmVudFN0cmVh
bTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZhbHVlUmVjb3Zl
cmllc1tpXSA9Ci0gICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2so
aW5mby51Lm9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCksIGluZm8uZm9ybWF0KTsKKyAgICAgICAg
ICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhzdGF0aWNfY2FzdDxWaXJ0dWFs
UmVnaXN0ZXI+KGluZm8udS52aXJ0dWFsUmVnKSwgaW5mby5mb3JtYXQpOwogICAgIH0KICAgICBp
ZiAoc3R5bGUgPT0gUmVjb25zdHJ1Y3Rpb25TdHlsZTo6U2VwYXJhdGVkKQogICAgICAgICBmbHVz
aFVuZGVmaW5lZE9wZXJhbmRTcGFuKG9wZXJhbmRTb3VyY2VzLnNpemUoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oCmluZGV4IGU5
ZTQzYWJmZWM0ODVmZWM3ZTY2MzE1MWMxYzIyZWM1MTg5NzQxM2MuLjAxNTczMDA3ZWRkZGQ3MGYz
MWQxN2FjMGQ5OWY3OGViZjVlYTZlYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oCkBAIC00MiwxMiArNDIsOSBAQCBzdHJ1Y3Qg
VW5kZWZpbmVkT3BlcmFuZFNwYW4gewogfTsKIAogY2xhc3MgVmFyaWFibGVFdmVudFN0cmVhbSA6
IHB1YmxpYyBWZWN0b3I8VmFyaWFibGVFdmVudD4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCB2ZXJib3NlID0gZmFsc2U7CiBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRBbmRMb2coY29uc3Qg
VmFyaWFibGVFdmVudCYgZXZlbnQpCiAgICAgewotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAg
ICAgICAgIGxvZ0V2ZW50KGV2ZW50KTsKICAgICAgICAgYXBwZW5kKGV2ZW50KTsKICAgICB9CiAg
ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGll
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKaW5k
ZXggYjk1M2NmZWM3MTVjNmFhZGQyYjYyMTM4MWRhMTVhYTExYzJmY2M1MC4uNGU3YTNjMTc0OWIw
YWVlNWFhMDYyNDE4ZDUyOWNmM2MzMDdmYTg2ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcApAQCAtMTkzLDcgKzE5Myw2IEBAIGlubGluZSBDYXBh
YmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgVGFpbENhbGxGb3J3
YXJkVmFyYXJnczoKICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVy
OgogICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6Ci0gICAgY2FzZSBWYXJhcmdzTGVu
Z3RoOgogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CiAgICAg
Y2FzZSBCcmFuY2g6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZv
ck9TUkVudHJ5SklUQ29kZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvck9T
UkVudHJ5SklUQ29kZS5jcHAKaW5kZXggYzAwNGZhY2NjMWFkMDVkMzZjZWRiZWRmOTY3ODJhYWI3
ZGNiOTgzMy4uMzA4MGRjMzQ1MDljNzMzMzI0YjgxNDNkMmE5NTRmMDhlZGFmMTNmYiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JPU1JFbnRyeUpJVENvZGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNw
cApAQCAtMzEsNyArMzEsOCBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiBG
b3JPU1JFbnRyeUpJVENvZGU6OkZvck9TUkVudHJ5SklUQ29kZSgpCi0gICAgOiBtX2VudHJ5RmFp
bHVyZUNvdW50KDApCisgICAgOiBtX2J5dGVjb2RlSW5kZXgoVUlOVF9NQVgpCisgICAgLCBtX2Vu
dHJ5RmFpbHVyZUNvdW50KDApCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCA4NTRkNGYxMjk4OTE1OTE3MDk4YzkzZjkxNzAzMTA3
ODY3YmFkZWYyLi40ZjJjYzgyODhkOTMwZTNkNWViY2E4MjA1MDdjM2EzZGU5N2EwNjFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0yMDks
NyArMjA5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNsZWFyU3Rh
Y2tGcmFtZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDAsIGNvZGUuZnJhbWVTaXplKCkpOwogCiAgICAg
ICAgICAgICAgICAgICAgIGppdC5lbWl0U2F2ZShjb2RlLmNhbGxlZVNhdmVSZWdpc3RlckF0T2Zm
c2V0TGlzdCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhl
YWRlcihjb2RlQmxvY2ssIFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2sp
KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihjb2Rl
QmxvY2ssIENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayk7CiAgICAgICAgICAgICAgICAgfSk7CiAK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2F0Y2hFbnRyeXBvaW50SW5kZXggOiBtX2dyYXBo
Lm1fZW50cnlwb2ludEluZGV4VG9DYXRjaEJ5dGVjb2RlSW5kZXgua2V5cygpKSB7CkBAIC0yNzUs
NyArMjc1LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0
aGUgQ29kZUJsb2NrIHRvIGhhdmUgYSB3ZWFrIHBvaW50ZXIgdG8gaXRzZWxmIGJlY2F1c2UKICAg
ICAgICAgLy8gdGhhdCB3b3VsZCBjYXVzZSBpdCB0byBhbHdheXMgZ2V0IGNvbGxlY3RlZC4KLSAg
ICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQuY29uc3RJbnRQdHIoYml0d2lzZV9jYXN0PGludHB0
cl90Pihjb2RlQmxvY2soKSkpLCBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVT
bG90Ojpjb2RlQmxvY2spKSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0SW50
UHRyKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oY29kZUJsb2NrKCkpKSwgYWRkcmVzc0ZvcihDYWxs
RnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKIAogICAgICAgICAvLyBTdGFjayBPdmVyZmxvdyBDaGVj
ay4KICAgICAgICAgdW5zaWduZWQgZXhpdEZyYW1lU2l6ZSA9IG1fZ3JhcGgucmVxdWlyZWRSZWdp
c3RlckNvdW50Rm9yRXhpdCgpICogc2l6ZW9mKFJlZ2lzdGVyKTsKQEAgLTM1Niw3ICszNTYsNyBA
QCBwdWJsaWM6CiAKICAgICAgICAgICAgIC8vIENoZWNrIEFyZ3VtZW50cy4KICAgICAgICAgICAg
IGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAo
KS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFt
ZXRlcnMoKSwgMCwgMCk7CisgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9
IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
YXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0
KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSkpOwpAQCAtMTI5
MSw5ICsxMjkxLDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDYWxsRXZhbDoKICAgICAgICAg
ICAgIGNvbXBpbGVDYWxsRXZhbCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
VmFyYXJnc0xlbmd0aDoKLSAgICAgICAgICAgIGNvbXBpbGVWYXJhcmdzTGVuZ3RoKCk7Ci0gICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAgIGNv
bXBpbGVMb2FkVmFyYXJncygpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTcwLDcgKzE5Njcs
NyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHN0
YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oCiAgICAgICAgICAgICBtX2Z0bFN0YXRlLmppdENv
ZGUtPmZ0bEZvck9TUkVudHJ5KCktPmVudHJ5QnVmZmVyKCktPmRhdGFCdWZmZXIoKSk7Ci0gICAg
ICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKGJ1ZmZlciArIG1fbm9k
ZS0+dW5saW5rZWRPcGVyYW5kKCkudmlydHVhbFJlZ2lzdGVyKCkudG9Mb2NhbCgpKSkpOworICAg
ICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShidWZmZXIgKyBtX25v
ZGUtPnVubGlua2VkTG9jYWwoKS50b0xvY2FsKCkpKSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21w
aWxlRXh0cmFjdENhdGNoTG9jYWwoKQpAQCAtMTk4OSw3ICsxOTg2LDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGNvbXBpbGVHZXRTdGFjaygpCiAgICAgewogICAgICAgICBTdGFja0FjY2Vzc0RhdGEq
IGRhdGEgPSBtX25vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICBBYnN0cmFjdFZhbHVl
JiB2YWx1ZSA9IG1fc3RhdGUub3BlcmFuZChkYXRhLT5vcGVyYW5kKTsKKyAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLm9wZXJhbmQoZGF0YS0+bG9jYWwpOwogICAgICAgICAK
ICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGlzQ29uY3JldGUoZGF0YS0+Zm9y
bWF0KSwgZGF0YS0+Zm9ybWF0KTsKICAgICAgICAgCkBAIC03OTg0LDEzICs3OTgxLDEzIEBAIHBy
aXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0Q2FsbGVlKCkKICAgICB7Ci0gICAgICAg
IHNldEpTVmFsdWUobV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKSkpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIo
YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAgICAgfQogCiAgICAgdm9pZCBj
b21waWxlU2V0Q2FsbGVlKCkKICAgICB7CiAgICAgICAgIGF1dG8gY2FsbGVlID0gbG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIoY2FsbGVlLCBwYXlsb2Fk
Rm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CisgICAgICAgIG1f
b3V0LnN0b3JlUHRyKGNhbGxlZSwgcGF5bG9hZEZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMoKQpAQCAtODAwNSw3ICs4MDAyLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29tcGlsZVNl
dEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkKICAgICB7Ci0gICAgICAgIG1fb3V0LnN0b3Jl
MzIobV9vdXQuY29uc3RJbnQzMihtX25vZGUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkp
LCBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpKTsKKyAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMy
KG1fbm9kZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSksIHBheWxvYWRGb3IoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBjb21waWxlR2V0U2NvcGUoKQpAQCAtOTYwMCw1MSArOTU5Nyw1MSBAQCBwcml2YXRlOgog
ICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNv
bXBpbGVWYXJhcmdzTGVuZ3RoKCkKKyAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncygpCiAgICAg
ewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBMb2FkVmFyYXJnc0Rh
dGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICBMVmFsdWUganNB
cmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7Ci0KKyAgICAg
ICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgCiAgICAgICAgIExWYWx1ZSBsZW5ndGggPSB2bUNhbGwoCiAgICAgICAgICAgICBJbnQz
Miwgb3BlcmF0aW9uU2l6ZU9mVmFyYXJncywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwganNB
cmd1bWVudHMsCiAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpOwot
CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSB3
aWxsIGNhbGwgYW4gZWZmZWN0ZnVsIGxlbmd0aCBwcm9wZXJ0eSB0d2ljZS4gVGhpcyBpcyBzYWZl
CisgICAgICAgIC8vIGZyb20gdGhlIHN0YW5kcG9pbnQgb2YgdGhlIFZNJ3MgaW50ZWdyaXR5LCBi
dXQgaXQncyBzdWJ0bHkgd3JvbmcgZnJvbSBhIHNwZWMgY29tcGxpYW5jZQorICAgICAgICAvLyBz
dGFuZHBvaW50LiBUaGUgYmVzdCBzb2x1dGlvbiB3b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4
aXQgKmludG8qIHRoZSBvcF9jYWxsX3ZhcmFyZ3MgcmlnaHQKKyAgICAgICAgLy8gcGFzdCB0aGUg
c2l6aW5nLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQxNDQ4CisgICAgICAgIAogICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9
IG1fb3V0LmFkZChsZW5ndGgsIG1fb3V0LmludDMyT25lKTsKIAotICAgICAgICBzZXRJbnQzMihs
ZW5ndGhJbmNsdWRpbmdUaGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJn
cygpCi0gICAgewotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICBMb2Fk
VmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICBM
VmFsdWUganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSk7
Ci0gICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbG93SW50MzIobV9ub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIAogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICBWYXJh
cmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0LmJpdE9y
KG1fb3V0LmlzWmVybzMyKGxlbmd0aEluY2x1ZGluZ1RoaXMpLCBtX291dC5hYm92ZShsZW5ndGhJ
bmNsdWRpbmdUaGlzLCBtX291dC5jb25zdEludDMyKGRhdGEtPmxpbWl0KSkpKTsgCisgICAgICAg
ICAgICBtX291dC5hYm92ZShsZW5ndGgsIGxlbmd0aEluY2x1ZGluZ1RoaXMpKTsKIAorICAgICAg
ICBzcGVjdWxhdGUoCisgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVs
bHB0ciwKKyAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0
LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7CisgICAgICAgIAogICAgICAgICBtX291dC5zdG9y
ZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7
CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTogVGhpcyBjb21wdXRhdGlvbiBpcyByYXRoZXIg
c2lsbHkuIElmIG9wZXJhdGlvbkxvYWRWYXJhcmdzIGp1c3QgdG9vayBhIHBvaW50ZXIgaW5zdGVh
ZAorICAgICAgICAvLyBGSVhNRTogVGhpcyBjb21wdXRhdGlvbiBpcyByYXRoZXIgc2lsbHkuIElm
IG9wZXJhdGlvbkxhb2RWYXJhcmdzIGp1c3QgdG9vayBhIHBvaW50ZXIgaW5zdGVhZAogICAgICAg
ICAvLyBvZiBhIFZpcnR1YWxSZWdpc3Rlciwgd2Ugd291bGRuJ3QgaGF2ZSB0byBkbyB0aGlzLgog
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNjYw
CiAgICAgICAgIExWYWx1ZSBtYWNoaW5lU3RhcnQgPSBtX291dC5sU2hyKAotICAgICAgICAgICAg
bV9vdXQuc3ViKGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0KS52YWx1ZSgpLCBtX2NhbGxG
cmFtZSksCisgICAgICAgICAgICBtX291dC5zdWIoYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3Rh
cnQub2Zmc2V0KCkpLnZhbHVlKCksIG1fY2FsbEZyYW1lKSwKICAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50UHRyKDMpKTsKICAgICAgICAgCiAgICAgICAgIHZtQ2FsbCgKICAgICAgICAgICAgIFZv
aWQsIG9wZXJhdGlvbkxvYWRWYXJhcmdzLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAogICAg
ICAgICAgICAgbV9vdXQuY2FzdFRvSW50MzIobWFjaGluZVN0YXJ0KSwganNBcmd1bWVudHMsIG1f
b3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSwKLSAgICAgICAgICAgIGxlbmd0aEluY2x1ZGlu
Z1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bWFuZGF0b3J5TWluaW11bSkpOworICAgICAg
ICAgICAgbGVuZ3RoLCBtX291dC5jb25zdEludDMyKGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlRm9yd2FyZFZhcmFyZ3MoKQogICAgIHsKLSAg
ICAgICAgaWYgKG1fbm9kZS0+YXJndW1lbnRzQ2hpbGQoKSkgewotICAgICAgICAgICAgTm9kZSog
YXJndW1lbnRzID0gbV9ub2RlLT5hcmd1bWVudHNDaGlsZCgpLm5vZGUoKTsKKyAgICAgICAgaWYg
KG1fbm9kZS0+Y2hpbGQxKCkpIHsKKyAgICAgICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy0+b3AoKSA9PSBQ
aGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkIHx8IGFyZ3VtZW50cy0+b3AoKSA9PSBQaGFudG9tTmV3
QXJyYXlCdWZmZXIgfHwgYXJndW1lbnRzLT5vcCgpID09IFBoYW50b21TcHJlYWQpIHsKICAgICAg
ICAgICAgICAgICBjb21waWxlRm9yd2FyZFZhcmFyZ3NXaXRoU3ByZWFkKCk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtOTY1MywyMSArOTY1MCw1MCBAQCBwcml2YXRlOgogCiAgICAgICAg
IExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAg
ICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICBpZiAobV9ub2Rl
LT5hcmd1bWVudHNDaGlsZCgpKQotICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9ub2Rl
LT5hcmd1bWVudHNDaGlsZCgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7Cisg
ICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpKQorICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1l
ID0gbV9ub2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSgpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUoKTsKIAotICAgICAgICB1bnNpZ25lZCBudW1iZXJP
ZkFyZ3VtZW50c1RvU2tpcCA9IGRhdGEtPm9mZnNldDsKLSAgICAgICAgTFZhbHVlIGxlbmd0aElu
Y2x1ZGluZ1RoaXMgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVl
IGxlbmd0aCA9IG51bGxwdHI7IAorICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9
IG51bGxwdHI7CisgICAgICAgIEFyZ3VtZW50c0xlbmd0aCBhcmd1bWVudHNMZW5ndGggPSBnZXRB
cmd1bWVudHNMZW5ndGgoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgaWYgKGFyZ3VtZW50c0xl
bmd0aC5pc0tub3duKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBrbm93bkxlbmd0aCA9IGFyZ3Vt
ZW50c0xlbmd0aC5rbm93bjsKKyAgICAgICAgICAgIGlmIChrbm93bkxlbmd0aCA+PSBkYXRhLT5v
ZmZzZXQpCisgICAgICAgICAgICAgICAga25vd25MZW5ndGggPSBrbm93bkxlbmd0aCAtIGRhdGEt
Pm9mZnNldDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBrbm93bkxlbmd0aCA9
IDA7CisgICAgICAgICAgICBsZW5ndGggPSBtX291dC5jb25zdEludDMyKGtub3duTGVuZ3RoKTsK
KyAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5jb25zdEludDMyKGtub3du
TGVuZ3RoICsgMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBuZWVkIHRv
IHBlcmZvcm0gdGhlIHNhbWUgbG9naWNhbCBvcGVyYXRpb24gYXMgdGhlIGNvZGUgYWJvdmUsIGJ1
dCB0aHJvdWdoIGR5bmFtaWMgb3BlcmF0aW9ucy4KKyAgICAgICAgICAgIGlmICghZGF0YS0+b2Zm
c2V0KQorICAgICAgICAgICAgICAgIGxlbmd0aCA9IGFyZ3VtZW50c0xlbmd0aC52YWx1ZTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzTGFyZ2VyID0g
bV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sg
c21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQz
MigwKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAg
ICBtX291dC5hYm92ZShhcmd1bWVudHNMZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoZGF0
YS0+b2Zmc2V0KSksIHVuc3VyZShpc0xhcmdlciksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAg
ICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzTGFy
Z2VyLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGxhcmdl
ckxlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5zdWIoYXJndW1lbnRzTGVuZ3RoLnZh
bHVlLCBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpKTsKKyAgICAgICAgICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBtX291
dC5waGkoSW50MzIsIHNtYWxsZXJPckVxdWFsTGVuZ3RoUmVzdWx0LCBsYXJnZXJMZW5ndGhSZXN1
bHQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1f
b3V0LmFkZChsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoMSkpOworICAgICAgICB9CiAKLSAgICAg
ICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0LnN1YihsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5p
bnQzMk9uZSk7CiAgICAgICAgIHNwZWN1bGF0ZSgKICAgICAgICAgICAgIFZhcmFyZ3NPdmVyZmxv
dywgbm9WYWx1ZSgpLCBudWxscHRyLAogICAgICAgICAgICAgbV9vdXQuYWJvdmUobGVuZ3RoSW5j
bHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5saW1pdCkpKTsKICAgICAgICAgCiAg
ICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoSW5jbHVkaW5nVGhpcywgcGF5bG9hZEZvcihkYXRh
LT5tYWNoaW5lQ291bnQpKTsKICAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwID0gZGF0YS0+b2Zmc2V0OwogICAgICAgICBMVmFsdWUgc291cmNlU3RhcnQg
PSBnZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9T
a2lwKTsKICAgICAgICAgTFZhbHVlIHRhcmdldFN0YXJ0ID0gYWRkcmVzc0ZvcihkYXRhLT5tYWNo
aW5lU3RhcnQpLnZhbHVlKCk7CiAKQEAgLTk3MjYsMjAgKzk3NTIsNjUgQEAgcHJpdmF0ZToKICAg
ICAgICAgLy8gV2UgbmVlZCB0byBwZXJmb3JtIHRoZSBzYW1lIGxvZ2ljYWwgb3BlcmF0aW9uIGFz
IHRoZSBjb2RlIGFib3ZlLCBidXQgdGhyb3VnaCBkeW5hbWljIG9wZXJhdGlvbnMuCiAgICAgICAg
IGlmICghbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApCiAgICAgICAgICAgICByZXR1cm4gYXJndW1l
bnRzTGVuZ3RoLnZhbHVlOwotICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtYmVy
T2ZBcmd1bWVudHNUb1NraXAgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSU5UMzJfTUlOKSk7CiAK
LSAgICAgICAgTFZhbHVlIGZpeGVkTGVuZ3RoID0gbV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0aC52
YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCkpOworICAgICAg
ICBMQmFzaWNCbG9jayBpc0xhcmdlciA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgVmFsdWVG
cm9tQmxvY2sgc21hbGxlck9yRXF1YWxMZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQu
Y29uc3RJbnQzMigwKSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0
LmFib3ZlKGFyZ3VtZW50c0xlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCkpLCB1bnN1cmUoaXNMYXJnZXIpLCB1bnN1cmUoY29udGludWF0aW9uKSk7
CisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNMYXJnZXIs
IGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGxhcmdlckxlbmd0aFJlc3Vs
dCA9IG1fb3V0LmFuY2hvcihtX291dC5zdWIoYXJndW1lbnRzTGVuZ3RoLnZhbHVlLCBtX291dC5j
b25zdEludDMyKG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSkpOworICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgcmV0dXJuIG1fb3V0LnNlbGVjdChtX291dC5ncmVh
dGVyVGhhbk9yRXF1YWwoZml4ZWRMZW5ndGgsIG1fb3V0LmludDMyWmVybyksIGZpeGVkTGVuZ3Ro
LCBtX291dC5pbnQzMlplcm8sIFNlbGVjdFByZWRpY3RhYmlsaXR5OjpQcmVkaWN0YWJsZSk7Cisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBy
ZXR1cm4gbV9vdXQucGhpKEludDMyLCBzbWFsbGVyT3JFcXVhbExlbmd0aFJlc3VsdCwgbGFyZ2Vy
TGVuZ3RoUmVzdWx0KTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJnc1dp
dGhTcHJlYWQoKQogICAgIHsKLSAgICAgICAgTm9kZSogYXJndW1lbnRzID0gbV9ub2RlLT5hcmd1
bWVudHNDaGlsZCgpLm5vZGUoKTsKKyAgICAgICAgSGFzaE1hcDxJbmxpbmVDYWxsRnJhbWUqLCBM
VmFsdWUsIFdURjo6RGVmYXVsdEhhc2g8SW5saW5lQ2FsbEZyYW1lKj46Okhhc2gsIFdURjo6TnVs
bGFibGVIYXNoVHJhaXRzPElubGluZUNhbGxGcmFtZSo+PiBjYWNoZWRTcHJlYWRMZW5ndGhzOwor
CisgICAgICAgIE5vZGUqIGFyZ3VtZW50cyA9IG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5V2l0
aFNwcmVhZCB8fCBhcmd1bWVudHMtPm9wKCkgPT0gUGhhbnRvbU5ld0FycmF5QnVmZmVyIHx8IGFy
Z3VtZW50cy0+b3AoKSA9PSBQaGFudG9tU3ByZWFkKTsKIAotICAgICAgICBMVmFsdWUgbGVuZ3Ro
SW5jbHVkaW5nVGhpcyA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICB1bnNp
Z25lZCBudW1iZXJPZlN0YXRpY0FyZ3VtZW50cyA9IDA7CisgICAgICAgIFZlY3RvcjxMVmFsdWUs
IDI+IHNwcmVhZExlbmd0aHM7CisKKyAgICAgICAgYXV0byBjb2xsZWN0QXJndW1lbnRDb3VudCA9
IHJlY3Vyc2FibGVMYW1iZGEoWyZdKGF1dG8gc2VsZiwgTm9kZSogdGFyZ2V0KSAtPiB2b2lkIHsK
KyAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRvbVNwcmVhZCkgeworICAgICAg
ICAgICAgICAgIHNlbGYodGFyZ2V0LT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRhcmdldC0+b3AoKSA9
PSBQaGFudG9tTmV3QXJyYXlXaXRoU3ByZWFkKSB7CisgICAgICAgICAgICAgICAgQml0VmVjdG9y
KiBiaXRWZWN0b3IgPSB0YXJnZXQtPmJpdFZlY3RvcigpOworICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB0YXJnZXQtPm51bUNoaWxkcmVuKCk7IGkrKykgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoYml0VmVjdG9yLT5nZXQoaSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmKG1fZ3JhcGgudmFyQXJnQ2hpbGQodGFyZ2V0LCBpKS5ub2RlKCkpOworICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICArK251bWJlck9mU3Rh
dGljQXJndW1lbnRzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0YXJnZXQtPm9wKCkgPT0gUGhhbnRv
bU5ld0FycmF5QnVmZmVyKSB7CisgICAgICAgICAgICAgICAgbnVtYmVyT2ZTdGF0aWNBcmd1bWVu
dHMgKz0gdGFyZ2V0LT5jYXN0T3BlcmFuZDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KCktPmxlbmd0
aCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgQVNTRVJUKHRhcmdldC0+b3AoKSA9PSBQaGFudG9tQ3JlYXRlUmVzdCk7CisgICAgICAgICAg
ICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IHRhcmdldC0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1
bWVudHNUb1NraXAgPSB0YXJnZXQtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lwKCk7CisgICAgICAg
ICAgICBzcHJlYWRMZW5ndGhzLmFwcGVuZChjYWNoZWRTcHJlYWRMZW5ndGhzLmVuc3VyZShpbmxp
bmVDYWxsRnJhbWUsIFsmXSAoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMtPmdldFNw
cmVhZExlbmd0aEZyb21JbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCk7CisgICAgICAgICAgICB9KS5pdGVyYXRvci0+dmFsdWUpOworICAgICAg
ICB9KTsKKworICAgICAgICBjb2xsZWN0QXJndW1lbnRDb3VudChhcmd1bWVudHMpOworICAgICAg
ICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmNvbnN0SW50MzIoMSArIG51bWJl
ck9mU3RhdGljQXJndW1lbnRzKTsKKyAgICAgICAgZm9yIChMVmFsdWUgbGVuZ3RoIDogc3ByZWFk
TGVuZ3RocykKKyAgICAgICAgICAgIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5hZGQobGVu
Z3RoSW5jbHVkaW5nVGhpcywgbGVuZ3RoKTsKIAogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRh
dGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAgICAgICBzcGVjdWxhdGUoCkBAIC05
NzUwLDcgKzk4MjEsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIExWYWx1ZSB0YXJnZXRTdGFydCA9
IGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZVN0YXJ0KS52YWx1ZSgpOwogCi0gICAgICAgIGF1dG8g
Zm9yd2FyZFNwcmVhZCA9IHJlY3Vyc2FibGVMYW1iZGEoW3RoaXMsICZ0YXJnZXRTdGFydF0oYXV0
byBzZWxmLCBOb2RlKiB0YXJnZXQsIExWYWx1ZSBzdG9yZUluZGV4KSAtPiBMVmFsdWUgeworICAg
ICAgICBhdXRvIGZvcndhcmRTcHJlYWQgPSByZWN1cnNhYmxlTGFtYmRhKFt0aGlzLCAmY2FjaGVk
U3ByZWFkTGVuZ3RocywgJnRhcmdldFN0YXJ0XShhdXRvIHNlbGYsIE5vZGUqIHRhcmdldCwgTFZh
bHVlIHN0b3JlSW5kZXgpIC0+IExWYWx1ZSB7CiAgICAgICAgICAgICBpZiAodGFyZ2V0LT5vcCgp
ID09IFBoYW50b21TcHJlYWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYodGFyZ2V0LT5j
aGlsZDEoKS5ub2RlKCksIHN0b3JlSW5kZXgpOwogCkBAIC05NzgyLDkgKzk4NTMsOCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodGFyZ2V0LT5vcCgpID09IFBoYW50b21D
cmVhdGVSZXN0KTsKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
ID0gdGFyZ2V0LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKCk7CiAKLSAgICAgICAg
ICAgIGF1dG8gbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSB0YXJnZXQtPm51bWJlck9mQXJndW1l
bnRzVG9Ta2lwKCk7Ci0gICAgICAgICAgICBMVmFsdWUgc291cmNlU3RhcnQgPSB0aGlzLT5nZXRB
cmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKTsK
LSAgICAgICAgICAgIExWYWx1ZSBzcHJlYWRMZW5ndGggPSBtX291dC56ZXJvRXh0UHRyKGdldFNw
cmVhZExlbmd0aEZyb21JbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lLCBudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCkpOworICAgICAgICAgICAgTFZhbHVlIHNvdXJjZVN0YXJ0ID0gdGhpcy0+
Z2V0QXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lLCB0YXJnZXQtPm51bWJlck9mQXJndW1l
bnRzVG9Ta2lwKCkpOworICAgICAgICAgICAgTFZhbHVlIHNwcmVhZExlbmd0aCA9IG1fb3V0Lnpl
cm9FeHRQdHIoY2FjaGVkU3ByZWFkTGVuZ3Rocy5nZXQoaW5saW5lQ2FsbEZyYW1lKSk7CiAKICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGxvb3AgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTEyMjk2
LDggKzEyMzY2LDggQEAgcHJpdmF0ZToKICAgICAgICAgTFZhbHVlIHNjb3BlID0gbG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKTsKIAogICAgICAgICBtX291dC5zdG9yZVB0cihtX2NhbGxGcmFtZSwg
cGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5fUGFja2V0X2ZyYW1lKTsKLSAgICAgICAgbV9v
dXQuc3RvcmVQdHIobV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcigwKSkp
LCBwYWNrZXQsIG1faGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfY2FsbGVyRnJhbWUpOwotICAg
ICAgICBtX291dC5zdG9yZVB0cihtX291dC5sb2FkUHRyKHBheWxvYWRGb3IoVmlydHVhbFJlZ2lz
dGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNr
ZW5fUGFja2V0X2NhbGxlZSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmxvYWRQdHIo
YWRkcmVzc0ZvcigwKSksIHBhY2tldCwgbV9oZWFwcy5TaGFkb3dDaGlja2VuX1BhY2tldF9jYWxs
ZXJGcmFtZSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmxvYWRQdHIocGF5bG9hZEZv
cihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSwgcGFja2V0LCBtX2hlYXBzLlNoYWRvd0NoaWNrZW5f
UGFja2V0X2NhbGxlZSk7CiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKHNjb3BlLCBwYWNrZXQsIG1f
aGVhcHMuU2hhZG93Q2hpY2tlbl9QYWNrZXRfc2NvcGUpOwogICAgIH0KICAgICAKQEAgLTEyMzU4
LDcgKzEyNDI4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgQXJndW1lbnRzTGVuZ3RoIGxlbmd0aDsK
IAogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFy
YXJncygpKSB7Ci0gICAgICAgICAgICBsZW5ndGgua25vd24gPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAtIDEpOworICAg
ICAgICAgICAgbGVuZ3RoLmtub3duID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAtIDE7CiAgICAgICAgICAgICBsZW5ndGguaXNLbm93biA9IHRydWU7CiAgICAg
ICAgICAgICBsZW5ndGgudmFsdWUgPSBtX291dC5jb25zdEludDMyKGxlbmd0aC5rbm93bik7CiAg
ICAgICAgIH0gZWxzZSB7CkBAIC0xMjM4OCw3ICsxMjQ1OCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihmcmFtZS0+Y2FsbGVlUmVj
b3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpKTsKICAgICAgICAgICAgIHJldHVybiB3ZWFrUG9pbnRl
cihmcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKS5hc0NlbGwoKSk7CiAgICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIo
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSkpOworICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihh
ZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOwogICAgIH0KICAgICAKICAgICBMVmFs
dWUgZ2V0QXJndW1lbnRzU3RhcnQoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIHVu
c2lnbmVkIG9mZnNldCA9IDApCkBAIC0xNzY1Myw3ICsxNzcyMyw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+Y29t
bW9uLmFkZENvZGVPcmlnaW4oY29kZU9yaWdpbik7CiAgICAgICAgIG1fb3V0LnN0b3JlMzIoCiAg
ICAgICAgICAgICBtX291dC5jb25zdEludDMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKLSAgICAg
ICAgICAgIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpKSk7CisgICAgICAgICAgICB0YWdGb3IoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpKTsKICNpZiAhVVNFKEJVSUxUSU5fRlJBTUVfQUREUkVT
UykgfHwgQVNTRVJUX0VOQUJMRUQKICAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9jYWxsRnJhbWUs
IG1fb3V0LmFic29sdXRlKCZ2bSgpLnRvcENhbGxGcmFtZSkpOwogI2VuZGlmCkBAIC0xNzc2MSw4
ICsxNzgzMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAmbV9mdGxTdGF0ZS5qaXRDb2Rl
LT5vc3JFeGl0RGVzY3JpcHRvcnMuYWxsb2MoCiAgICAgICAgICAgICBsb3dWYWx1ZS5mb3JtYXQo
KSwgcHJvZmlsZSwKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJl
ck9mQXJndW1lbnRzKCksCi0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5u
dW1iZXJPZkxvY2FscygpLAotICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
bnVtYmVyT2ZUbXBzKCkpOworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
bnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgfQogCiAgICAgdm9pZCBhcHBlbmRPU1JFeGl0KApAQCAt
MTc4NjcsMTUgKzE3OTM2LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9KTsKICAgICAgICAg
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0RGVzY3JpcHRvci0+bV92YWx1
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE9wZXJhbmQgb3BlcmFuZCA9IGV4aXREZXNj
cmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICBpbnQgb3Bl
cmFuZCA9IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBhdmFpbGFi
aWxpdHlNYXAubV9sb2NhbHNbaV07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChPcHRp
b25zOjp2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpCiAgICAgICAgICAgICAgICAgJiYgbV9n
cmFwaC5tX3BsYW4ubW9kZSgpICE9IEZUTEZvck9TUkVudHJ5TW9kZSkgewogCi0gICAgICAgICAg
ICAgICAgaWYgKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBtX2dyYXBoLmlzTGl2ZUluQnl0ZWNv
ZGUob3BlcmFuZCwgZXhpdE9yaWdpbikpCi0gICAgICAgICAgICAgICAgICAgIERGR19DUkFTSCht
X2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiTGl2ZSBieXRlY29kZSBsb2NhbCBub3QgYXZhaWxh
YmxlOiBvcGVyYW5kID0gIiwgb3BlcmFuZCwgIiwgYXZhaWxhYmlsaXR5ID0gIiwgYXZhaWxhYmls
aXR5LCAiLCBvcmlnaW4gPSAiLCBleGl0T3JpZ2luKS5kYXRhKCkpOworICAgICAgICAgICAgICAg
IGlmIChhdmFpbGFiaWxpdHkuaXNEZWFkKCkgJiYgbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZp
cnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgZXhpdE9yaWdpbikpCisgICAgICAgICAgICAgICAgICAg
IERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiTGl2ZSBieXRlY29kZSBsb2Nh
bCBub3QgYXZhaWxhYmxlOiBvcGVyYW5kID0gIiwgVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCAi
LCBhdmFpbGFiaWxpdHkgPSAiLCBhdmFpbGFiaWxpdHksICIsIG9yaWdpbiA9ICIsIGV4aXRPcmln
aW4pLmRhdGEoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBFeGl0VmFsdWUgZXhpdFZh
bHVlID0gZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBhdmFpbGFiaWxp
dHkpOwogICAgICAgICAgICAgaWYgKGV4aXRWYWx1ZS5oYXNJbmRleEluU3RhY2ttYXBMb2NhdGlv
bnMoKSkKQEAgLTE4MTc1LDM5ICsxODI0NCwzOSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4g
bV9vdXQuYWxyZWFkeVJlZ2lzdGVyZWRXZWFrUG9pbnRlcihtX2dyYXBoLCBzdHJ1Y3R1cmUuZ2V0
KCkpOwogICAgIH0KICAgICAKLSAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihMVmFsdWUgYmFz
ZSwgT3BlcmFuZCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKKyAgICBUeXBlZFBvaW50
ZXIgYWRkcmVzc0ZvcihMVmFsdWUgYmFzZSwgaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQg
PSAwKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3MoYmFzZSwgbV9oZWFwcy52
YXJpYWJsZXNbb3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKV0sIG9mZnNldCk7Cisg
ICAgICAgIHJldHVybiBtX291dC5hZGRyZXNzKGJhc2UsIG1faGVhcHMudmFyaWFibGVzW29wZXJh
bmRdLCBvZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihMVmFsdWUg
YmFzZSwgT3BlcmFuZCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKExWYWx1
ZSBiYXNlLCBpbnQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKGJh
c2UsIG9wZXJhbmQsIFBheWxvYWRPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgdGFn
Rm9yKExWYWx1ZSBiYXNlLCBPcGVyYW5kIG9wZXJhbmQpCisgICAgVHlwZWRQb2ludGVyIHRhZ0Zv
cihMVmFsdWUgYmFzZSwgaW50IG9wZXJhbmQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRkcmVz
c0ZvcihiYXNlLCBvcGVyYW5kLCBUYWdPZmZzZXQpOwogICAgIH0KLSAgICBUeXBlZFBvaW50ZXIg
YWRkcmVzc0ZvcihPcGVyYW5kIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIFR5
cGVkUG9pbnRlciBhZGRyZXNzRm9yKGludCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVy
KCksIG9mZnNldCk7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kKSwgb2Zmc2V0KTsKICAgICB9CiAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQogICAgIHsKICAgICAg
ICAgaWYgKG9wZXJhbmQuaXNMb2NhbCgpKQotICAgICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Io
bV9jYXB0dXJlZCwgb3BlcmFuZCwgb2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Io
bV9jYWxsRnJhbWUsIG9wZXJhbmQsIG9mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gYWRkcmVz
c0ZvcihtX2NhcHR1cmVkLCBvcGVyYW5kLm9mZnNldCgpLCBvZmZzZXQpOworICAgICAgICByZXR1
cm4gYWRkcmVzc0ZvcihtX2NhbGxGcmFtZSwgb3BlcmFuZC5vZmZzZXQoKSwgb2Zmc2V0KTsKICAg
ICB9Ci0gICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoT3BlcmFuZCBvcGVyYW5kKQorICAgIFR5
cGVkUG9pbnRlciBwYXlsb2FkRm9yKGludCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IHBheWxvYWRGb3Iob3BlcmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHJldHVybiBw
YXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSk7CiAgICAgfQogICAgIFR5cGVkUG9p
bnRlciBwYXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkZHJlc3NGb3Iob3BlcmFuZCwgUGF5bG9hZE9mZnNldCk7CiAgICAgfQotICAgIFR5
cGVkUG9pbnRlciB0YWdGb3IoT3BlcmFuZCBvcGVyYW5kKQorICAgIFR5cGVkUG9pbnRlciB0YWdG
b3IoaW50IG9wZXJhbmQpCiAgICAgewotICAgICAgICByZXR1cm4gdGFnRm9yKG9wZXJhbmQudmly
dHVhbFJlZ2lzdGVyKCkpOworICAgICAgICByZXR1cm4gdGFnRm9yKFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kKSk7CiAgICAgfQogICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFbnRyeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNw
cAppbmRleCAwOTFlN2YzYzliNDk4MzQwNzZhOGQ2ZjkxNzQyY2NiNWNhZDVlYTk2Li45MzMxNzcx
MGY2ZDA2ODYwOTE5YmMwMDI1MzEzYTEzMjE5MDQ0OTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkVudHJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkVudHJ5LmNwcApAQCAtNzUsNyArNzUsNyBAQCB2b2lkKiBwcmVwYXJlT1NS
RW50cnkoCiAgICAgICAgIGRhdGFMb2coIiAgICBWYWx1ZXMgYXQgZW50cnk6ICIsIHZhbHVlcywg
IlxuIik7CiAgICAgCiAgICAgZm9yIChpbnQgYXJndW1lbnQgPSB2YWx1ZXMubnVtYmVyT2ZBcmd1
bWVudHMoKTsgYXJndW1lbnQtLTspIHsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZU9uU3RhY2sgPSBj
YWxsRnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKS5hc2FuVW5z
YWZlSlNWYWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHZhbHVlT25TdGFjayA9IGNhbGxGcmFtZS0+
cih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkub2Zmc2V0KCkpLmFzYW5VbnNh
ZmVKU1ZhbHVlKCk7CiAgICAgICAgIE9wdGlvbmFsPEpTVmFsdWU+IHJlY29uc3RydWN0ZWRWYWx1
ZSA9IHZhbHVlcy5hcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgIGlmICgocmVjb25zdHJ1Y3Rl
ZFZhbHVlICYmIHZhbHVlT25TdGFjayA9PSByZWNvbnN0cnVjdGVkVmFsdWUudmFsdWUoKSkgfHwg
IWFyZ3VtZW50KQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExPU1JFeGl0LmNwcAppbmRleCAwNGM4NTc5OWU0ZDQ2OTIzYTMxODY3MThlMTlmMjRiZGZm
ZGFiYTRmLi4wOTk1OGQyYzRmOWE1ZDg5YjVmYmJiNjVmODZiYjZkYWJjZGYxOGUzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKQEAgLTQ3LDEwICs0NywxMCBAQCB1
c2luZyBuYW1lc3BhY2UgREZHOwogCiBPU1JFeGl0RGVzY3JpcHRvcjo6T1NSRXhpdERlc2NyaXB0
b3IoCiAgICAgRGF0YUZvcm1hdCBwcm9maWxlRGF0YUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMs
IHVuc2lnbmVkIG51bWJlck9mTG9jYWxzLCB1bnNpZ25lZCBudW1iZXJPZlRtcHMpCisgICAgdW5z
aWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKQogICAgIDog
bV9wcm9maWxlRGF0YUZvcm1hdChwcm9maWxlRGF0YUZvcm1hdCkKICAgICAsIG1fdmFsdWVQcm9m
aWxlKHZhbHVlUHJvZmlsZSkKLSAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1lbnRzLCBudW1i
ZXJPZkxvY2FscywgbnVtYmVyT2ZUbXBzKQorICAgICwgbV92YWx1ZXMobnVtYmVyT2ZBcmd1bWVu
dHMsIG51bWJlck9mTG9jYWxzKQogewogfQogCkBAIC0xMTcsMyArMTE3LDUgQEAgQ29kZUxvY2F0
aW9uSnVtcDxKU0ludGVybmFsUHRyVGFnPiBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNo
KENvZGVCbG9jayogZnQKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKQorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKaW5k
ZXggZmQ3ZjlmMDViYzQ4OWMxZjZhZWNlMDk3YWQ4YTRkMWUyN2I4MDMyMi4uZGE4N2NjZjMyNzNm
ZTRiZTM2MDY4M2I4YWYzYmJmNTE2ZDYyMjVlYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0LmgKQEAgLTY5LDcgKzY5LDcgQEAgc3RydWN0IE9TUkV4aXRIYW5kbGU7CiBzdHJ1
Y3QgT1NSRXhpdERlc2NyaXB0b3IgewogICAgIE9TUkV4aXREZXNjcmlwdG9yKAogICAgICAgICBE
YXRhRm9ybWF0IHByb2ZpbGVEYXRhRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
LAotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVyT2ZM
b2NhbHMsIHVuc2lnbmVkIG51bWJlck9mVG1wcyk7CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9m
QXJndW1lbnRzLCB1bnNpZ25lZCBudW1iZXJPZkxvY2Fscyk7CiAKICAgICAvLyBUaGUgZmlyc3Qg
YXJndW1lbnQgdG8gdGhlIGV4aXQgY2FsbCBtYXkgYmUgYSB2YWx1ZSB3ZSB3aXNoIHRvIHByb2Zp
bGUuCiAgICAgLy8gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgZm9ybWF0IHdpbGwgYmUgbm90IElu
dmFsaWQgYW5kIHdlJ2xsIGhhdmUgYQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0Q29tcGlsZXIuY3BwCmluZGV4IDIxNzE1ZDNkZDIyYzM4NzllYjA0ZmI2Yjc4ZTc5
NTI4NGY1ZTAzOTQuLjY2NGQzYjk4OGFmN2VhODNmNmZiODJiY2IzYThjMGE4ODE3NmVlNzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAK
QEAgLTI5LDcgKzI5LDYgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkJ5dGVj
b2RlU3RydWN0cy5oIgotI2luY2x1ZGUgIkNoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgiCiAj
aW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgiCiAjaW5jbHVkZSAiRlRMRXhpdEFy
Z3VtZW50Rm9yT3BlcmFuZC5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKQEAgLTM4LDExICsz
NywxMCBAQAogI2luY2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5o
IgogI2luY2x1ZGUgIkZUTFNhdmVSZXN0b3JlLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQ
YXRoQ2FsbC5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgotI2luY2x1ZGUgIlByb2Jl
Q29udGV4dC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBGVEwgewogCkBAIC00NzYsNTIgKzQ3NCwxNiBAQCBzdGF0aWMgdm9pZCBjb21waWxl
U3R1YihWTSYgdm0sIHVuc2lnbmVkIGV4aXRJRCwgSklUQ29kZSogaml0Q29kZSwgT1NSRXhpdCYg
ZXhpdAogCiAgICAgc2l6ZV90IGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVz
ID0gYmFzZWxpbmVDb2RlQmxvY2stPmNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygp
OwogCi0gICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZVN0YWNrQ29udGFpbnNBY3RpdmVD
aGVja3BvaW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSogdG1wU2NyYXRjaCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8SlNWYWx1ZSo+KHNjcmF0Y2ggKyBleGl0Lm1fZGVzY3JpcHRvci0+bV92YWx1ZXMudG1w
SW5kZXgoMCkpOwotICAgICAgICBWTSogdm1QdHIgPSAmdm07Ci0gICAgICAgIGppdC5wcm9iZShb
PV0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICBhdXRvIGFkZFNpZGVT
dGF0ZSA9IFsmXSAoQ2FsbEZyYW1lKiBmcmFtZSwgQnl0ZWNvZGVJbmRleCBpbmRleCwgc2l6ZV90
IHRtcE9mZnNldCkgewotICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50
T1NSRXhpdFNpZGVTdGF0ZT4gc2lkZVN0YXRlID0gV1RGOjptYWtlVW5pcXVlPENoZWNrcG9pbnRP
U1JFeGl0U2lkZVN0YXRlPigpOwotCi0gICAgICAgICAgICAgICAgc2lkZVN0YXRlLT5ieXRlY29k
ZUluZGV4ID0gaW5kZXg7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
YXhOdW1DaGVja3BvaW50VG1wczsgKytpKQotICAgICAgICAgICAgICAgICAgICBzaWRlU3RhdGUt
PnRtcHNbaV0gPSB0bXBTY3JhdGNoW2kgKyB0bXBPZmZzZXRdOwotCi0gICAgICAgICAgICAgICAg
dm1QdHItPmFkZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUoZnJhbWUsIFdURk1vdmUoc2lkZVN0YXRl
KSk7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2Rl
T3JpZ2luOwotICAgICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjb250ZXh0LmdwcjxD
YWxsRnJhbWUqPihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgICAgICBmb3Ig
KGNvZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29kZU9yaWdp
bi0+aW5saW5lQ2FsbEZyYW1lKCk7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxs
RnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKSkgewotICAgICAgICAgICAgICAg
IEJ5dGVjb2RlSW5kZXggY2FsbEJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUlu
ZGV4KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjYWxsQnl0ZWNvZGVJbmRleC5jaGVja3BvaW50
KCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgYXV0
byogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKCk7Ci0gICAg
ICAgICAgICAgICAgYWRkU2lkZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbEZyYW1lKj4ocmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oY2FsbEZyYW1lKSArIGlubGluZUNhbGxGcmFtZS0+cmV0dXJu
UENPZmZzZXQoKSAtIHNpemVvZihDUFVSZWdpc3RlcikpLCBjYWxsQnl0ZWNvZGVJbmRleCwgaW5s
aW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoIWNvZGVPcmlnaW4pCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBp
ZiAoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRl
eCgpOyBieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSkKLSAgICAgICAgICAgICAgICBhZGRTaWRl
U3RhdGUoY2FsbEZyYW1lLCBieXRlY29kZUluZGV4LCAwKTsKLSAgICAgICAgfSk7Ci0gICAgfQot
CiAgICAgLy8gTm93IGdldCBzdGF0ZSBvdXQgb2YgdGhlIHNjcmF0Y2ggYnVmZmVyIGFuZCBwbGFj
ZSBpdCBiYWNrIGludG8gdGhlIHN0YWNrLiBUaGUgdmFsdWVzIGFyZQogICAgIC8vIGFscmVhZHkg
cmVib3hlZCBzbyB3ZSBqdXN0IG1vdmUgdGhlbS4KICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0g
ZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsgaW5kZXgtLTspIHsKLSAgICAgICAg
T3BlcmFuZCBvcGVyYW5kID0gZXhpdC5tX2Rlc2NyaXB0b3ItPm1fdmFsdWVzLm9wZXJhbmRGb3JJ
bmRleChpbmRleCk7Ci0KLSAgICAgICAgaWYgKG9wZXJhbmQuaXNUbXAoKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gZXhpdC5tX2Rlc2NyaXB0
b3ItPm1fdmFsdWVzLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGluZGV4KTsKIAotICAgICAgICBp
ZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYgb3BlcmFuZC50b0xvY2FsKCkgPCBzdGF0aWNfY2FzdDxp
bnQ+KGJhc2VsaW5lVmlydHVhbFJlZ2lzdGVyc0ZvckNhbGxlZVNhdmVzKSkKKyAgICAgICAgaWYg
KHJlZy5pc0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4oYmFzZWxp
bmVWaXJ0dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMpKQogICAgICAgICAgICAgY29udGludWU7
CiAKICAgICAgICAgaml0LmxvYWQ2NChzY3JhdGNoICsgaW5kZXgsIEdQUkluZm86OnJlZ1QwKTsK
LSAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRk
cmVzc0ZvcihvcGVyYW5kLnZpcnR1YWxSZWdpc3RlcigpKSk7CisgICAgICAgIGppdC5zdG9yZTY0
KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVnKSk7CiAgICAg
fQogICAgIAogICAgIGhhbmRsZUV4aXRDb3VudHModm0sIGppdCwgZXhpdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAppbmRleCAwMDY5YTNhNmU2ZmUxZGVm
Njk2ODliMzhiMjIzYWYwNDRiMTgyOTZlLi40NDdjMDBhNzNkNTVkMGUwYjk2YTQxY2I1MGE3ZmMy
NmMwYmRmNjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJh
dGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5j
cHAKQEAgLTU0MSw3ICs1NDEsNyBAQCBleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJBVElPTiBv
cGVyYXRpb25NYXRlcmlhbGl6ZU9iamVjdEluT1NSKEpTR2xvYmFsT2JqZWN0KgogICAgICAgICAg
ICAgLy8gV2UgYWxzbyBjYW5ub3QgYWxsb2NhdGUgYSBuZXcgYnV0dGVyZmx5IGZyb20gY29tcGls
YXRpb24gdGhyZWFkcyBzaW5jZSBpdCdzIGludmFsaWQgdG8gYWxsb2NhdGUgY2VsbHMgZnJvbQog
ICAgICAgICAgICAgLy8gYSBjb21waWxhdGlvbiB0aHJlYWQuCiAgICAgICAgICAgICBXVEY6OnN0
b3JlU3RvcmVGZW5jZSgpOwotICAgICAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVy
KG5ld0FycmF5QnVmZmVyLm1faW1tdXRhYmxlQnV0dGVyZmx5KS5zZXQodm0sIGNvZGVCbG9jaywg
aW1tdXRhYmxlQnV0dGVyZmx5KTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdp
c3RlcihuZXdBcnJheUJ1ZmZlci5tX2ltbXV0YWJsZUJ1dHRlcmZseS5vZmZzZXQoKSkuc2V0KHZt
LCBjb2RlQmxvY2ssIGltbXV0YWJsZUJ1dHRlcmZseSk7CiAgICAgICAgICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT3V0cHV0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0
cHV0LmNwcAppbmRleCBkNTdmYjFlZWE4MDQ0YTM0Yjc5MTc2OGE5MDk3Njk4OTk4YWMzMzkyLi43
NDkzM2RjNjA1MTVjNWRhMDBlYTE4ZmM3ZDVkYjNhZDljZTVlOWNmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjU1LDM3ICs2NTUsMTUgQEAgTFZhbHVlIE91
dHB1dDo6bm90WmVybzY0KExWYWx1ZSB2YWx1ZSkKICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5k
TmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Tm90RXF1YWwsIG9yaWdpbigpLCB2YWx1ZSwgaW50
NjRaZXJvKTsKIH0KIAotTFZhbHVlIE91dHB1dDo6c2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVl
IGxlZnQsIExWYWx1ZSByaWdodCwgU2VsZWN0UHJlZGljdGFiaWxpdHkgcHJlZGljdGFiaWxpdHkp
CitMVmFsdWUgT3V0cHV0OjpzZWxlY3QoTFZhbHVlIHZhbHVlLCBMVmFsdWUgdGFrZW4sIExWYWx1
ZSBub3RUYWtlbikKIHsKICAgICBpZiAodmFsdWUtPmhhc0ludDMyKCkpIHsKICAgICAgICAgaWYg
KHZhbHVlLT5hc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gbGVmdDsKKyAgICAgICAgICAg
IHJldHVybiB0YWtlbjsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIHJpZ2h0Owor
ICAgICAgICAgICAgcmV0dXJuIG5vdFRha2VuOwogICAgIH0KLQotICAgIGlmIChwcmVkaWN0YWJp
bGl0eSA9PSBTZWxlY3RQcmVkaWN0YWJpbGl0eTo6Tm90UHJlZGljdGFibGUpCi0gICAgICAgIHJl
dHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9y
aWdpbigpLCB2YWx1ZSwgbGVmdCwgcmlnaHQpOwotCi0gICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gbmV3QmxvY2soKTsKLSAgICBMQmFzaWNCbG9jayBsZWZ0VGFrZW5CbG9jayA9IG5ld0Js
b2NrKCk7Ci0gICAgTEJhc2ljQmxvY2sgcmlnaHRUYWtlbkJsb2NrID0gbmV3QmxvY2soKTsKLQot
ICAgIG1fYmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKLSAgICAgICAgbV9wcm9jLCBCMzo6
QnJhbmNoLCBvcmlnaW4oKSwgdmFsdWUsCi0gICAgICAgIEZyZXF1ZW50ZWRCbG9jayhsZWZ0VGFr
ZW5CbG9jaywgcHJlZGljdGFiaWxpdHkgIT0gU2VsZWN0UHJlZGljdGFiaWxpdHk6OlJpZ2h0TGlr
ZWx5ID8gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbCA6IEZyZXF1ZW5jeUNsYXNzOjpSYXJlKSwKLSAg
ICAgICAgRnJlcXVlbnRlZEJsb2NrKHJpZ2h0VGFrZW5CbG9jaywgcHJlZGljdGFiaWxpdHkgIT0g
U2VsZWN0UHJlZGljdGFiaWxpdHk6OkxlZnRMaWtlbHkgPyBGcmVxdWVuY3lDbGFzczo6Tm9ybWFs
IDogRnJlcXVlbmN5Q2xhc3M6OlJhcmUpKTsKLQotICAgIExWYWx1ZSBwaGkgPSBjb250aW51YXRp
b24tPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlBoaSwgbGVmdC0+dHlwZSgpLCBv
cmlnaW4oKSk7Ci0KLSAgICBsZWZ0VGFrZW5CbG9jay0+YXBwZW5kTmV3PEIzOjpVcHNpbG9uVmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIGxlZnQsIHBoaSk7Ci0gICAgbGVmdFRha2VuQmxvY2stPmFw
cGVuZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEIzOjpKdW1wLCBvcmlnaW4oKSwgQjM6OkZyZXF1
ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKLQotICAgIHJpZ2h0VGFrZW5CbG9jay0+YXBwZW5k
TmV3PEIzOjpVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHJpZ2h0LCBwaGkpOwotICAg
IHJpZ2h0VGFrZW5CbG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6Okp1bXAs
IG9yaWdpbigpLCBCMzo6RnJlcXVlbnRlZEJsb2NrKGNvbnRpbnVhdGlvbikpOwotCi0gICAgbV9i
bG9jayA9IGNvbnRpbnVhdGlvbjsKLSAgICByZXR1cm4gcGhpOworICAgIHJldHVybiBtX2Jsb2Nr
LT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCB2YWx1
ZSwgdGFrZW4sIG5vdFRha2VuKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6YXRvbWljWGNoZ0FkZChM
VmFsdWUgb3BlcmFuZCwgVHlwZWRQb2ludGVyIHBvaW50ZXIsIFdpZHRoIHdpZHRoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKaW5kZXggNGMwMmIzNDA4NTE0NmY3ZGYwMjU2Mjdk
NWZmMzFjNzgxMGQ4ZmI3Ni4uYzU2YjRlZjdlMDYwZjkzNjJiM2JkY2EwZmQ0NmEwM2FhNTcwY2Ey
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCkBAIC0zOSw3ICszOSw2IEBA
CiAjaW5jbHVkZSAiRlRMQWJicmV2aWF0ZWRUeXBlcy5oIgogI2luY2x1ZGUgIkZUTEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJGVExDb21tb25WYWx1ZXMuaCIKLSNpbmNsdWRl
ICJGVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5oIgogI2luY2x1ZGUgIkZUTFN0YXRlLmgiCiAjaW5j
bHVkZSAiRlRMU3dpdGNoQ2FzZS5oIgogI2luY2x1ZGUgIkZUTFR5cGVkUG9pbnRlci5oIgpAQCAt
MzY2LDcgKzM2NSw3IEBAIHB1YmxpYzoKICAgICBMVmFsdWUgdGVzdElzWmVyb1B0cihMVmFsdWUg
dmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBpc051bGwoYml0QW5kKHZhbHVlLCBtYXNrKSk7
IH0KICAgICBMVmFsdWUgdGVzdE5vblplcm9QdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykg
eyByZXR1cm4gbm90TnVsbChiaXRBbmQodmFsdWUsIG1hc2spKTsgfQogCi0gICAgTFZhbHVlIHNl
bGVjdChMVmFsdWUgdmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuLCBTZWxlY3RQ
cmVkaWN0YWJpbGl0eSA9IFNlbGVjdFByZWRpY3RhYmlsaXR5OjpOb3RQcmVkaWN0YWJsZSk7Cisg
ICAgTFZhbHVlIHNlbGVjdChMVmFsdWUgdmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRh
a2VuKTsKICAgICAKICAgICAvLyBUaGVzZSBhcmUgcmVsYXhlZCBhdG9taWNzIGJ5IGRlZmF1bHQu
IFVzZSBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5OjpkZWNvcmF0ZUZlbmNlZEFjY2VzcygpIHdpdGgg
YQogICAgIC8vIG5vbi1udWxsIGhlYXAgdG8gbWFrZSB0aGVtIHNlcV9jc3QgZmVuY2VkLgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTZWxlY3RQcmVkaWN0YWJpbGl0
eS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTZWxlY3RQcmVkaWN0YWJpbGl0eS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjAyYWNmZmU0MDQ0NTU1MTAwZWI0NWQ4
ZjZhMDMwOWYzNTgxMWQ1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2VsZWN0UHJlZGljdGFiaWxpdHku
aAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoRlRMX0pJ
VCkKLQotbmFtZXNwYWNlIEpTQzo6RlRMIHsKLQotZW51bSBjbGFzcyBTZWxlY3RQcmVkaWN0YWJp
bGl0eSA6IHVpbnQ4X3QgewotICAgIC8vIFVzZSB0aGlzIHdoZW4gd2UgZXhwZWN0IGl0IHRvIGJl
IHZlcnkgdW5saWtlbHkgdGhlIGJyYW5jaCBwcmVkaWN0b3Igd2lsbCBiZSBhYmxlIHRvIGd1ZXNz
IHdoaWNoIHNpZGUgb2YgdGhlIHNlbGVjdCB3aWxsIGJlIGNob3Nlbi4gVGhpcyB0ZWxscyBCMyB0
byB0cnkgdG8gZW1pdCB0aGUgc2VsZWN0IGFzIGEgY29uZGl0aW9uYWwgbW92ZSwgd2hpY2ggKHVz
dWFsbHkpIGlzIG5vdCBzcGVjdWxhdGVkIGJ5IHRoZSBDUFUuCi0gICAgTm90UHJlZGljdGFibGUs
Ci0gICAgLy8gVXNlIHRoaXMgd2hlbiBpdCdzIHBvc3NpYmxlIGEgYnJhbmNoIHByZWRpY3RvciB3
aWxsIGRvIGEgZ29vZCBqb2IgZ3Vlc3NpbmcgdGhlIHNlbGVjdGVkIHZhbHVlIGJ1dCB3ZSBkb24n
dCBrbm93IGEgcHJpb3JpIHdoaWNoIHNpZGUgaXMgbW9yZSBsaWtlbHkuCi0gICAgUHJlZGljdGFi
bGUsCi0gICAgLy8gVXNlIHRoZXNlIHdoZW4gd2UgYXJlIHZlcnkgc3VyZSBvbmUgb2YgdGhlIHR3
byBzaWRlcyBpcyBzdWJzdGFudGlhbGx5IG1vcmUgbGlrZWx5IHRoYW4gdGhlIG90aGVyLgotICAg
IExlZnRMaWtlbHksCi0gICAgUmlnaHRMaWtlbHksCi19OwotCi19IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTbG93UGF0aENhbGwuaAppbmRleCA3MGQyODhlMDNmMWQ4ZDgxZjI3N2Y2YjgyMTdh
YzlmM2ZhODBjMTJhLi5mZTJhNGVjNzI2Y2VjZWQzNDEzMDkzOTk0OTRlYTllYjdlNmI0YjVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgKQEAgLTEwMCw3
ICsxMDAsNyBAQCBTbG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigKICAgICBpZiAoY2FsbFNpdGVJ
bmRleCkgewogICAgICAgICBqaXQuc3RvcmUzMigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKLSAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcykpKTsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKENhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKSk7CiAgICAgfQogICAgIHJldHVy
biBjYWxsT3BlcmF0aW9uKHZtLCB1c2VkUmVnaXN0ZXJzLCBqaXQsIGV4Y2VwdGlvblRhcmdldCwg
ZnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJndW1lbnRzLi4uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZ2VuZXJhdG9yL0NoZWNrcG9pbnRzLnJiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA5NmE1ZjUyNzdkZDYzMWFjZDRjY2JlY2QxNGIyNGNjNWQ0YTM5YTI1Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9nZW5lcmF0b3IvQ2hlY2twb2ludHMucmIKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCww
IEBACi0jIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0jIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSMg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0jIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1jbGFzcyBDaGVja3Bv
aW50Ci0gICAgYXR0cl9yZWFkZXIgOnVzZXMKLSAgICBhdHRyX3JlYWRlciA6ZGVmcwotICAgIGF0
dHJfcmVhZGVyIDpuYW1lCi0gICAgYXR0cl9yZWFkZXIgOmluZGV4Ci0KLSAgICBkZWYgaW5pdGlh
bGl6ZShuYW1lLCBpbmRleCwgdG1wcykKLSAgICAgICAgQG5hbWUgPSBuYW1lCi0gICAgICAgIEBp
bmRleCA9IGluZGV4Ci0gICAgICAgIEB1c2VzID0gdG1wcy5maWx0ZXIgeyB8KHRtcCwgdXNlRGVm
KXwgdXNlRGVmID09IDp1c2UgfQotICAgICAgICBAZGVmcyA9IHRtcHMuZmlsdGVyIHsgfCh0bXAs
IHVzZURlZil8IHVzZURlZiA9PSA6ZGVmaW5lIH0KLSAgICBlbmQKLQotICAgIGRlZiBsaXZlbmVz
cyhuYW1lc3BhY2UpCi0gICAgICAgIEVPRjwtLQotICAgIGNhc2UgI3tuYW1lc3BhY2V9Ojoje25h
bWV9OgotRU9GCi0gICAgZW5kCi1lbmQKLQotY2xhc3MgQ2hlY2twb2ludHMKLSAgICBkZWYgaW5p
dGlhbGl6ZShvcGNvZGUsIHRtcHMsIGNoZWNrcG9pbnRzKQotICAgICAgICBAb3Bjb2RlID0gb3Bj
b2RlCi0gICAgICAgIEB0bXBzID0gdG1wcwotICAgICAgICBAY2hlY2twb2ludHMgPSBjaGVja3Bv
aW50cy5tYXBfd2l0aF9pbmRleCB7IHwobmFtZSwgdG1wcyksIGluZGV4fCBDaGVja3BvaW50Lm5l
dyhuYW1lLCBpbmRleCwgdG1wcykgfQotICAgIGVuZAotCi0gICAgZGVmIGxpdmVuZXNzCi0gICAg
ICAgIEBjaGVja3BvaW50cy5lYWNoIGRvIHxjaGVja3BvaW50fAotCi0gICAgICAgIGVuZAotICAg
ICAgICBFT0Y8LS0KLUJpdE1hcDxtYXhOdW1UbXBzPiB0bXBMaXZlbmVzc0ZvciN7QG9wY29kZS5j
YXBpdGFsaXplZF9uYW1lfSh1aW50OF90IGNoZWNrcG9pbnQpCi17Ci0gICAgc3dpdGNoIChjaGVj
a3BvaW50KSB7Ci0KLSAgICB9Ci19Ci1FT0YKLSAgICBlbmQKLWVuZApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgppbmRleCA4MjM3NGI3ZmJlODZkNTc4OGIzYTQwNTgx
NThhODk4ZDZhNmEyMDhjLi42ODRiMzAwZTlkOTgxNDE0MTYxNTczYzA2NmE5YjEyZDY3MTcwZmMy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgpAQCAtMzAsNyAr
MzAsNiBAQCBjbGFzcyBPcGNvZGUKICAgICBhdHRyX3JlYWRlciA6YXJncwogICAgIGF0dHJfcmVh
ZGVyIDptZXRhZGF0YQogICAgIGF0dHJfcmVhZGVyIDpleHRyYXMKLSAgICBhdHRyX3JlYWRlciA6
Y2hlY2twb2ludHMKIAogICAgIG1vZHVsZSBTaXplCiAgICAgICAgIE5hcnJvdyA9ICJPcGNvZGVT
aXplOjpOYXJyb3ciCkBAIC00NiwxNCArNDUsMTIgQEAgY2xhc3MgT3Bjb2RlCiAgICAgICAgIHRp
ZAogICAgIGVuZAogCi0gICAgZGVmIGluaXRpYWxpemUoc2VjdGlvbiwgbmFtZSwgZXh0cmFzLCBh
cmdzLCBtZXRhZGF0YSwgbWV0YWRhdGFfaW5pdGlhbGl6ZXJzLCB0bXBzLCBjaGVja3BvaW50cykK
KyAgICBkZWYgaW5pdGlhbGl6ZShzZWN0aW9uLCBuYW1lLCBleHRyYXMsIGFyZ3MsIG1ldGFkYXRh
LCBtZXRhZGF0YV9pbml0aWFsaXplcnMpCiAgICAgICAgIEBzZWN0aW9uID0gc2VjdGlvbgogICAg
ICAgICBAbmFtZSA9IG5hbWUKICAgICAgICAgQGV4dHJhcyA9IGV4dHJhcyB8fCB7fQogICAgICAg
ICBAbWV0YWRhdGEgPSBNZXRhZGF0YS5uZXcgbWV0YWRhdGEsIG1ldGFkYXRhX2luaXRpYWxpemVy
cwogICAgICAgICBAYXJncyA9IGFyZ3MubWFwLndpdGhfaW5kZXggeyB8KGFyZ19uYW1lLCB0eXBl
KSwgaW5kZXh8IEFyZ3VtZW50Lm5ldyBhcmdfbmFtZSwgdHlwZSwgaW5kZXggfSB1bmxlc3MgYXJn
cy5uaWw/Ci0gICAgICAgIEB0bXBzID0gdG1wcwotICAgICAgICBAY2hlY2twb2ludHMgPSBjaGVj
a3BvaW50cy5tYXAgeyB8KGNoZWNrcG9pbnQsIF8pfCBjaGVja3BvaW50IH0gdW5sZXNzIGNoZWNr
cG9pbnRzLm5pbD8KICAgICBlbmQKIAogICAgIGRlZiBjcmVhdGVfaWQhCkBAIC0xMzAsOCArMTI3
LDYgQEAgY2xhc3MgT3Bjb2RlCiAgICAgICAgIDw8LUVPRgogc3RydWN0ICN7Y2FwaXRhbGl6ZWRf
bmFtZX0gOiBwdWJsaWMgSW5zdHJ1Y3Rpb24gewogICAgICN7b3Bjb2RlSUR9Ci0gICAgI3t0ZW1w
c30KLSAgICAje2NoZWNrcG9pbnRWYWx1ZXN9CiAKICN7ZW1pdHRlcn0KICN7ZHVtcGVyfQpAQCAt
MTQ2LDE4ICsxNDEsNiBAQCBFT0YKICAgICAgICAgInN0YXRpYyBjb25zdGV4cHIgI3tvcGNvZGVJ
RFR5cGV9IG9wY29kZUlEID0gI3tuYW1lfTsiCiAgICAgZW5kCiAKLSAgICBkZWYgY2hlY2twb2lu
dFZhbHVlcwotICAgICAgICByZXR1cm4gaWYgQGNoZWNrcG9pbnRzLm5pbD8KLQotICAgICAgICBb
ImVudW0gQ2hlY2twb2ludHMgOiB1aW50OF90IHsiXS5jb25jYXQoY2hlY2twb2ludHMubWFweyB8
Y2hlY2twb2ludHwgIiAgICAgICAgI3tjaGVja3BvaW50fSwiIH0pLmNvbmNhdChbIiAgICAgICAg
bnVtYmVyT2ZDaGVja3BvaW50cywiLCAiICAgIH07Il0pLmpvaW4oIlxuIikKLSAgICBlbmQKLQot
ICAgIGRlZiB0ZW1wcwotICAgICAgICByZXR1cm4gaWYgQHRtcHMubmlsPwotCi0gICAgICAgIFsi
ZW51bSBUbXBzIDogdWludDhfdCB7Il0uY29uY2F0KEB0bXBzLm1hcCB7fCh0bXAsIHR5cGUpfCAi
ICAgICAgICAje3RtcH0sIn0pLnB1c2goIiAgICB9OyIpLmpvaW4oIlxuIikKLSAgICBlbmQKLQog
ICAgIGRlZiBlbWl0dGVyCiAgICAgICAgIG9wX3dpZGUxNiA9IEFyZ3VtZW50Lm5ldyh3aWRlMTYs
IG9wY29kZUlEVHlwZSwgMCkKICAgICAgICAgb3Bfd2lkZTMyID0gQXJndW1lbnQubmV3KHdpZGUz
Miwgb3Bjb2RlSURUeXBlLCAwKQpAQCAtMjI2LDcgKzIwOSw2IEBAIHByaXZhdGU6CiAgICAgdGVt
cGxhdGU8T3Bjb2RlU2l6ZSBfX3NpemUsIGJvb2wgcmVjb3JkT3Bjb2RlLCB0eXBlbmFtZSBCeXRl
Y29kZUdlbmVyYXRvcj4KICAgICBzdGF0aWMgYm9vbCBlbWl0SW1wbChCeXRlY29kZUdlbmVyYXRv
ciogZ2VuI3t0eXBlZF9hcmdzfSN7bWV0YWRhdGFfcGFyYW19KQogICAgIHsKLSAgICAgICAgI3sh
QGNoZWNrcG9pbnRzLm5pbD8gPyAiZ2VuLT5zZXRVc2VzQ2hlY2twb2ludHMoKTsiIDogIiJ9CiAg
ICAgICAgIGlmIChfX3NpemUgPT0gT3Bjb2RlU2l6ZTo6V2lkZTE2KQogICAgICAgICAgICAgZ2Vu
LT5hbGlnbldpZGVPcGNvZGUxNigpOwogICAgICAgICBlbHNlIGlmIChfX3NpemUgPT0gT3Bjb2Rl
U2l6ZTo6V2lkZTMyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRv
ci9TZWN0aW9uLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9TZWN0aW9uLnJi
CmluZGV4IDY2ODU1YmE2NTAwODBlNGMyM2NjMGViZWMxMGU3OTQ5Y2RlNzY4YjkuLjIwNGFjNzU5
ZTEzZWZmMTUxZjhjZDE3N2YzYmYxYjcwZTA3NzljYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9nZW5lcmF0b3IvU2VjdGlvbi5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL1NlY3Rpb24ucmIKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgU2VjdGlvbgog
ICBlbmQKIAogICBkZWYgY3JlYXRlX29wY29kZShuYW1lLCBjb25maWcpCi0gICAgICBPcGNvZGUu
bmV3KHNlbGYsIG5hbWUsIGNvbmZpZ1s6ZXh0cmFzXSwgY29uZmlnWzphcmdzXSwgY29uZmlnWzpt
ZXRhZGF0YV0sIGNvbmZpZ1s6bWV0YWRhdGFfaW5pdGlhbGl6ZXJzXSwgY29uZmlnWzp0bXBzXSwg
Y29uZmlnWzpjaGVja3BvaW50c10pCisgICAgICBPcGNvZGUubmV3KHNlbGYsIG5hbWUsIGNvbmZp
Z1s6ZXh0cmFzXSwgY29uZmlnWzphcmdzXSwgY29uZmlnWzptZXRhZGF0YV0sIGNvbmZpZ1s6bWV0
YWRhdGFfaW5pdGlhbGl6ZXJzXSkKICAgZW5kCiAKICAgZGVmIGFkZF9vcGNvZGVfZ3JvdXAobmFt
ZSwgb3Bjb2RlcywgY29uZmlnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAppbmRleCA0
Mzk2MzA1MDdkNjQzMDcwY2E3NGFhMDU5MTdiMzEzYzczOGQ5M2ZhLi42NzU0MGQ5MDdmZGZkN2U1
ZjlhNGI2YzE5MDcxOTFkNjhmY2I2MTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cApAQCAtNzIxLDcgKzcyMSw2IEBAIHZvaWQgSGVhcDo6Z2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3Rz
KENvbnNlcnZhdGl2ZVJvb3RzJiByb290cykKICAgICBpZiAoIVZNOjpjYW5Vc2VKSVQoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIG1fdm0uZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKHJvb3RzKTsK
LSAgICBtX3ZtLnNjYW5TaWRlU3RhdGUocm9vdHMpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
cm9vdHMpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuY3BwCmluZGV4IGI3ZWYyNTk4NDM2M2QzYmI5YmY1MGRkMGFkMTM2ZWZlMjUwOTlm
YTguLjFhNGRlM2Y5MzYyOTBlNjJmNjM4OWVmNWZmYTA3Zjg5NzM2Y2U1NTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCkBAIC05MCwyMiAr
OTAsMjIgQEAgYm9vbCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FyZUNvZGVPcmlnaW5JbmRleCgp
IGNvbnN0CiAKIHVuc2lnbmVkIENhbGxGcmFtZTo6Y2FsbFNpdGVBc1Jhd0JpdHMoKSBjb25zdAog
ewotICAgIHJldHVybiB0aGlzW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMpXS50YWcoKTsKKyAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc10udGFnKCk7CiB9CiAKIFNVUFBSRVNTX0FT
QU4gdW5zaWduZWQgQ2FsbEZyYW1lOjp1bnNhZmVDYWxsU2l0ZUFzUmF3Qml0cygpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyldLnVuc2FmZVRhZygpOworICAgIHJldHVybiB0aGlzW0NhbGxG
cmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzXS51bnNhZmVUYWcoKTsKIH0KIAog
Q2FsbFNpdGVJbmRleCBDYWxsRnJhbWU6OmNhbGxTaXRlSW5kZXgoKSBjb25zdAogewotICAgIHJl
dHVybiBDYWxsU2l0ZUluZGV4Ojpmcm9tQml0cyhjYWxsU2l0ZUFzUmF3Qml0cygpKTsKKyAgICBy
ZXR1cm4gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KGNhbGxTaXRlQXNSYXdCaXRzKCkpKTsK
IH0KIAogU1VQUFJFU1NfQVNBTiBDYWxsU2l0ZUluZGV4IENhbGxGcmFtZTo6dW5zYWZlQ2FsbFNp
dGVJbmRleCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENhbGxTaXRlSW5kZXg6OmZyb21CaXRzKHVu
c2FmZUNhbGxTaXRlQXNSYXdCaXRzKCkpOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KEJ5dGVj
b2RlSW5kZXgodW5zYWZlQ2FsbFNpdGVBc1Jhd0JpdHMoKSkpOwogfQogCiAjaWYgVVNFKEpTVkFM
VUUzMl82NCkKQEAgLTExNiw4ICsxMTYsOCBAQCBjb25zdCBJbnN0cnVjdGlvbiogQ2FsbEZyYW1l
OjpjdXJyZW50VlBDKCkgY29uc3QKIAogdm9pZCBDYWxsRnJhbWU6OnNldEN1cnJlbnRWUEMoY29u
c3QgSW5zdHJ1Y3Rpb24qIHZwYykKIHsKLSAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlKCp2cGMp
OwotICAgIHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcyldLnRhZygpID0gY2FsbFNpdGUuYml0cygpOworICAgIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGUoQnl0ZWNvZGVJbmRleChiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KHZwYykpKTsK
KyAgICB0aGlzW0NhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzXS50YWco
KSA9IGNhbGxTaXRlLmJpdHMoKTsKIH0KIAogdW5zaWduZWQgQ2FsbEZyYW1lOjpjYWxsU2l0ZUJp
dHNBc0J5dGVjb2RlT2Zmc2V0KCkgY29uc3QKQEAgLTEzNyw4ICsxMzcsNyBAQCBjb25zdCBJbnN0
cnVjdGlvbiogQ2FsbEZyYW1lOjpjdXJyZW50VlBDKCkgY29uc3QKIHZvaWQgQ2FsbEZyYW1lOjpz
ZXRDdXJyZW50VlBDKGNvbnN0IEluc3RydWN0aW9uKiB2cGMpCiB7CiAgICAgQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZShjb2RlQmxvY2soKS0+Ynl0ZWNvZGVJbmRleCh2cGMpKTsKLSAgICB0aGlzW3N0
YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMp
XS50YWcoKSA9IGNhbGxTaXRlLmJpdHMoKTsKLSAgICBBU1NFUlQoY3VycmVudFZQQygpID09IHZw
Yyk7CisgICAgdGhpc1tDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpc10u
dGFnKCkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihjYWxsU2l0ZS5iaXRzKCkpOwogfQogCiB1bnNp
Z25lZCBDYWxsRnJhbWU6OmNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSBjb25zdApAQCAt
MTY3LDcgKzE2Niw3IEBAIEJ5dGVjb2RlSW5kZXggQ2FsbEZyYW1lOjpieXRlY29kZUluZGV4KCkK
ICAgICB9CiAjZW5kaWYKICAgICBBU1NFUlQoY2FsbFNpdGVCaXRzQXJlQnl0ZWNvZGVPZmZzZXQo
KSk7Ci0gICAgcmV0dXJuIGNhbGxTaXRlSW5kZXgoKS5ieXRlY29kZUluZGV4KCk7CisgICAgcmV0
dXJuIEJ5dGVjb2RlSW5kZXgoY2FsbFNpdGVCaXRzQXNCeXRlY29kZU9mZnNldCgpKTsKIH0KIAog
Q29kZU9yaWdpbiBDYWxsRnJhbWU6OmNvZGVPcmlnaW4oKQpAQCAtMTgxLDcgKzE4MCw3IEBAIENv
ZGVPcmlnaW4gQ2FsbEZyYW1lOjpjb2RlT3JpZ2luKCkKICAgICAgICAgcmV0dXJuIGNvZGVCbG9j
aygpLT5jb2RlT3JpZ2luKGluZGV4KTsKICAgICB9CiAjZW5kaWYKLSAgICByZXR1cm4gQ29kZU9y
aWdpbihjYWxsU2l0ZUluZGV4KCkuYnl0ZWNvZGVJbmRleCgpKTsKKyAgICByZXR1cm4gQ29kZU9y
aWdpbihCeXRlY29kZUluZGV4KGNhbGxTaXRlQml0c0FzQnl0ZWNvZGVPZmZzZXQoKSkpOwogfQog
CiBSZWdpc3RlciogQ2FsbEZyYW1lOjp0b3BPZkZyYW1lSW50ZXJuYWwoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCmluZGV4IDJmZGEyNDZiOWEwYWM0
NmIwOTEwZjI5ZDE2ZWMxMWExZGRjNzA1ODEuLjhhYmRkYjgxMDZiNDFiMWFlMDNkNzU3NmE4MDFk
N2JmOTFmMjE2YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2Fs
bEZyYW1lLmgKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJTdGFja1Zpc2l0b3IuaCIKICNp
bmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIlZNRW50cnlSZWNvcmQuaCIKLSNpbmNsdWRlIDx3dGYv
RW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaD4KIAogbmFtZXNwYWNlIEpTQyAgewogCkBAIC00
NiwzMSArNDUsMTkgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgIHB1YmxpYzoKICAgICAgICAgQ2Fs
bFNpdGVJbmRleCgpID0gZGVmYXVsdDsKICAgICAgICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICAgICAgZXhwbGljaXQgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgp
Ci0gICAgICAgICAgICA6IG1fYml0cyhieXRlY29kZUluZGV4Lm9mZnNldCgpKQotICAgICAgICB7
IAotICAgICAgICAgICAgQVNTRVJUKCFieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSk7Ci0gICAg
ICAgIH0KLSNlbHNlCi0gICAgICAgIGV4cGxpY2l0IENhbGxTaXRlSW5kZXgoY29uc3QgSW5zdHJ1
Y3Rpb24mIGluc3RydWN0aW9uKQotICAgICAgICAgICAgOiBtX2JpdHMocmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdD4oJmluc3RydWN0aW9uKSkKLSAgICAgICAgeyB9Ci0jZW5kaWYKLSAgICAgICAg
ZXhwbGljaXQgQ2FsbFNpdGVJbmRleCh1aW50MzJfdCBiaXRzKQotICAgICAgICAgICAgOiBtX2Jp
dHMoYml0cykKKyAgICAgICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCiAg
ICAgICAgIHsgfQogCi0gICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJl
dHVybiAhIW1fYml0czsgfQotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsbFNpdGVJ
bmRleCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fYml0cyA9PSBvdGhlci5tX2JpdHM7IH0KKyAg
ICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9ieXRlY29k
ZUluZGV4OyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxsU2l0ZUluZGV4JiBv
dGhlcikgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4ID09IG90aGVyLm1fYnl0ZWNvZGVJ
bmRleDsgfQogCi0gICAgICAgIHVpbnQzMl90IGJpdHMoKSBjb25zdCB7IHJldHVybiBtX2JpdHM7
IH0KLSAgICAgICAgc3RhdGljIENhbGxTaXRlSW5kZXggZnJvbUJpdHModWludDMyX3QgYml0cykg
eyByZXR1cm4gQ2FsbFNpdGVJbmRleChiaXRzKTsgfQorICAgICAgICB1aW50MzJfdCBiaXRzKCkg
Y29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4LmFzQml0cygpOyB9CiAKLSAgICAgICAgQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KCkgY29uc3QgeyByZXR1cm4gQnl0ZWNvZGVJbmRleChi
aXRzKCkpOyB9CisgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbmRleCgpIGNvbnN0IHsg
cmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdWludDMy
X3QgbV9iaXRzIHsgQnl0ZWNvZGVJbmRleCgpLm9mZnNldCgpIH07CisgICAgICAgIEJ5dGVjb2Rl
SW5kZXggbV9ieXRlY29kZUluZGV4OwogICAgIH07CiAKICAgICBjbGFzcyBEaXNwb3NhYmxlQ2Fs
bFNpdGVJbmRleCA6IHB1YmxpYyBDYWxsU2l0ZUluZGV4IHsKQEAgLTc4LDcgKzY1LDcgQEAgbmFt
ZXNwYWNlIEpTQyAgewogICAgICAgICBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCgpID0gZGVmYXVs
dDsKIAogICAgICAgICBleHBsaWNpdCBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCh1aW50MzJfdCBi
aXRzKQotICAgICAgICAgICAgOiBDYWxsU2l0ZUluZGV4KGJpdHMpCisgICAgICAgICAgICA6IENh
bGxTaXRlSW5kZXgoQnl0ZWNvZGVJbmRleDo6ZnJvbUJpdHMoYml0cykpCiAgICAgICAgIHsKICAg
ICAgICAgfQogCkBAIC05MSwyNyArNzgsMjQgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgIC8vIGFy
bTY0XzMyIGV4cGVjdHMgY2FsbGVyIGZyYW1lIGFuZCByZXR1cm4gcGMgdG8gdXNlIDggYnl0ZXMg
CiAgICAgc3RydWN0IENhbGxlckZyYW1lQW5kUEMgewogICAgICAgICBhbGlnbmFzKENQVVJlZ2lz
dGVyKSBDYWxsRnJhbWUqIGNhbGxlckZyYW1lOwotICAgICAgICBhbGlnbmFzKENQVVJlZ2lzdGVy
KSB2b2lkKiByZXR1cm5QQzsKKyAgICAgICAgYWxpZ25hcyhDUFVSZWdpc3RlcikgY29uc3QgSW5z
dHJ1Y3Rpb24qIHJldHVyblBDOwogICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBzaXplSW5S
ZWdpc3RlcnMgPSAyICogc2l6ZW9mKENQVVJlZ2lzdGVyKSAvIHNpemVvZihSZWdpc3Rlcik7CiAg
ICAgfTsKICAgICBzdGF0aWNfYXNzZXJ0KENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJlZ2lzdGVy
cyA9PSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpLCAiQ2FsbGVy
RnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzIGlzIGluY29ycmVjdC4iKTsKIAotICAgIGVudW0g
Y2xhc3MgQ2FsbEZyYW1lU2xvdCA6IGludCB7Ci0gICAgICAgIGNvZGVCbG9jayA9IENhbGxlckZy
YW1lQW5kUEM6OnNpemVJblJlZ2lzdGVycywKLSAgICAgICAgY2FsbGVlID0gY29kZUJsb2NrICsg
MSwKLSAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjYWxsZWUgKyAxLAotICAg
ICAgICB0aGlzQXJndW1lbnQgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIDEsCi0gICAg
ICAgIGZpcnN0QXJndW1lbnQgPSB0aGlzQXJndW1lbnQgKyAxLAorICAgIHN0cnVjdCBDYWxsRnJh
bWVTbG90IHsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgY29kZUJsb2NrID0gQ2FsbGVy
RnJhbWVBbmRQQzo6c2l6ZUluUmVnaXN0ZXJzOworICAgICAgICBzdGF0aWMgY29uc3RleHByIGlu
dCBjYWxsZWUgPSBjb2RlQmxvY2sgKyAxOworICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGNhbGxlZSArIDE7CisgICAgICAgIHN0YXRpYyBj
b25zdGV4cHIgaW50IHRoaXNBcmd1bWVudCA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsg
MTsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgZmlyc3RBcmd1bWVudCA9IHRoaXNBcmd1
bWVudCArIDE7CiAgICAgfTsKIAotICAgIE9WRVJMT0FEX01BVEhfT1BFUkFUT1JTX0ZPUl9FTlVN
X0NMQVNTX1dJVEhfSU5URUdSQUxTKENhbGxGcmFtZVNsb3QpCi0gICAgT1ZFUkxPQURfUkVMQVRJ
T05BTF9PUEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0lUSF9JTlRFR1JBTFMoQ2FsbEZyYW1lU2xv
dCkKLQogICAgIC8vIFJlcHJlc2VudHMgdGhlIGN1cnJlbnQgc3RhdGUgb2Ygc2NyaXB0IGV4ZWN1
dGlvbi4KICAgICAvLyBQYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIG1vc3QgZnVuY3Rp
b25zLgogICAgIGNsYXNzIENhbGxGcmFtZSA6IHByaXZhdGUgUmVnaXN0ZXIgewogICAgIHB1Ymxp
YzoKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBpbnQgaGVhZGVyU2l6ZUluUmVnaXN0ZXJzID0g
c3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cykgKyAxOworICAgICAgICBzdGF0aWMgY29uc3RleHByIGludCBoZWFkZXJTaXplSW5SZWdpc3Rl
cnMgPSBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIDE7CiAKICAg
ICAgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgaW4gdmVyeSBzcGVj
aWZpYyBjaXJjdW1zdGFuY2VzCiAgICAgICAgIC8vIHdoZW4geW91J3ZlIGd1YXJhbnRlZWQgdGhl
IGNhbGxlZSBjYW4ndCBiZSBhIFdhc20gY2FsbGVlLCBhbmQgY2FuCkBAIC0xMjIsMTAgKzEwNiwx
MCBAQCBuYW1lc3BhY2UgSlNDICB7CiAgICAgICAgIC8vIHRvIHNlZSBpZiBpdCdzIGEgY2VsbCwg
YW5kIGlmIGl0J3Mgbm90LCB3ZSB0aHJvdyBhbiBleGNlcHRpb24uCiAgICAgICAgIGlubGluZSBK
U1ZhbHVlIGd1YXJhbnRlZWRKU1ZhbHVlQ2FsbGVlKCkgY29uc3Q7CiAgICAgICAgIGlubGluZSBK
U09iamVjdCoganNDYWxsZWUoKSBjb25zdDsKLSAgICAgICAgQ2FsbGVlQml0cyBjYWxsZWUoKSBj
b25zdCB7IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbc3RhdGljX2Nhc3Q8aW50PihDYWxsRnJhbWVT
bG90OjpjYWxsZWUpXS5wb2ludGVyKCkpOyB9Ci0gICAgICAgIFNVUFBSRVNTX0FTQU4gQ2FsbGVl
Qml0cyB1bnNhZmVDYWxsZWUoKSBjb25zdCB7IHJldHVybiBDYWxsZWVCaXRzKHRoaXNbc3RhdGlj
X2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90OjpjYWxsZWUpXS5hc2FuVW5zYWZlUG9pbnRlcigpKTsg
fQorICAgICAgICBDYWxsZWVCaXRzIGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIENhbGxlZUJpdHMo
dGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLnBvaW50ZXIoKSk7IH0KKyAgICAgICAgU1VQUFJF
U1NfQVNBTiBDYWxsZWVCaXRzIHVuc2FmZUNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIENhbGxlZUJp
dHModGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLmFzYW5VbnNhZmVQb2ludGVyKCkpOyB9CiAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3Q7Ci0gICAgICAgIENvZGVCbG9jayoq
IGFkZHJlc3NPZkNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxDb2RlQmxv
Y2sqKj4odGhpcyArIHN0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7
IH0KKyAgICAgICAgQ29kZUJsb2NrKiogYWRkcmVzc09mQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1
cm4gYml0d2lzZV9jYXN0PENvZGVCbG9jayoqPih0aGlzICsgQ2FsbEZyYW1lU2xvdDo6Y29kZUJs
b2NrKTsgfQogICAgICAgICBpbmxpbmUgU1VQUFJFU1NfQVNBTiBDb2RlQmxvY2sqIHVuc2FmZUNv
ZGVCbG9jaygpIGNvbnN0OwogICAgICAgICBpbmxpbmUgSlNTY29wZSogc2NvcGUoaW50IHNjb3Bl
UmVnaXN0ZXJPZmZzZXQpIGNvbnN0OwogCkBAIC0xOTgsMTMgKzE4MiwxNSBAQCBuYW1lc3BhY2Ug
SlNDICB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGluaXREZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVi
dWdnZXIoQ2FsbEZyYW1lKiBnbG9iYWxFeGVjLCBKU0NhbGxlZSogZ2xvYmFsQ2FsbGVlKTsKIAog
ICAgICAgICAvLyBSZWFkIGEgcmVnaXN0ZXIgZnJvbSB0aGUgY29kZWZyYW1lIChvciBjb25zdGFu
dCBmcm9tIHRoZSBDb2RlQmxvY2spLgorICAgICAgICBSZWdpc3RlciYgcihpbnQpOwogICAgICAg
ICBSZWdpc3RlciYgcihWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICAvLyBSZWFkIGEgcmVnaXN0
ZXIgZm9yIGEga25vd24gbm9uLWNvbnN0YW50CisgICAgICAgIC8vIFJlYWQgYSByZWdpc3RlciBm
b3IgYSBub24tY29uc3RhbnQKKyAgICAgICAgUmVnaXN0ZXImIHVuY2hlY2tlZFIoaW50KTsKICAg
ICAgICAgUmVnaXN0ZXImIHVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKTsKIAogICAgICAgICAv
LyBBY2Nlc3MgdG8gYXJndW1lbnRzIGFzIHBhc3NlZC4gKEFmdGVyIGNhcHR1cmUsIGFyZ3VtZW50
cyBtYXkgbW92ZSB0byBhIGRpZmZlcmVudCBsb2NhdGlvbi4pCiAgICAgICAgIHNpemVfdCBhcmd1
bWVudENvdW50KCkgY29uc3QgeyByZXR1cm4gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSAt
IDE7IH0KLSAgICAgICAgc2l6ZV90IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgY29uc3Qg
eyByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKV0ucGF5bG9hZCgpOyB9CisgICAgICAgIHNpemVfdCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcygpIGNvbnN0IHsgcmV0dXJuIHRoaXNbQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXNdLnBheWxvYWQoKTsgfQogICAgICAgICBzdGF0aWMgaW50
IGFyZ3VtZW50T2Zmc2V0KGludCBhcmd1bWVudCkgeyByZXR1cm4gKENhbGxGcmFtZVNsb3Q6OmZp
cnN0QXJndW1lbnQgKyBhcmd1bWVudCk7IH0KICAgICAgICAgc3RhdGljIGludCBhcmd1bWVudE9m
ZnNldEluY2x1ZGluZ1RoaXMoaW50IGFyZ3VtZW50KSB7IHJldHVybiAoQ2FsbEZyYW1lU2xvdDo6
dGhpc0FyZ3VtZW50ICsgYXJndW1lbnQpOyB9CiAKQEAgLTI1Myw3ICsyMzksNyBAQCBuYW1lc3Bh
Y2UgSlNDICB7CiAKICAgICAgICAgSlNWYWx1ZSBhcmd1bWVudEFmdGVyQ2FwdHVyZShzaXplX3Qg
YXJndW1lbnQpOwogCi0gICAgICAgIHN0YXRpYyBpbnQgb2Zmc2V0Rm9yKHNpemVfdCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcykgeyByZXR1cm4gQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50
ICsgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxOyB9CisgICAgICAgIHN0YXRpYyBpbnQg
b2Zmc2V0Rm9yKHNpemVfdCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykgeyByZXR1cm4gYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgLSAx
OyB9CiAKICAgICAgICAgc3RhdGljIENhbGxGcmFtZSogbm9DYWxsZXIoKSB7IHJldHVybiBudWxs
cHRyOyB9CiAgICAgICAgIGJvb2wgaXNEZXByZWNhdGVkQ2FsbEZyYW1lRm9yRGVidWdnZXIoKSBj
b25zdApAQCAtMjY1LDEwICsyNTEsMTAgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgICAgICBib29s
IGlzU3RhY2tPdmVyZmxvd0ZyYW1lKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNXYXNtRnJhbWUo
KSBjb25zdDsKIAotICAgICAgICB2b2lkIHNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGlu
dCBjb3VudCkgeyBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW3N0YXRpY19jYXN0PGludD4o
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpXS5wYXlsb2FkKCkgPSBj
b3VudDsgfQorICAgICAgICB2b2lkIHNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGludCBj
b3VudCkgeyBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW0NhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzXS5wYXlsb2FkKCkgPSBjb3VudDsgfQogICAgICAgICBpbmxp
bmUgdm9pZCBzZXRDYWxsZWUoSlNPYmplY3QqKTsKICAgICAgICAgaW5saW5lIHZvaWQgc2V0Q29k
ZUJsb2NrKENvZGVCbG9jayopOwotICAgICAgICB2b2lkIHNldFJldHVyblBDKHZvaWQqIHZhbHVl
KSB7IGNhbGxlckZyYW1lQW5kUEMoKS5yZXR1cm5QQyA9IHZhbHVlOyB9CisgICAgICAgIHZvaWQg
c2V0UmV0dXJuUEModm9pZCogdmFsdWUpIHsgY2FsbGVyRnJhbWVBbmRQQygpLnJldHVyblBDID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBJbnN0cnVjdGlvbio+KHZhbHVlKTsgfQogCiAgICAgICAg
IFN0cmluZyBmcmllbmRseUZ1bmN0aW9uTmFtZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZUlubGluZXMuaAppbmRleCBlZTdlYzJhYjEw
NGE3YTM0ZDk4YjBmNDM4ZjY0NGMyZGNhMWM1MTY4Li5hOTdkZWNhNTNiY2UxNzkyODliMGMzODBk
MDRlOGYyYTg2MDQ3N2QxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWVJbmxpbmVzLmgKQEAgLTMyLDM5ICszMiw1MCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAoraW5saW5lIFJlZ2lzdGVyJiBDYWxsRnJhbWU6OnIoaW50IGluZGV4KQorewor
ICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCk7CisgICAgaWYgKGNv
ZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5kZXgpKQorICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPigmY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVy
KGluZGV4KSk7CisgICAgcmV0dXJuIHRoaXNbaW5kZXhdOworfQorCiBpbmxpbmUgUmVnaXN0ZXIm
IENhbGxGcmFtZTo6cihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIGlmIChyZWcuaXNDb25z
dGFudCgpKQotICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVnaXN0ZXIqPigmdGhp
cy0+Y29kZUJsb2NrKCktPmNvbnN0YW50UmVnaXN0ZXIocmVnKSk7Ci0gICAgcmV0dXJuIHRoaXNb
cmVnLm9mZnNldCgpXTsKKyAgICByZXR1cm4gcihyZWcub2Zmc2V0KCkpOworfQorCitpbmxpbmUg
UmVnaXN0ZXImIENhbGxGcmFtZTo6dW5jaGVja2VkUihpbnQgaW5kZXgpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQoaW5kZXggPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgcmV0dXJu
IHRoaXNbaW5kZXhdOwogfQogCiBpbmxpbmUgUmVnaXN0ZXImIENhbGxGcmFtZTo6dW5jaGVja2Vk
UihWaXJ0dWFsUmVnaXN0ZXIgcmVnKQogewotICAgIEFTU0VSVCghcmVnLmlzQ29uc3RhbnQoKSk7
Ci0gICAgcmV0dXJuIHRoaXNbcmVnLm9mZnNldCgpXTsKKyAgICByZXR1cm4gdW5jaGVja2VkUihy
ZWcub2Zmc2V0KCkpOwogfQogCiBpbmxpbmUgSlNWYWx1ZSBDYWxsRnJhbWU6Omd1YXJhbnRlZWRK
U1ZhbHVlQ2FsbGVlKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWNhbGxlZSgpLmlzV2FzbSgpKTsK
LSAgICByZXR1cm4gdGhpc1tzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSld
LmpzVmFsdWUoKTsKKyAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90OjpjYWxsZWVdLmpzVmFs
dWUoKTsKIH0KIAogaW5saW5lIEpTT2JqZWN0KiBDYWxsRnJhbWU6OmpzQ2FsbGVlKCkgY29uc3QK
IHsKICAgICBBU1NFUlQoIWNhbGxlZSgpLmlzV2FzbSgpKTsKLSAgICByZXR1cm4gdGhpc1tzdGF0
aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSldLm9iamVjdCgpOworICAgIHJldHVy
biB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNhbGxlZV0ub2JqZWN0KCk7CiB9CiAKIGlubGluZSBDb2Rl
QmxvY2sqIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdGhpc1tz
dGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jayldLlJlZ2lzdGVyOjpjb2Rl
QmxvY2soKTsKKyAgICByZXR1cm4gdGhpc1tDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2tdLlJlZ2lz
dGVyOjpjb2RlQmxvY2soKTsKIH0KIAogaW5saW5lIFNVUFBSRVNTX0FTQU4gQ29kZUJsb2NrKiBD
YWxsRnJhbWU6OnVuc2FmZUNvZGVCbG9jaygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRoaXNbc3Rh
dGljX2Nhc3Q8aW50PihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spXS5SZWdpc3Rlcjo6YXNhblVu
c2FmZUNvZGVCbG9jaygpOworICAgIHJldHVybiB0aGlzW0NhbGxGcmFtZVNsb3Q6OmNvZGVCbG9j
a10uUmVnaXN0ZXI6OmFzYW5VbnNhZmVDb2RlQmxvY2soKTsKIH0KIAogaW5saW5lIEpTR2xvYmFs
T2JqZWN0KiBDYWxsRnJhbWU6OmxleGljYWxHbG9iYWxPYmplY3QoVk0mIHZtKSBjb25zdApAQCAt
OTEsMTIgKzEwMiwxMiBAQCBpbmxpbmUgYm9vbCBDYWxsRnJhbWU6OmlzV2FzbUZyYW1lKCkgY29u
c3QKIAogaW5saW5lIHZvaWQgQ2FsbEZyYW1lOjpzZXRDYWxsZWUoSlNPYmplY3QqIGNhbGxlZSkK
IHsKLSAgICBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW3N0YXRpY19jYXN0PGludD4oQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlKV0gPSBjYWxsZWU7CisgICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIq
Pih0aGlzKVtDYWxsRnJhbWVTbG90OjpjYWxsZWVdID0gY2FsbGVlOwogfQogCiBpbmxpbmUgdm9p
ZCBDYWxsRnJhbWU6OnNldENvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBz
dGF0aWNfY2FzdDxSZWdpc3Rlcio+KHRoaXMpW3N0YXRpY19jYXN0PGludD4oQ2FsbEZyYW1lU2xv
dDo6Y29kZUJsb2NrKV0gPSBjb2RlQmxvY2s7CisgICAgc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPih0
aGlzKVtDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2tdID0gY29kZUJsb2NrOwogfQogCiBpbmxpbmUg
dm9pZCBDYWxsRnJhbWU6OnNldFNjb3BlKGludCBzY29wZVJlZ2lzdGVyT2Zmc2V0LCBKU1Njb3Bl
KiBzY29wZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
aGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDg5Mzg5ZDg4OTEzYTJkMGE1NmE3YmMxMmQ0ZDFjMGM0ZDgwZGQxZmEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0NoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQnl0ZWNvZGVJbmRleC5oIgot
I2luY2x1ZGUgIk9wZXJhbmRzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1zdHJ1Y3QgQ2hlY2tw
b2ludE9TUkV4aXRTaWRlU3RhdGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVi
bGljOgotCi0gICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4OwotICAgIEpTVmFsdWUgdG1w
c1ttYXhOdW1DaGVja3BvaW50VG1wc10geyB9OwotfTsKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKaW5kZXggYzFjODdmODYyNWRh
MDM4NTBjMGU0NTYxNWNjZDg5MWMxNGM3OTJlMy4uOWQzZDQ1ZWM5OTc1MDk3NTBmZTdkYWQ1NjEy
Yjk4MTAyMmU0NGY3ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVz
LmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lQ2xvc3VyZS5oIgogI2luY2x1ZGUgIkNhdGNoU2NvcGUu
aCIKLSNpbmNsdWRlICJDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZS5oIgogI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkRpcmVjdEFyZ3Vt
ZW50cy5oIgpAQCAtMTI0LDcgKzEyMyw3IEBAIEpTVmFsdWUgZXZhbChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBDYWxsRnJhbWUqIGNhbGxl
ckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOwogICAgIENhbGxTaXRlSW5kZXggY2Fs
bGVyQ2FsbFNpdGVJbmRleCA9IGNhbGxlckZyYW1lLT5jYWxsU2l0ZUluZGV4KCk7CiAgICAgQ29k
ZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7Ci0gICAg
SlNTY29wZSogY2FsbGVyU2NvcGVDaGFpbiA9IGNhbGxlckZyYW1lLT51bmNoZWNrZWRSKGNhbGxl
ckNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKKyAgICBKU1Nj
b3BlKiBjYWxsZXJTY29wZUNoYWluID0gY2FsbGVyRnJhbWUtPnVuY2hlY2tlZFIoY2FsbGVyQ29k
ZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkub2Zmc2V0KCkpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAg
IFVubGlua2VkQ29kZUJsb2NrKiBjYWxsZXJVbmxpbmtlZENvZGVCbG9jayA9IGNhbGxlckNvZGVC
bG9jay0+dW5saW5rZWRDb2RlQmxvY2soKTsKIAogICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29u
dGV4dCA9IGNhbGxlclVubGlua2VkQ29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb24oKSB8fCBjYWxs
ZXJVbmxpbmtlZENvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uQ29udGV4dCgpOwpAQCAtMjE0LDkg
KzIxMyw2IEBAIHVuc2lnbmVkIHNpemVPZlZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90CiAgICAgfQogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIDApOwogICAgIAotICAgIGlmIChsZW5ndGggPiBtYXhBcmd1bWVudHMp
Ci0gICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwot
CiAgICAgaWYgKGxlbmd0aCA+PSBmaXJzdFZhckFyZ09mZnNldCkKICAgICAgICAgbGVuZ3RoIC09
IGZpcnN0VmFyQXJnT2Zmc2V0OwogICAgIGVsc2UKQEAgLTI1Myw3ICsyNDksNyBAQCB1bnNpZ25l
ZCBzaXplRnJhbWVGb3JWYXJhcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lLAogICAgIHJldHVybiBsZW5ndGg7CiB9CiAKLXZvaWQgbG9hZFZhcmFy
Z3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVz
dCwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoKQor
dm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIEpTVmFsdWUgYXJn
dW1lbnRzLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCkKIHsKICAgICBpZiAoVU5M
SUtFTFkoIWFyZ3VtZW50cy5pc0NlbGwoKSkgfHwgIWxlbmd0aCkKICAgICAgICAgcmV0dXJuOwpA
QCAtMjY1LDMxICsyNjEsMzEgQEAgdm9pZCBsb2FkVmFyYXJncyhKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHUKICAgICBzd2l0Y2gg
KGNlbGwtPnR5cGUoKSkgewogICAgIGNhc2UgRGlyZWN0QXJndW1lbnRzVHlwZToKICAgICAgICAg
c2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8RGlyZWN0QXJndW1lbnRzKj4oY2VsbCkt
PmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwg
bGVuZ3RoKTsKKyAgICAgICAganNDYXN0PERpcmVjdEFyZ3VtZW50cyo+KGNlbGwpLT5jb3B5VG9B
cmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNl
dCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2NvcGVkQXJndW1lbnRzVHlw
ZToKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICBqc0Nhc3Q8U2NvcGVkQXJndW1l
bnRzKj4oY2VsbCktPmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERl
c3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAganNDYXN0PFNjb3BlZEFyZ3VtZW50cyo+KGNl
bGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVu
dERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNJbW11
dGFibGVCdXR0ZXJmbHlUeXBlOgogICAgICAgICBzY29wZS5yZWxlYXNlKCk7Ci0gICAgICAgIGpz
Q2FzdDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFs
T2JqZWN0LCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAgIGpzQ2Fz
dDxKU0ltbXV0YWJsZUJ1dHRlcmZseSo+KGNlbGwpLT5jb3B5VG9Bcmd1bWVudHMoZ2xvYmFsT2Jq
ZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKICAgICAg
ICAgcmV0dXJuOyAKICAgICBkZWZhdWx0OiB7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudHMuaXNP
YmplY3QoKSk7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihj
ZWxsKTsKICAgICAgICAgaWYgKGlzSlNBcnJheShvYmplY3QpKSB7CiAgICAgICAgICAgICBzY29w
ZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBqc0Nhc3Q8SlNBcnJheSo+KG9iamVjdCktPmNvcHlU
b0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwgbGVuZ3Ro
KTsKKyAgICAgICAgICAgIGpzQ2FzdDxKU0FycmF5Kj4ob2JqZWN0KS0+Y29weVRvQXJndW1lbnRz
KGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBmaXJzdEVsZW1lbnREZXN0LCBvZmZzZXQsIGxlbmd0
aCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgdW5zaWduZWQgaTsK
ICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aCAmJiBvYmplY3QtPmNhbkdldEluZGV4UXVp
Y2tseShpICsgb2Zmc2V0KTsgKytpKQotICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9
IG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOworICAgICAgICAgICAgY2FsbEZy
YW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IG9iamVjdC0+Z2V0SW5kZXhRdWlja2x5KGkg
KyBvZmZzZXQpOwogICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBpICsgb2Zmc2V0KTsK
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7Ci0gICAgICAg
ICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gdmFsdWU7CisgICAgICAgICAgICBjYWxsRnJhbWUt
PnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0gdmFsdWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuOwogICAgIH0gfQpAQCAtMzAxLDcgKzI5Nyw4IEBAIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWUo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENhbGxG
CiAgICAgCiAgICAgbG9hZFZhcmFyZ3MoCiAgICAgICAgIGdsb2JhbE9iamVjdCwKLSAgICAgICAg
Yml0d2lzZV9jYXN0PEpTVmFsdWUqPigmY2FsbEZyYW1lLT5yKGNhbGxlZUZyYW1lT2Zmc2V0ICsg
Q2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKSkpLAorICAgICAgICBjYWxsRnJhbWUsCisgICAg
ICAgIGNhbGxlZUZyYW1lT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldCgwKSwKICAg
ICAgICAgYXJndW1lbnRzLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgCiAgICAgbmV3Q2FsbEZyYW1l
LT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhsZW5ndGggKyAxKTsKQEAgLTU0MSwxMyAr
NTM4LDggQEAgcHVibGljOgogICAgICAgICBtX2NvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9j
aygpOwogCiAgICAgICAgIG1faGFuZGxlciA9IG51bGxwdHI7Ci0gICAgICAgIGlmIChtX2NvZGVC
bG9jaykgewotICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IGV4Y2VwdGlv
biBoYW5kbGluZyBpbiBjaGVja3BvaW50cy4KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAg
ICAgIGlmIChyZW1vdmVDb2RlUHRyVGFnKG1fcmV0dXJuUEMpID09IExMSW50OjpnZXRDb2RlUHRy
PE5vUHRyVGFnPihjaGVja3BvaW50X29zcl9leGl0X2Zyb21faW5saW5lZF9jYWxsX3RyYW1wb2xp
bmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpCi0gICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPnZt
KCkuZmluZENoZWNrcG9pbnRPU1JTaWRlU3RhdGUobV9jYWxsRnJhbWUpOwotI2VuZGlmCi0gICAg
ICAgICAgICBpZiAoIW1faXNUZXJtaW5hdGlvbikgeworICAgICAgICBpZiAoIW1faXNUZXJtaW5h
dGlvbikgeworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrKSB7CiAgICAgICAgICAgICAgICAg
bV9oYW5kbGVyID0gZmluZEV4Y2VwdGlvbkhhbmRsZXIodmlzaXRvciwgbV9jb2RlQmxvY2ssIFJl
cXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7CiAgICAgICAgICAgICAgICAgaWYgKG1faGFuZGxl
cikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKQEAgLTU2
OSw3ICs1NjEsNiBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChzaG91bGRTdG9wVW53aW5kaW5nKQog
ICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKIAotICAgICAgICBtX3JldHVy
blBDID0gbV9jYWxsRnJhbWUtPnJldHVyblBDKCkudmFsdWUoKTsKICAgICAgICAgcmV0dXJuIFN0
YWNrVmlzaXRvcjo6Q29udGludWU7CiAgICAgfQogCkBAIC02MDYsNyArNTk3LDYgQEAgcHJpdmF0
ZToKICAgICBib29sIG1faXNUZXJtaW5hdGlvbjsKICAgICBDb2RlQmxvY2sqJiBtX2NvZGVCbG9j
azsKICAgICBIYW5kbGVySW5mbyomIG1faGFuZGxlcjsKLSAgICBtdXRhYmxlIGNvbnN0IHZvaWQq
IG1fcmV0dXJuUEMgeyBudWxscHRyIH07CiB9OwogCiBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8q
IEludGVycHJldGVyOjp1bndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEV4Y2Vw
dGlvbiogZXhjZXB0aW9uKQpAQCAtODc2LDcgKzg2Niw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6
OmV4ZWN1dGVDYWxsKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU09iamVj
dCoKICAgICB9CiAKICAgICBWTUVudHJ5U2NvcGUgZW50cnlTY29wZSh2bSwgZ2xvYmFsT2JqZWN0
KTsKLSAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSB8fCBhcmdzLnNp
emUoKSA+IG1heEFyZ3VtZW50cykpCisgICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vy
c2VTb2Z0KCkpKQogICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd1N0YWNrT3ZlcmZs
b3dFcnJvcihnbG9iYWxPYmplY3QsIHRocm93U2NvcGUpKTsKIAogICAgIGlmIChpc0pTQ2FsbCkg
ewpAQCAtOTQ1LDcgKzkzNSw3IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0
cnVjdChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNPCiAgICAgfQogCiAg
ICAgVk1FbnRyeVNjb3BlIGVudHJ5U2NvcGUodm0sIGdsb2JhbE9iamVjdCk7Ci0gICAgaWYgKFVO
TElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkgfHwgYXJncy5zaXplKCkgPiBtYXhBcmd1
bWVudHMpKSB7CisgICAgaWYgKFVOTElLRUxZKCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkpKSB7
CiAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKGdsb2JhbE9iamVjdCwgdGhyb3dTY29w
ZSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKaW5kZXggZTgzZjQ4OTJlNDYzOWExMjM2
Y2VlMzlkY2RhOTlmZWM4YWRjMDU4ZS4uMTgxMTI5N2IxOGFkYzJkNzNmZjZmZTFkZjk1ODAyYTZh
MGIxNWRjNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmgKQEAgLTE3MSw3ICsxNzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBzdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG1heEFyZ3VtZW50cyA9IDB4MTAwMDA7CiAgICAgdW5zaWduZWQg
c2l6ZUZyYW1lRm9yVmFyYXJncyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZNJiwgSlNW
YWx1ZSBhcmd1bWVudHMsIHVuc2lnbmVkIG51bVVzZWRTdGFja1Nsb3RzLCB1aW50MzJfdCBmaXJz
dFZhckFyZ09mZnNldCk7CiAgICAgdW5zaWduZWQgc2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50
cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZNJiwgdW5zaWduZWQgbnVtVXNlZFN0YWNr
U2xvdHMpOwotICAgIHZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKiBm
aXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVlIHNvdXJjZSwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJf
dCBsZW5ndGgpOworICAgIHZvaWQgbG9hZFZhcmFyZ3MoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJh
bWUqIGV4ZWNDYWxsZXIsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCBKU1ZhbHVl
IHNvdXJjZSwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwogICAgIHZvaWQgc2V0
dXBWYXJhcmdzRnJhbWUoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqIGV4ZWNDYWxsZXIsIENh
bGxGcmFtZSogZXhlY0NhbGxlZSwgSlNWYWx1ZSBhcmd1bWVudHMsIHVpbnQzMl90IGZpcnN0VmFy
QXJnT2Zmc2V0LCB1aW50MzJfdCBsZW5ndGgpOwogICAgIHZvaWQgc2V0dXBWYXJhcmdzRnJhbWVB
bmRTZXRUaGlzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVyLCBDYWxsRnJh
bWUqIGV4ZWNDYWxsZWUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIGFyZ3VtZW50cywgdWlu
dDMyX3QgZmlyc3RWYXJBcmdPZmZzZXQsIHVpbnQzMl90IGxlbmd0aCk7CiAgICAgdm9pZCBzZXR1
cEZvcndhcmRBcmd1bWVudHNGcmFtZShKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSogZXhlY0Nh
bGxlciwgQ2FsbEZyYW1lKiBleGVjQ2FsbGVlLCB1aW50MzJfdCBsZW5ndGgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAppbmRleCA3
NWRkZDIwM2Y3M2JlMDU3NmQ2ZGQ3NDhiNjVjYmFhOWFiYmZjNzMyLi5kNzFhNTk3MWRkYzhmMGY1
ZWE2NzhkNWZjZTQ4ZTM5NmUyMmE4NzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcApAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQg
U3RhY2tWaXNpdG9yOjpyZWFkSW5saW5lZEZyYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2Rl
T3JpZ2luKiBjb2RlT3JpZ2luCiAgICAgICAgIG1fZnJhbWUubV9jYWxsRnJhbWUgPSBjYWxsRnJh
bWU7CiAgICAgICAgIG1fZnJhbWUubV9pbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWU7
CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3Rlci5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICBtX2ZyYW1lLm1fYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
PSBjYWxsRnJhbWUtPnIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIpLnVu
Ym94ZWRJbnQzMigpOworICAgICAgICAgICAgbV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzID0gY2FsbEZyYW1lLT5yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lz
dGVyLm9mZnNldCgpKS51bmJveGVkSW50MzIoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
bV9mcmFtZS5tX2FyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKICAgICAgICAgbV9mcmFtZS5tX2NvZGVCbG9jayA9
IGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2suZ2V0KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCBhM2FmZGM0MjNiNjMxZjFlYWMx
OWZiYjBhNTA3NmM0OWE3MWU3NmVhLi4yODIwY2IxNzg0NWNmY2ZjODlmNTU5NmExYjY0OTc1ODRi
ZmYwNjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgK
QEAgLTY0NywyOCArNjQ3LDI4IEBAIHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAotICAgIHZvaWQg
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoVmlydHVhbFJlZ2lzdGVyIGVudHJ5LCBHUFJS
ZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCisgICAgdm9p
ZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihpbnQgZW50cnksIEdQUlJlZyB0bywgR1BS
UmVnIGZyb20gPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKICAgICB7Ci0gICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCB0
byk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVvZihSZWdpc3Rl
cikpLCB0byk7CiAgICAgfQotICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihW
aXJ0dWFsUmVnaXN0ZXIgZW50cnksIEdQUlJlZyB0bywgR1BSUmVnIGZyb20gPSBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlcikKKyAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyMzIo
aW50IGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIpCiAgICAgewotICAgICAgICBsb2FkMzIoQWRkcmVzcyhmcm9tLCBlbnRyeS5vZmZzZXQo
KSAqIHNpemVvZihSZWdpc3RlcikpLCB0byk7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGZyb20s
IGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSksIHRvKTsKICAgICB9CiAjaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyNjQoVmlydHVhbFJlZ2lzdGVy
IGVudHJ5LCBHUFJSZWcgdG8sIEdQUlJlZyBmcm9tID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIpCisgICAgdm9pZCBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcjY0KGludCBlbnRyeSwgR1BS
UmVnIHRvLCBHUFJSZWcgZnJvbSA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQogICAgIHsK
LSAgICAgICAgbG9hZDY0KEFkZHJlc3MoZnJvbSwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgdG8pOworICAgICAgICBsb2FkNjQoQWRkcmVzcyhmcm9tLCBlbnRyeSAqIHNpemVv
ZihSZWdpc3RlcikpLCB0byk7CiAgICAgfQogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCi0gICAg
dm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSUmVnIGZyb20sIFZpcnR1YWxSZWdpc3Rl
ciBlbnRyeSkKKyAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihHUFJSZWcgZnJvbSwg
aW50IGVudHJ5KQogICAgIHsKLSAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSk7
CisgICAgICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgIH0KIAotICAgIHZvaWQgZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCisg
ICAgdm9pZCBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIGludCBlbnRyeSkK
ICAgICB7Ci0gICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIodmFsdWUpLCBBZGRyZXNzKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeS5vZmZzZXQoKSAqIHNpemVvZihSZWdpc3Rl
cikpKTsKKyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cih2YWx1ZSksIEFkZHJlc3MoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAg
IH0KIAogICAgIHZvaWQgZW1pdEdldENhbGxlckZyYW1lRnJvbUNhbGxGcmFtZUhlYWRlclB0cihS
ZWdpc3RlcklEIHRvKQpAQCAtNjk2LDE5ICs2OTYsMTkgQEAgcHVibGljOgogICAgIC8vIGNhbGxl
cidzIGZyYW1lIHBvaW50ZXIuIE9uIHNvbWUgcGxhdGZvcm1zLCB0aGUgY2FsbGVlIGlzIHJlc3Bv
bnNpYmxlIGZvciBwdXNoaW5nIHRoZQogICAgIC8vICJsaW5rIHJlZ2lzdGVyIiBjb250YWluaW5n
IHRoZSByZXR1cm4gYWRkcmVzcyBpbiB0aGUgZnVuY3Rpb24gcHJvbG9ndWUuCiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xvZ3Vl
KEdQUlJlZyBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCisgICAgdm9pZCBlbWl0UHV0VG9D
YWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShHUFJSZWcgZnJvbSwgaW50IGVudHJ5KQogICAg
IHsKLSAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwg
ZW50cnkub2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3Rlcikp
IC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpKSk7CisgICAgICAgIHN0b3JlUHRyKGZyb20s
IEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5ICogc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSkpOwog
ICAgIH0KICNlbHNlCi0gICAgdm9pZCBlbWl0UHV0UGF5bG9hZFRvQ2FsbEZyYW1lSGVhZGVyQmVm
b3JlUHJvbG9ndWUoR1BSUmVnIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSkKKyAgICB2b2lk
IGVtaXRQdXRQYXlsb2FkVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShHUFJSZWcgZnJv
bSwgaW50IGVudHJ5KQogICAgIHsKLSAgICAgICAgc3RvcmVQdHIoZnJvbSwgQWRkcmVzcyhzdGFj
a1BvaW50ZXJSZWdpc3RlciwgZW50cnkub2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHNpemVvZihSZWdpc3RlcikpIC0gcHJvbG9ndWVTdGFja1BvaW50ZXJEZWx0YSgpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAg
ICAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBlbnRyeSAq
IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBwcm9sb2d1ZVN0YWNr
UG9pbnRlckRlbHRhKCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnBheWxvYWQpKSk7CiAgICAgfQogCi0gICAgdm9pZCBlbWl0UHV0VGFnVG9DYWxsRnJh
bWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShUcnVzdGVkSW1tMzIgdGFnLCBWaXJ0dWFsUmVnaXN0ZXIg
ZW50cnkpCisgICAgdm9pZCBlbWl0UHV0VGFnVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1
ZShUcnVzdGVkSW1tMzIgdGFnLCBpbnQgZW50cnkpCiAgICAgewotICAgICAgICBzdG9yZVB0cih0
YWcsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpICogc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHByb2xvZ3VlU3RhY2tQb2ludGVy
RGVsdGEoKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
dGFnKSkpOworICAgICAgICBzdG9yZVB0cih0YWcsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0
ZXIsIGVudHJ5ICogc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAtIHBy
b2xvZ3VlU3RhY2tQb2ludGVyRGVsdGEoKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgIH0KICNlbmRpZgogICAgIApAQCAtMTE0OCwx
MCArMTE0OCw5IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHZpcnR1YWxSZWdpc3Rlci5pc1Zh
bGlkKCkpOwogICAgICAgICByZXR1cm4gQWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CiAgICAgfQot
ICAgIHN0YXRpYyBBZGRyZXNzIGFkZHJlc3NGb3IoT3BlcmFuZCBvcGVyYW5kKQorICAgIHN0YXRp
YyBBZGRyZXNzIGFkZHJlc3NGb3IoaW50IG9wZXJhbmQpCiAgICAgewotICAgICAgICBBU1NFUlQo
IW9wZXJhbmQuaXNUbXAoKSk7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJhbmQudmly
dHVhbFJlZ2lzdGVyKCkpOworICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihzdGF0aWNfY2FzdDxW
aXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKICAgICB9CiAKICAgICBzdGF0aWMgQWRkcmVzcyB0
YWdGb3IoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgR1BSUmVnIGJhc2VHUFIpCkBA
IC0xMTY0LDEwICsxMTYzLDkgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lz
dGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpICsg
VGFnT2Zmc2V0KTsKICAgICB9Ci0gICAgc3RhdGljIEFkZHJlc3MgdGFnRm9yKE9wZXJhbmQgb3Bl
cmFuZCkKKyAgICBzdGF0aWMgQWRkcmVzcyB0YWdGb3IoaW50IG9wZXJhbmQpCiAgICAgewotICAg
ICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7Ci0gICAgICAgIHJldHVybiB0YWdGb3Iob3Bl
cmFuZC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIHJldHVybiB0YWdGb3Ioc3RhdGljX2Nh
c3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEFkZHJl
c3MgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBHUFJSZWcgYmFz
ZUdQUikKQEAgLTExODAsMzEgKzExNzgsMzAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQodmly
dHVhbFJlZ2lzdGVyLmlzVmFsaWQoKSk7CiAgICAgICAgIHJldHVybiBBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCkgKiBzaXplb2YoUmVn
aXN0ZXIpICsgUGF5bG9hZE9mZnNldCk7CiAgICAgfQotICAgIHN0YXRpYyBBZGRyZXNzIHBheWxv
YWRGb3IoT3BlcmFuZCBvcGVyYW5kKQorICAgIHN0YXRpYyBBZGRyZXNzIHBheWxvYWRGb3IoaW50
IG9wZXJhbmQpCiAgICAgewotICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNUbXAoKSk7Ci0gICAg
ICAgIHJldHVybiBwYXlsb2FkRm9yKG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAg
ICByZXR1cm4gcGF5bG9hZEZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQp
KTsKICAgICB9CiAKICAgICAvLyBBY2Nlc3MgdG8gb3VyIGZpeGVkIGNhbGxlZSBDYWxsRnJhbWUu
Ci0gICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVTbG90KFZpcnR1YWxSZWdpc3RlciBzbG90
KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lU2xvdChpbnQgc2xvdCkKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChzbG90Lm9mZnNldCgpID49IENhbGxlckZyYW1lQW5kUEM6OnNpemVJblJl
Z2lzdGVycyk7Ci0gICAgICAgIHJldHVybiBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBz
aXplb2YoUmVnaXN0ZXIpICogKHNsb3QgLSBDYWxsZXJGcmFtZUFuZFBDOjpzaXplSW5SZWdpc3Rl
cnMpLm9mZnNldCgpKTsKKyAgICAgICAgQVNTRVJUKHNsb3QgPj0gQ2FsbGVyRnJhbWVBbmRQQzo6
c2l6ZUluUmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJuIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVn
aXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiAoc2xvdCAtIENhbGxlckZyYW1lQW5kUEM6OnNpemVJ
blJlZ2lzdGVycykpOwogICAgIH0KIAogICAgIC8vIEFjY2VzcyB0byBvdXIgZml4ZWQgY2FsbGVl
IENhbGxGcmFtZS4KICAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVBcmd1bWVudFNsb3QoaW50IGFy
Z3VtZW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGxlZUZyYW1lU2xvdCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpOworICAgICAgICByZXR1cm4gY2FsbGVlRnJhbWVT
bG90KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KS5vZmZzZXQoKSk7CiAgICAg
fQogCi0gICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJhbWVUYWdTbG90KFZpcnR1YWxSZWdpc3Rl
ciBzbG90KQorICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lVGFnU2xvdChpbnQgc2xvdCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3Qoc2xvdCkud2l0aE9mZnNldChU
YWdPZmZzZXQpOwogICAgIH0KIAotICAgIHN0YXRpYyBBZGRyZXNzIGNhbGxlZUZyYW1lUGF5bG9h
ZFNsb3QoVmlydHVhbFJlZ2lzdGVyIHNsb3QpCisgICAgc3RhdGljIEFkZHJlc3MgY2FsbGVlRnJh
bWVQYXlsb2FkU2xvdChpbnQgc2xvdCkKICAgICB7CiAgICAgICAgIHJldHVybiBjYWxsZWVGcmFt
ZVNsb3Qoc2xvdCkud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KTsKICAgICB9CkBAIC0xMjIxLDcg
KzEyMTgsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgQWRkcmVzcyBjYWxsZWVGcmFtZUNhbGxl
ckZyYW1lKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3QoVmlydHVhbFJl
Z2lzdGVyKDApKS53aXRoT2Zmc2V0KENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSk7Cisg
ICAgICAgIHJldHVybiBjYWxsZWVGcmFtZVNsb3QoMCkud2l0aE9mZnNldChDYWxsRnJhbWU6OmNh
bGxlckZyYW1lT2Zmc2V0KCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBHUFJSZWcgc2VsZWN0U2Ny
YXRjaEdQUihSZWdpc3RlclNldCBwcmVzZXJ2ZWQpCkBAIC0xNTMwLDcgKzE1MjcsNyBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICBBU1NFUlQoIWlubGluZUNhbGxGcmFtZSB8fCBpbmxpbmVDYWxs
RnJhbWUtPmlzVmFyYXJncygpKTsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCi0gICAg
ICAgICAgICByZXR1cm4gQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
CisgICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICAgICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudFJlZ2lzdGVyOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAppbmRleCBkOGQwNmNmZDRkM2VmYTdhZmU4MWNl
MGFmOWNkNzNlNWJkN2NjMTAyLi41ZGZiMmYxMWQzNjVkNjNhMTNmNjcxNjE1YjZiNjUwNzQ2ZDc0
MjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZm
bGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVy
LmNwcApAQCAtNjEsNyArNjEsNyBAQCBDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZs
ZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYQogI2VuZGlmCiAK
ICAgICBBU1NFUlQoIWRhdGEuY2FsbGVlLmlzSW5KU1N0YWNrKCkgfHwgZGF0YS5jYWxsZWUudmly
dHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpKTsKLSAgICBhZGROZXcoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlLCBkYXRhLmNhbGxlZSk7CisgICAgYWRkTmV3KFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVT
bG90OjpjYWxsZWUpLCBkYXRhLmNhbGxlZSk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGRhdGEuYXJncy5zaXplKCk7ICsraSkgewogICAgICAgICBBU1NFUlQoIWRhdGEuYXJnc1tpXS5p
c0luSlNTdGFjaygpIHx8IGRhdGEuYXJnc1tpXS52aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxl
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCmluZGV4
IDRjNmFhMzJmNGY1ODc2MzgzMTA5MzhmMDBmOTJjMDk5OGQ2NmY5NDIuLjYyNDM5YmRmMzQ0M2I4
N2JlOTk5NjAyZmQ5YzNlYmM5NmFmNmE5ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVyLmgKQEAgLTEyOCw3ICsxMjgsNyBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBBU1NFUlQoaXNVbmRlY2lkZWQoKSk7CiAgICAgICAgIEFTU0VSVCghZ2V0TmV3
KGpzVmFsdWVSZWdzKSk7Ci0gICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSB7
IGdldE5ldyhDYWxsRnJhbWVTbG90OjpjYWxsZWUpIH07CisgICAgICAgIENhY2hlZFJlY292ZXJ5
KiBjYWNoZWRSZWNvdmVyeSB7IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSkgfTsKICAgICAgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5KTsKICAgICAgICAgYWRk
TmV3KGpzVmFsdWVSZWdzLCBjYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSk7CiAgICAgfQpAQCAt
MTQxLDcgKzE0MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFzc3VtZUNhbGxlZUlzQ2VsbCgpCiAg
ICAgewogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIENhY2hlZFJlY292ZXJ5JiBjYWxs
ZWVDYWNoZWRSZWNvdmVyeSA9ICpnZXROZXcoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKTsKKyAgICAg
ICAgQ2FjaGVkUmVjb3ZlcnkmIGNhbGxlZUNhY2hlZFJlY292ZXJ5ID0gKmdldE5ldyhWaXJ0dWFs
UmVnaXN0ZXIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7CiAgICAgICAgIHN3aXRjaCAoY2FsbGVl
Q2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS50ZWNobmlxdWUoKSkgewogICAgICAgICBjYXNlIElu
UGFpcjoKICAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
aW5kZXggODczMTVlZjg0NzdhYzEyYTczYzU3MGFlZjkxMjUwYzU2OWE0ZjE0Yy4uMjgwMzJhMjFh
YWNiOWEyZDkzMjI4NWZlMWY5NjVhZGUzZTI3YTgwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CkBAIC0zMzEsMTYgKzMzMSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjb21w
aWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qLCBDb21waWxlT3BTdHJpY3RFcVR5
cGUpOwogICAgICAgICBlbnVtIGNsYXNzIENvbXBpbGVPcEVxVHlwZSB7IEVxLCBORXEgfTsKICAg
ICAgICAgdm9pZCBjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImLCBDb21waWxlT3BFcVR5cGUsIGludCBqdW1wVGFyZ2V0KTsKLSAgICAgICAgYm9vbCBp
c09wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBib29sIGlz
T3BlcmFuZENvbnN0YW50RG91YmxlKGludCBzcmMpOwogICAgICAgICAKLSAgICAgICAgdm9pZCBl
bWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7Ci0gICAg
ICAgIHZvaWQgZW1pdExvYWRJbnQzMlRvRG91YmxlKFZpcnR1YWxSZWdpc3RlciwgRlBSZWdpc3Rl
cklEIHZhbHVlKTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQUmVn
aXN0ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdExvYWRJbnQzMlRvRG91YmxlKGludCBp
bmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKIAogICAgICAgICBlbnVtIFdyaXRlQmFycmllck1v
ZGUgeyBVbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyLCBTaG91bGRGaWx0ZXJCYXNlLCBTaG91bGRG
aWx0ZXJWYWx1ZSwgU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIH07CiAgICAgICAgIC8vIHZhbHVl
IHJlZ2lzdGVyIGluIHdyaXRlIGJhcnJpZXIgaXMgdXNlZCBiZWZvcmUgYW55IHNjcmF0Y2ggcmVn
aXN0ZXJzCiAgICAgICAgIC8vIHNvIG1heSBzYWZlbHkgYmUgdGhlIHNhbWUgYXMgZWl0aGVyIG9m
IHRoZSBzY3JhdGNoIHJlZ2lzdGVycy4KLSAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKFZp
cnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJN
b2RlKTsKLSAgICAgICAgdm9pZCBlbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIFZpcnR1
YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSk7CisgICAgICAgIHZvaWQgZW1pdFdy
aXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1v
ZGUpOworICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgdW5zaWdu
ZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUpOwogICAgICAgICB2b2lkIGVtaXRXcml0ZUJhcnJp
ZXIoSlNDZWxsKiBvd25lcik7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHZh
bHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMgYXZhaWxhYmxlIGZv
cgpAQCAtNDA0LDMyICs0MDQsMzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgZW51bSBG
aW5hbE9iamVjdE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAKLSAgICAgICAg
dm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVS
ZWdzIGRzdCk7Ci0gICAgICAgIHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVn
aXN0ZXIgZHN0LCBKU1ZhbHVlUmVncyBzcmMpOworICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoaW50IHNyYywgSlNWYWx1ZVJlZ3MgZHN0KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIEpTVmFsdWVSZWdzIHNyYyk7CiAKLSAgICAgICAgaW50
MzJfdCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYyk7Ci0gICAgICAg
IGRvdWJsZSBnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoVmlydHVhbFJlZ2lzdGVyIHNyYyk7Cisg
ICAgICAgIGludDMyX3QgZ2V0T3BlcmFuZENvbnN0YW50SW50KGludCBzcmMpOworICAgICAgICBk
b3VibGUgZ2V0T3BlcmFuZENvbnN0YW50RG91YmxlKGludCBzcmMpOwogCiAjaWYgVVNFKEpTVkFM
VUUzMl82NCkKLSAgICAgICAgYm9vbCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lz
dGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgaW50JiBvcCwgaW50MzJfdCYgY29uc3RhbnQp
OworICAgICAgICBib29sIGdldE9wZXJhbmRDb25zdGFudEludChpbnQgb3AxLCBpbnQgb3AyLCBp
bnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCk7CiAKLSAgICAgICAgdm9pZCBlbWl0TG9hZFRhZyhW
aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZFBh
eWxvYWQoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQpOworICAgICAgICB2b2lk
IGVtaXRMb2FkVGFnKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcpOworICAgICAgICB2b2lkIGVt
aXRMb2FkUGF5bG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCk7CiAKICAgICAgICAg
dm9pZCBlbWl0TG9hZChjb25zdCBKU1ZhbHVlJiB2LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJ
RCBwYXlsb2FkKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lz
dGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFt
ZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZDIoVmlydHVhbFJlZ2lzdGVyLCBSZWdp
c3RlcklEIHRhZzEsIFJlZ2lzdGVySUQgcGF5bG9hZDEsIFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0
ZXJJRCB0YWcyLCBSZWdpc3RlcklEIHBheWxvYWQyKTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZChp
bnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQg
YmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgdm9pZCBlbWl0TG9hZDIoaW50IGlu
ZGV4MSwgUmVnaXN0ZXJJRCB0YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBpbnQgaW5kZXgyLCBS
ZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOwogCi0gICAgICAgIHZvaWQgZW1p
dFN0b3JlKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9h
ZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVt
aXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVy
SUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVJbnQz
MihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIg
PSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyLCBU
cnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7Ci0gICAgICAg
IHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwg
Ym9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVCb29sKFZp
cnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sID0gZmFs
c2UpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZURvdWJsZShWaXJ0dWFsUmVnaXN0ZXIsIEZQUmVn
aXN0ZXJJRCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlKGludCBpbmRleCwgUmVnaXN0
ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1l
UmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRTdG9yZShpbnQgaW5kZXgsIGNvbnN0IEpTVmFs
dWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAg
ICAgdm9pZCBlbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9v
bCBpbmRleElzSW50MzIgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoaW50
IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7
CisgICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9h
ZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVCb29s
KGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sID0gZmFsc2Up
OworICAgICAgICB2b2lkIGVtaXRTdG9yZURvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2
YWx1ZSk7CiAKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmlydHVh
bFJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoVmly
dHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZyk7CisgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCk7CisgICAgICAgIHZvaWQg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVn
aXN0ZXJJRCB0YWcpOwogCiAgICAgICAgIHZvaWQgY29tcGlsZUdldEJ5SWRIb3RQYXRoKGNvbnN0
IElkZW50aWZpZXIqKTsKIApAQCAtNDM4LDEwICs0MzgsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RydWN0aW9uICosIE9wZXJh
bmRUeXBlcywgSnVtcExpc3QmIG5vdEludDMyT3AxLCBKdW1wTGlzdCYgbm90SW50MzJPcDIsIGJv
b2wgb3AxSXNJblJlZ2lzdGVycyA9IHRydWUsIGJvb2wgb3AySXNJblJlZ2lzdGVycyA9IHRydWUp
OwogCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpOwogICAgICAgICB2b2lkIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkc3QpOwor
ICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGludCBzcmMxLCBSZWdpc3RlcklE
IGRzdDEsIGludCBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOwogICAgICAgICB2b2lkIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZp
cnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpOworICAgICAgICB2b2lkIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoaW50IGRzdCwgUmVnaXN0ZXJJRCBmcm9tID0gcmVnVDApOwogICAg
ICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVn
aXN0ZXJJRCBmcm9tID0gcmVnVDApOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoVmlydHVh
bFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIC8qIG9ubHkgdXNlZCBpbiBK
U1ZhbHVlMzJfNjQgKi8gPSBmYWxzZSkKKyAgICAgICAgdm9pZCBlbWl0U3RvcmVDZWxsKGludCBk
c3QsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCAvKiBvbmx5IHVzZWQgaW4gSlNWYWx1ZTMyXzY0
ICovID0gZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCBwYXlsb2FkKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBwYXlsb2FkKQogICAgICAgICB7CiAgICAg
ICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcGF5bG9hZCk7CiAgICAgICAgIH0K
QEAgLTQ0OSwyOSArNDU2LDI5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKdW1wIGVtaXRK
dW1wSWZCb3RoSlNDZWxscyhSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3RlcklEKTsKICAg
ICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZKU0NlbGwoUmVnaXN0ZXJJRCk7CiAgICAgICAg
IHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQpOwotICAgICAgICB2
b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklELCBWaXJ0dWFsUmVnaXN0
ZXIpOworICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklE
LCBpbnQgVlJlZyk7CiAgICAgICAgIEp1bXAgZW1pdEp1bXBJZk5vdEludChSZWdpc3RlcklELCBS
ZWdpc3RlcklELCBSZWdpc3RlcklEIHNjcmF0Y2gpOwogICAgICAgICBQYXRjaGFibGVKdW1wIGVt
aXRQYXRjaGFibGVKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZvaWQgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KFJlZ2lzdGVySUQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdE51bWJlcihSZWdpc3RlcklEKTsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQoUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsK
IAotICAgICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90UGF0aChWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZVJlZywgY29uc3QgSWRlbnRpZmllciopOworICAgICAgICB2b2lkIGNvbXBpbGVHZXRCeUlkSG90
UGF0aChpbnQgYmFzZVZSZWcsIGNvbnN0IElkZW50aWZpZXIqKTsKIAogI2VuZGlmIC8vIFVTRShK
U1ZBTFVFMzJfNjQpCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZv
aWQgZW1pdF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiosIFJlbGF0aW9uYWxDb25k
aXRpb24pOwotICAgICAgICB2b2lkIGVtaXRfY29tcGFyZUFuZEp1bXBJbXBsKFZpcnR1YWxSZWdp
c3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25h
bENvbmRpdGlvbik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoaW50IG9w
MSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWdu
ZWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9p
ZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoVmlydHVhbFJlZ2lzdGVyIGRzdCwgVmlydHVhbFJl
Z2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbik7Cisg
ICAgICAgIHZvaWQgZW1pdF9jb21wYXJlVW5zaWduZWRJbXBsKGludCBkc3QsIGludCBvcDEsIGlu
dCBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKLSAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVV
bnNpZ25lZEFuZEp1bXBJbXBsKFZpcnR1YWxSZWdpc3RlciBvcDEsIFZpcnR1YWxSZWdpc3RlciBv
cDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbik7CisgICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wSW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25l
ZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcD4KICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVj
dGlvbiosIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24p
KEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBp
bnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBl
bWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJl
Z2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBzaXplX3QgaW5zdHJ1Y3Rpb25TaXplLCBEb3Vi
bGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdF9jb21wYXJl
QW5kSnVtcFNsb3dJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90
IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04g
Km9wZXJhdGlvbikoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAg
ICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIApAQCAtNjc4
LDggKzY4NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBP
cD4KICAgICAgICAgdm9pZCBlbWl0TmV3RnVuY0V4cHJDb21tb24oY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyk7Ci0gICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKFZpcnR1YWxSZWdp
c3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcywgdW5zaWduZWQgZGVwdGgpOwotICAgICAgICB2b2lkIGVtaXRMb2FkV2l0aFN0cnVjdHVy
ZUNoZWNrKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCk7
CisgICAgICAgIHZvaWQgZW1pdFJlc29sdmVDbG9zdXJlKGludCBkc3QsIGludCBzY29wZSwgYm9v
bCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgpOworICAgICAgICB2b2lk
IGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKGludCBzY29wZSwgU3RydWN0dXJlKiogc3RydWN0
dXJlU2xvdCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgdm9pZCBlbWl0R2V0VmFyRnJv
bVBvaW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnKTsKICAgICAgICAgdm9pZCBlbWl0R2V0
VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnKTsKQEAgLTY4
NywyMCArNjk0LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRHZXRWYXJG
cm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJSZWcg
cGF5bG9hZCk7CiAgICAgICAgIHZvaWQgZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9w
ZXJhbmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKTsKICNlbmRpZgotICAgICAgICB2b2lk
IGVtaXRHZXRDbG9zdXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJh
bmQpOworICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90
IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7
CiAgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKEdQUlJlZyBwb2ludGVyVG9TZXQpOwotICAg
ICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0R2xv
YmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJl
Z2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOwotICAgICAgICB2b2lkIGVtaXRQdXRDbG9z
dXJlVmFyKFZpcnR1YWxSZWdpc3RlciBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOworICAgICAgICB2b2lkIGVtaXRQdXRHbG9i
YWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsK
KyAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVlKiogYWRk
cmVzc09mT3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiopOworICAgICAgICB2b2lk
IGVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1
ZSwgV2F0Y2hwb2ludFNldCopOwogCi0gICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoaW50IGRzdCk7CiAK
LSAgICAgICAgdm9pZCBlbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9t
LCBWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhl
YWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSk7CiAKLSAgICAgICAgSlNWYWx1ZSBnZXRD
b25zdGFudE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgYm9vbCBpc09wZXJhbmRD
b25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0
YW50Q2hhcihWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBKU1ZhbHVlIGdldENvbnN0YW50T3Bl
cmFuZChpbnQgc3JjKTsKKyAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudEludChpbnQgc3Jj
KTsKKyAgICAgICAgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoaW50IHNyYyk7CiAKICAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFBy
b2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CiAgICAgICAgIHZv
aWQgZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IEluc3Ry
dWN0aW9uKiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7CkBAIC03Mjcs
NyArNzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoIWl0ZXItPmZy
b20uaXNTZXQoKSk7CiAgICAgICAgICAgICArK2l0ZXI7CiAgICAgICAgIH0KLSAgICAgICAgdm9p
ZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiwgVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgdm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgaW50IHZpcnR1YWxSZWdpc3Rlcklu
ZGV4KTsKICAgICAgICAgdm9pZCBsaW5rQWxsU2xvd0Nhc2VzRm9yQnl0ZWNvZGVJbmRleChWZWN0
b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywKICAgICAgICAgICAgIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImLCBCeXRlY29kZUluZGV4IGJ5dGVjb2RlT2Zmc2V0KTsKIApAQCAt
NzQ3LDEzICs3NTQsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJldHVyblR5cGUo
Y29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPik7CiAjZW5kaWYKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0
aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOwotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFn
PiwgaW50KTsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWV0YWRhdGE+Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVl
UmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25Q
dHJUYWc+LCBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJv
ZmlsZShNZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIGludCk7
CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0eXBl
bmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRzPE9w
ZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAgICBj
YWxsT3BlcmF0aW9uKE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uLCBWaXJ0dWFsUmVnaXN0ZXIgcmVz
dWx0LCBBcmdzLi4uIGFyZ3MpCisgICAgICAgIGNhbGxPcGVyYXRpb24oT3BlcmF0aW9uVHlwZSBv
cGVyYXRpb24sIGludCByZXN1bHQsIEFyZ3MuLi4gYXJncykKICAgICAgICAgewogICAgICAgICAg
ICAgc2V0dXBBcmd1bWVudHM8T3BlcmF0aW9uVHlwZT4oYXJncy4uLik7CiAgICAgICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHQob3BlcmF0
aW9uLCByZXN1bHQpOwpAQCAtNzk3LDcgKzgwNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRhLCB0eXBlbmFtZSBPcGVyYXRpb25UeXBlLCB0
eXBlbmFtZS4uLiBBcmdzPgogICAgICAgICBzdGQ6OmVuYWJsZV9pZl90PEZ1bmN0aW9uVHJhaXRz
PE9wZXJhdGlvblR5cGU+OjpoYXNSZXN1bHQsIE1hY3JvQXNzZW1ibGVyOjpDYWxsPgotICAgICAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRpb25U
eXBlIG9wZXJhdGlvbiwgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCwgQXJncy4uLiBhcmdzKQorICAg
ICAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFkYXRhLCBPcGVyYXRp
b25UeXBlIG9wZXJhdGlvbiwgaW50IHJlc3VsdCwgQXJncy4uLiBhcmdzKQogICAgICAgICB7CiAg
ICAgICAgICAgICBzZXR1cEFyZ3VtZW50czxPcGVyYXRpb25UeXBlPihhcmdzLi4uKTsKICAgICAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dFdpdGhQcm9maWxlKG1ldGFkYXRhLCBvcGVyYXRpb24sIHJlc3VsdCk7CkBAIC04NTcsNyArODY0
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmbmRlZiBOREVCVUcKLSAgICAgICAg
dm9pZCBwcmludEJ5dGVjb2RlT3BlcmFuZFR5cGVzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBWaXJ0
dWFsUmVnaXN0ZXIgc3JjMik7CisgICAgICAgIHZvaWQgcHJpbnRCeXRlY29kZU9wZXJhbmRUeXBl
cyhpbnQgc3JjMSwgaW50IHNyYzIpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0FNUExJTkdfRkxB
R1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAppbmRleCAz
YTMyYzMyNjE4OWZhYjE5N2Q3Y2Y5ZjkxZDVmNmI0YjMxMDIwMmM0Li4zNDU4NzQ0ZmJjZGQ1M2Fj
ZjlhNDMzMjhiYzQ5NGIwZmVkY2I4OTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQXJpdGhtZXRpYy5jcHAKQEAgLTE1OCw4ICsxNTgsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
YmVsb3dlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6
OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2lnbmVk
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGludCByZXN1bHQg
PSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9vcGVy
YW5kLm9mZnNldCgpOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdU
MCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKQEAgLTE3MiwxMyArMTcy
LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1
bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmRpdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhz
Lm9mZnNldCgpOworICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKICAgICB1
bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS5tX3Rhcmdl
dExhYmVsKTsKICAgICBlbWl0X2NvbXBhcmVBbmRKdW1wSW1wbChvcDEsIG9wMiwgdGFyZ2V0LCBj
b25kaXRpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcEltcGwoVmlydHVh
bFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
SW1wbChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZGl0aW9uKQogewogICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2RlIGZvciB0aGUg
Zm9sbG93aW5nIGNhc2VzIGluIHRoZSBmYXN0IHBhdGg6CiAgICAgLy8gLSBpbnQgaW1tZWRpYXRl
IHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKQEAgLTIzMCwxMyArMjMwLDEzIEBAIHRlbXBsYXRl
PHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChjb25z
dCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdpc3RlciBv
cDIgPSBieXRlY29kZS5tX3JoczsKKyAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0
KCk7CisgICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOwogICAgIHVuc2lnbmVk
IHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwp
OwogICAgIGVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcEltcGwob3AxLCBvcDIsIHRhcmdldCwg
Y29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcElt
cGwoVmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwgdW5zaWduZWQgdGFy
Z2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3ZvaWQgSklUOjplbWl0X2NvbXBh
cmVVbnNpZ25lZEFuZEp1bXBJbXBsKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW50KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1Qw
KTsKQEAgLTI1NiwxMyArMjU2LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVs
YXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3Ry
dWN0aW9uLT5hczxPcD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1
YWxSZWdpc3RlciBvcDIgPSBieXRlY29kZS5tX3JoczsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IG9wMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpOwor
ICAgIGludCBvcDIgPSBieXRlY29kZS5tX3Jocy5vZmZzZXQoKTsKICAgICBlbWl0X2NvbXBhcmVV
bnNpZ25lZEltcGwoZHN0LCBvcDEsIG9wMiwgY29uZGl0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZVVuc2lnbmVkSW1wbChWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0
ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0ZXIgb3AyLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlv
bikKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEltcGwoaW50IGRzdCwgaW50IG9wMSwg
aW50IG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgaWYgKGlzT3Bl
cmFuZENvbnN0YW50SW50KG9wMikpIHsKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIHJlZ1QwKTsKQEAgLTI4NCwxMyArMjg0LDEzIEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgog
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9O
ICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQo
KTsKKyAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CiAgICAgdW5zaWduZWQg
dGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJnZXRMYWJlbCk7
CiAgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKG9wMSwgb3AyLCB0YXJnZXQsIGluc3Ry
dWN0aW9uLT5zaXplKCksIGNvbmRpdGlvbiwgb3BlcmF0aW9uLCBpbnZlcnQsIGl0ZXIpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKFZpcnR1YWxSZWdpc3RlciBv
cDEsIFZpcnR1YWxSZWdpc3RlciBvcDIsIHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0
aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9O
ICpvcGVyYXRpb24pKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3dJbXBsKGludCBvcDEsIGludCBvcDIs
IHVuc2lnbmVkIHRhcmdldCwgc2l6ZV90IGluc3RydWN0aW9uU2l6ZSwgRG91YmxlQ29uZGl0aW9u
IGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAKICAgICAvLyBXZSBnZW5lcmF0
ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgpA
QCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvd0ltcGwo
VmlydHVhbFJlZ2lzdGVyIG9wMSwgVmlydHVhbFJlZ2lzdGVyIG9wMiwKIHZvaWQgSklUOjplbWl0
X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciBzcmNEc3QgPSBieXRlY29kZS5tX3NyY0RzdDsKKyAgICBpbnQgc3JjRHN0ID0g
Ynl0ZWNvZGUubV9zcmNEc3Qub2Zmc2V0KCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHNyY0RzdCwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CkBA
IC0zOTksNyArMzk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcERlYz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0ID0g
Ynl0ZWNvZGUubV9zcmNEc3Q7CisgICAgaW50IHNyY0RzdCA9IGJ5dGVjb2RlLm1fc3JjRHN0Lm9m
ZnNldCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwpAQCAtNDE1LDkgKzQxNSw5IEBAIHZv
aWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BN
b2Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0
Lm9mZnNldCgpOworICAgIGludCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKKyAgICBp
bnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CiAKICAgICAvLyBNYWtlIHN1cmUgcmVn
aXN0ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCiAgICAgQVNTRVJU
KHJlZ1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKQEAgLTQ5MSw5ICs0OTEsOSBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgU25pcHBldEdlbmVyYXRvcj4KIHZvaWQgSklUOjplbWl0
Qml0QmluYXJ5T3BGYXN0UGF0aChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBQcm9maWxpbmdQb2xpY3kgcHJvZmlsaW5nUG9saWN5KQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1
bHQgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUu
bV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9wMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGlu
dCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgb3AxID0gYnl0ZWNv
ZGUubV9saHMub2Zmc2V0KCk7CisgICAgaW50IG9wMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgp
OwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QwKTsKQEAgLTUzOCw4ICs1MzgsOCBAQCB2b2lkIEpJVDo6ZW1pdEJpdEJpbmFy
eU9wRmFzdFBhdGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmls
aQogdm9pZCBKSVQ6OmVtaXRfb3BfYml0bm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BCaXRub3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaW50
IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBvcDEgPSBieXRlY29k
ZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVS
ZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOwpAQCAtNTk5LDkgKzU5OSw5IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIE9wPgogdm9pZCBKSVQ6OmVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgSklUUmlnaHRTaGlmdEdlbmVyYXRv
cjo6U2hpZnRUeXBlIHNuaXBwZXRTaGlmdFR5cGUpCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xo
czsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgaW50IHJl
c3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBvcDEgPSBieXRlY29kZS5t
X2xocy5vZmZzZXQoKTsKKyAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CiAK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDApOwpAQCAtNjc0LDggKzY3NCw4IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlw
ZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOCiB2
b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElD
LCBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZEZ1bmN0aW9u
IHByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24gbm9uUHJvZmlsZWRGdW5jdGlv
bikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaW50IHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBvcGVyYW5kID0gYnl0ZWNvZGUubV9v
cGVyYW5kLm9mZnNldCgpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAvLyBBcml0aE5lZ2F0
ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgpA
QCAtNzI0LDkgKzcyNCw5IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgR2VuZXJh
dG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOCiB2b2lkIEpJVDo6ZW1p
dE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1
bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uIG5vblByb2ZpbGVkRnVuY3Rpb24pCiB7CiAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBv
cDEgPSBieXRlY29kZS5tX2xoczsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUu
bV9yaHM7CisgICAgaW50IHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGlu
dCBvcDEgPSBieXRlY29kZS5tX2xocy5vZmZzZXQoKTsKKyAgICBpbnQgb3AyID0gYnl0ZWNvZGUu
bV9yaHMub2Zmc2V0KCk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwpAQCAtNzk5LDcgKzc5OSw3IEBAIHZvaWQgSklU
OjplbWl0TWF0aElDU2xvdyhKSVRVbmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIGNvbnN0
IEluc3RydWN0aW9uKiBjCiAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQg
PSBsYWJlbCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3A+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKIAogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKQEAgLTg0
NSw5ICs4NDUsOSBAQCB2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUQmluYXJ5TWF0aElDPEdl
bmVyYXRvcj4qIG1hdGhJQywgY29uc3QgSW5zdHJ1Y3Rpb24qCiAgICAgbWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBvcDEgPSBieXRlY29kZS5tX2xo
czsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgb3AyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgaW50IHJl
c3VsdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBvcDEgPSBieXRlY29kZS5t
X2xocy5vZmZzZXQoKTsKKyAgICBpbnQgb3AyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CiAK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEpOwpAQCAtOTA2LDkgKzkwNiw5IEBAIHZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhK
SVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBjb25zdCBJbnN0cnVjdGlvbioKIHZv
aWQgSklUOjplbWl0X29wX2Rpdihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGl2Pigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3AxID0gYnl0ZWNvZGUubV9saHM7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIG9w
MiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGludCByZXN1bHQgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKKyAgICBpbnQgb3AxID0gYnl0ZWNvZGUubV9saHMub2Zmc2V0KCk7CisgICAgaW50IG9w
MiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBK
U1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwuY3BwCmluZGV4IDhkZDc5NmZhOTU2NGFjNTQwYWMwYTUxNGRjZmZkOGZh
YjNjMTFiZTEuLmMzZjhhYTBjN2ZhZjRlYWQ0MzQ2N2Q1NDI3MjZhZThhYzkyNTg3ZGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtNTEsNyArNTEsNyBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0
ZWNvZGUpCiB7CiAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KQEAgLTY2LDcgKzY2LDcgQEAgSklUOjpjb21waWxl
U2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiAgICAgaW50IHJl
Z2lzdGVyT2Zmc2V0ID0gLXN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGUubV9hcmd2KTsKIAogICAg
IGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsK
LSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJP
ZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSksIHJlZ1Qw
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIENhbGxG
cmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApLCByZWdUMCk7CiAgICAgICAgIEp1
bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CiAgICAgICAgIGxvYWQzMihBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CiAgICAgICAgIHN0
b3JlMzIocmVnVDAsIG1ldGFkYXRhLm1fY2FsbExpbmtJbmZvLm1fYXJyYXlQcm9maWxlLmFkZHJl
c3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CkBAIC04NSw5ICs4NSw5IEBAIHN0ZDo6ZW5hYmxl
X2lmX3Q8CiAsIHZvaWQ+CiBKSVQ6OmNvbXBpbGVTZXR1cEZyYW1lKGNvbnN0IE9wJiBieXRlY29k
ZSwgQ2FsbExpbmtJbmZvKiBpbmZvKQogewotICAgIFZpcnR1YWxSZWdpc3RlciB0aGlzVmFsdWUg
PSBieXRlY29kZS5tX3RoaXNWYWx1ZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0g
Ynl0ZWNvZGUubV9hcmd1bWVudHM7Ci0gICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0gYnl0ZWNv
ZGUubV9maXJzdEZyZWUub2Zmc2V0KCk7IC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBhIHZpcnR1YWwg
cmVnaXN0ZXIgaWYgd2UgbmV2ZXIgdXNlIGl0IGFzIG9uZS4uLgorICAgIGludCB0aGlzVmFsdWUg
PSBieXRlY29kZS5tX3RoaXNWYWx1ZS5vZmZzZXQoKTsKKyAgICBpbnQgYXJndW1lbnRzID0gYnl0
ZWNvZGUubV9hcmd1bWVudHMub2Zmc2V0KCk7CisgICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0g
Ynl0ZWNvZGUubV9maXJzdEZyZWUub2Zmc2V0KCk7CiAgICAgaW50IGZpcnN0VmFyQXJnT2Zmc2V0
ID0gYnl0ZWNvZGUubV9maXJzdFZhckFyZzsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
YXJndW1lbnRzLCByZWdUMSk7CkBAIC0yMDYsNyArMjA2LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVP
cENhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0lu
Zm9JbmQKIHsKICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKICAgICBhdXRv
IGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBj
YWxsZWUgPSBieXRlY29kZS5tX2NhbGxlZTsKKyAgICBpbnQgY2FsbGVlID0gYnl0ZWNvZGUubV9j
YWxsZWUub2Zmc2V0KCk7CiAKICAgICAvKiBDYWxsZXIgYWx3YXlzOgogICAgICAgICAtIFVwZGF0
ZXMgY2FsbEZyYW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVEV4Y2VwdGlvbnMuY3BwCmluZGV4IGUwN2E4MzNkNGM4NTNiOWM3YTAy
ZGU4Yjc0NjAxZGYzMDY2YmFlMmYuLmI3ZDBjYTIzNThiZTUyNTAxOGEzZjRlOTYxNmQ5Y2I4NDhm
ZmY1MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURXhjZXB0aW9u
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRFeGNlcHRpb25zLmNwcApA
QCAtNTAsNyArNTAsNyBAQCB2b2lkIGdlbmVyaWNVbndpbmQoVk0mIHZtLCBDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKICAgICBpZiAoT3B0aW9uczo6YnJlYWtPblRocm93KCkpIHsKICAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSB0b3BKU0NhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgICAg
IGRhdGFMb2coIkluIGNhbGwgZnJhbWUgIiwgUmF3UG9pbnRlcih0b3BKU0NhbGxGcmFtZSksICIg
Zm9yIGNvZGUgYmxvY2sgIiwgY29kZUJsb2NrLCAiXG4iKTsKLSAgICAgICAgV1RGQnJlYWtwb2lu
dFRyYXAoKTsKKyAgICAgICAgQ1JBU0goKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGF1dG8qIHNo
YWRvd0NoaWNrZW4gPSB2bS5zaGFkb3dDaGlja2VuKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oCmluZGV4IDljMTE3MzQzNDBjMzY0NzIxYjM1OGI5NTE2ZjY4NzA5MzM0YzVh
MDQuLmZjZThiYjc0NzY2Mzc4Mzc5OGM5OTc1NmU4ZGY3Zjg5ZTA5YmI4NWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCkBAIC00OCwyMCArNDgsMTkgQEAgQUxXQVlTX0lO
TElORSBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgSklUOjplbWl0TG9hZEZvckFycmF5TW9kZShj
b25zdCBJbnN0cnVjdGkKICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KCk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1
YWxSZWdpc3RlciBzcmMpCitBTFdBWVNfSU5MSU5FIGJvb2wgSklUOjppc09wZXJhbmRDb25zdGFu
dERvdWJsZShpbnQgc3JjKQogewotICAgIHJldHVybiBzcmMuaXNDb25zdGFudCgpICYmIGdldENv
bnN0YW50T3BlcmFuZChzcmMpLmlzRG91YmxlKCk7CisgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5p
c0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFuZChzcmMpLmlz
RG91YmxlKCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgSlNWYWx1ZSBKSVQ6OmdldENvbnN0YW50T3Bl
cmFuZChWaXJ0dWFsUmVnaXN0ZXIgc3JjKQorQUxXQVlTX0lOTElORSBKU1ZhbHVlIEpJVDo6Z2V0
Q29uc3RhbnRPcGVyYW5kKGludCBzcmMpCiB7Ci0gICAgQVNTRVJUKHNyYy5pc0NvbnN0YW50KCkp
OworICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSk7
CiAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwogfQogCi1BTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBm
cm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
UHV0SW50VG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkpCiB7Ci0g
ICAgQVNTRVJUKGVudHJ5LmlzSGVhZGVyKCkpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3IoZW50cnkpKTsK
ICAgICBzdG9yZTMyKGZyb20sIHBheWxvYWRGb3IoZW50cnkpKTsKQEAgLTE0NCw3ICsxNDMsNyBA
QCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhD
YWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aQogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNf
SU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldEpTVmFsdWVSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRyVGFnPiBm
dW5jdGlvbiwgVmlydHVhbFJlZ2lzdGVyIGRzdCkKK0FMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3Vs
dChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBpbnQgZHN0KQog
ewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKGZ1bmN0aW9uKTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTU2LDcgKzE1NSw3IEBA
IEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgSklUOjphcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE1ldGFkYXRh
PgotQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0YWRhdGEmIG1ldGFk
YXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0aW9uLCBWaXJ0dWFs
UmVnaXN0ZXIgZHN0KQorQUxXQVlTX0lOTElORSBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBKSVQ6OmFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRKU1ZhbHVlUmVzdWx0V2l0aFByb2ZpbGUoTWV0
YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGZ1bmN0
aW9uLCBpbnQgZHN0KQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uKTsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKG1ldGFkYXRhKTsKQEAgLTE2OCw5ICsxNjcsOSBAQCBBTFdBWVNfSU5MSU5FIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIEpJVDo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVS
ZQogICAgIHJldHVybiBjYWxsOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpsaW5rU2xv
d0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBW
aXJ0dWFsUmVnaXN0ZXIgcmVnKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6bGlua1Nsb3dDYXNl
SWZOb3RKU0NlbGwoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgaW50IHZS
ZWcpCiB7Ci0gICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZShyZWcpKQor
ICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUodlJlZykpCiAgICAgICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsKIH0KIApAQCAtMjg1LDkgKzI4NCw5IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OnNhbXBsZUNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKICNlbmRp
ZgogI2VuZGlmCiAKLUFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50Q2hh
cihWaXJ0dWFsUmVnaXN0ZXIgc3JjKQorQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVyYW5k
Q29uc3RhbnRDaGFyKGludCBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYg
Z2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNTdHJpbmcoKSAmJiBhc1N0cmluZyhnZXRDb25zdGFu
dE9wZXJhbmQoc3JjKS5hc0NlbGwoKSktPmxlbmd0aCgpID09IDE7CisgICAgcmV0dXJuIG1fY29k
ZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpICYmIGdldENvbnN0YW50T3BlcmFu
ZChzcmMpLmlzU3RyaW5nKCkgJiYgYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXND
ZWxsKCkpLT5sZW5ndGgoKSA9PSAxOwogfQogCiBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJiB2YWx1ZVByb2ZpbGUpCkBAIC0zNjQsMjYgKzM2Mywy
NiBAQCBpbmxpbmUgSklUQXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJyYXlNb2RlKEFycmF5UHJvZmls
ZSogcHJvZmlsZSkKICAgICByZXR1cm4gSklUQ29udGlndW91czsKIH0KIAotQUxXQVlTX0lOTElO
RSBpbnQzMl90IEpJVDo6Z2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMp
CitBTFdBWVNfSU5MSU5FIGludDMyX3QgSklUOjpnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNy
YykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuYXNJbnQzMigpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIGRvdWJsZSBKSVQ6OmdldE9wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0
dWFsUmVnaXN0ZXIgc3JjKQorQUxXQVlTX0lOTElORSBkb3VibGUgSklUOjpnZXRPcGVyYW5kQ29u
c3RhbnREb3VibGUoaW50IHNyYykKIHsKICAgICByZXR1cm4gZ2V0Q29uc3RhbnRPcGVyYW5kKHNy
YykuYXNEb3VibGUoKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEluaXRSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdElu
aXRSZWdpc3RlcihpbnQgZHN0KQogewogICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpzVW5kZWZpbmVk
KCksIGFkZHJlc3NGb3IoZHN0KSk7CiB9CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogCi1pbmxp
bmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQg
dGFnKQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQg
dGFnKQogewotICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7CisgICAgaWYgKG1fY29kZUJsb2Nr
LT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKICAgICAgICAgbW92ZShJbW0zMihn
ZXRDb25zdGFudE9wZXJhbmQoaW5kZXgpLnRhZygpKSwgdGFnKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTM5MSw5ICszOTAsOSBAQCBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkVGFnKFZp
cnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFnKQogICAgIGxvYWQzMih0YWdGb3IoaW5k
ZXgpLCB0YWcpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkUGF5bG9hZChWaXJ0dWFs
UmVnaXN0ZXIgcmVnLCBSZWdpc3RlcklEIHBheWxvYWQpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRM
b2FkUGF5bG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCkKIHsKLSAgICBpZiAocmVn
LmlzQ29uc3RhbnQoKSkgeworICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgoaW5kZXgpKSB7CiAgICAgICAgIG1vdmUoSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKGlu
ZGV4KS5wYXlsb2FkKCkpLCBwYXlsb2FkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQw
NywxMzMgKzQwNiwxMzYgQEAgaW5saW5lIHZvaWQgSklUOjplbWl0TG9hZChjb25zdCBKU1ZhbHVl
JiB2LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkKQogICAgIG1vdmUoSW1tMzIo
di50YWcoKSksIHRhZyk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXQoVmly
dHVhbFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBKU1ZhbHVlUmVncyBkc3QpCiB7CiAg
ICAgZW1pdExvYWQoc3JjLCBkc3QudGFnR1BSKCksIGRzdC5wYXlsb2FkR1BSKCkpOwogfQogCi1B
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCiB7CiAgICAgZW1p
dFN0b3JlKGRzdCwgZnJvbS50YWdHUFIoKSwgZnJvbS5wYXlsb2FkR1BSKCkpOwogfQogCi1pbmxp
bmUgdm9pZCBKSVQ6OmVtaXRMb2FkKFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgdGFn
LCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKK2lubGluZSB2b2lkIEpJVDo6
ZW1pdExvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBS
ZWdpc3RlcklEIGJhc2UpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQodGFnICE9IHBheWxvYWQpOwog
CiAgICAgaWYgKGJhc2UgPT0gY2FsbEZyYW1lUmVnaXN0ZXIpIHsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQocGF5bG9hZCAhPSBiYXNlKTsKLSAgICAgICAgZW1pdExvYWRQYXlsb2FkKHJlZywgcGF5
bG9hZCk7Ci0gICAgICAgIGVtaXRMb2FkVGFnKHJlZywgdGFnKTsKKyAgICAgICAgZW1pdExvYWRQ
YXlsb2FkKGluZGV4LCBwYXlsb2FkKTsKKyAgICAgICAgZW1pdExvYWRUYWcoaW5kZXgsIHRhZyk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0IHsg
aW5kZXggfTsKICAgICBpZiAocGF5bG9hZCA9PSBiYXNlKSB7IC8vIGF2b2lkIHN0b21waW5nIGJh
c2UKLSAgICAgICAgbG9hZDMyKHRhZ0ZvcihyZWcsIGJhc2UpLCB0YWcpOwotICAgICAgICBsb2Fk
MzIocGF5bG9hZEZvcihyZWcsIGJhc2UpLCBwYXlsb2FkKTsKKyAgICAgICAgbG9hZDMyKHRhZ0Zv
cih0YXJnZXQsIGJhc2UpLCB0YWcpOworICAgICAgICBsb2FkMzIocGF5bG9hZEZvcih0YXJnZXQs
IGJhc2UpLCBwYXlsb2FkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxvYWQzMihw
YXlsb2FkRm9yKHJlZywgYmFzZSksIHBheWxvYWQpOwotICAgIGxvYWQzMih0YWdGb3IocmVnLCBi
YXNlKSwgdGFnKTsKKyAgICBsb2FkMzIocGF5bG9hZEZvcih0YXJnZXQsIGJhc2UpLCBwYXlsb2Fk
KTsKKyAgICBsb2FkMzIodGFnRm9yKHRhcmdldCwgYmFzZSksIHRhZyk7CiB9CiAKLWlubGluZSB2
b2lkIEpJVDo6ZW1pdExvYWQyKFZpcnR1YWxSZWdpc3RlciByZWcxLCBSZWdpc3RlcklEIHRhZzEs
IFJlZ2lzdGVySUQgcGF5bG9hZDEsIFZpcnR1YWxSZWdpc3RlciByZWcyLCBSZWdpc3RlcklEIHRh
ZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkMihpbnQg
aW5kZXgxLCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lzdGVySUQgcGF5bG9hZDEsIGludCBpbmRleDIs
IFJlZ2lzdGVySUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXlsb2FkMikKIHsKLSAgICBlbWl0TG9hZChy
ZWcyLCB0YWcyLCBwYXlsb2FkMik7Ci0gICAgZW1pdExvYWQocmVnMSwgdGFnMSwgcGF5bG9hZDEp
OworICAgIGVtaXRMb2FkKGluZGV4MiwgdGFnMiwgcGF5bG9hZDIpOworICAgIGVtaXRMb2FkKGlu
ZGV4MSwgdGFnMSwgcGF5bG9hZDEpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91
YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJRCB2YWx1ZSkKK2lubGluZSB2b2lk
IEpJVDo6ZW1pdExvYWREb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpCiB7Ci0g
ICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKHJlZyk7Cisg
ICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsKKyAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBpbkNvbnN0YW50UG9vbCA9IG1fY29kZUJsb2Nr
LT5jb25zdGFudFJlZ2lzdGVyKGluZGV4KTsKICAgICAgICAgbG9hZERvdWJsZShUcnVzdGVkSW1t
UHRyKCZpbkNvbnN0YW50UG9vbCksIHZhbHVlKTsKICAgICB9IGVsc2UKLSAgICAgICAgbG9hZERv
dWJsZShhZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKKyAgICAgICAgbG9hZERvdWJsZShhZGRyZXNz
Rm9yKGluZGV4KSwgdmFsdWUpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJU
b0RvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCitpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRMb2FkSW50MzJUb0RvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2
YWx1ZSkKIHsKLSAgICBpZiAocmVnLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0gbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0
ZXIocmVnKTsKKyAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KGlu
ZGV4KSkgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGluQ29uc3RhbnRQb29sID0g
bV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoaW5kZXgpOwogICAgICAgICBjaGFyKiBieXRl
UG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZpbkNvbnN0YW50UG9vbCk7CiAgICAg
ICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKEFic29sdXRlQWRkcmVzcyhieXRlUG9pbnRlciArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHZhbHVlKTsKICAgICB9
IGVsc2UKLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocGF5bG9hZEZvcihyZWcpLCB2YWx1
ZSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHBheWxvYWRGb3IoaW5kZXgpLCB2YWx1
ZSk7CiB9CiAKLWlubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciByZWcs
IFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSkKK2lu
bGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKGludCBpbmRleCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lz
dGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlKQogewotICAgIHN0b3JlMzIocGF5bG9hZCwg
cGF5bG9hZEZvcihyZWcsIGJhc2UpKTsKLSAgICBzdG9yZTMyKHRhZywgdGFnRm9yKHJlZywgYmFz
ZSkpOworICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgeyBpbmRleCB9OworICAgIHN0b3JlMzIo
cGF5bG9hZCwgcGF5bG9hZEZvcih0YXJnZXQsIGJhc2UpKTsKKyAgICBzdG9yZTMyKHRhZywgdGFn
Rm9yKHRhcmdldCwgYmFzZSkpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMy
KFZpcnR1YWxSZWdpc3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50
MzIpCitpbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUludDMyKGludCBpbmRleCwgUmVnaXN0ZXJJ
RCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKIHsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBh
eWxvYWRGb3IocmVnKSk7CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4KSk7
CiAgICAgaWYgKCFpbmRleElzSW50MzIpCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSwgdGFnRm9yKHJlZykpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihpbmRleCkpOwogfQogCi1pbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3RlciByZWcsIFRydXN0ZWRJbW0zMiBw
YXlsb2FkLCBib29sIGluZGV4SXNJbnQzMikKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlSW50
MzIoaW50IGluZGV4LCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIpCiB7
Ci0gICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKHJlZykpOworICAgIHN0b3JlMzIocGF5
bG9hZCwgcGF5bG9hZEZvcihpbmRleCkpOwogICAgIGlmICghaW5kZXhJc0ludDMyKQotICAgICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcihyZWcpKTsK
KyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YWdGb3Io
aW5kZXgpKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVDZWxsKFZpcnR1YWxSZWdp
c3RlciByZWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCkKK2lubGluZSB2
b2lkIEpJVDo6ZW1pdFN0b3JlQ2VsbChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9v
bCBpbmRleElzQ2VsbCkKIHsKLSAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IocmVnKSk7
CisgICAgc3RvcmUzMihwYXlsb2FkLCBwYXlsb2FkRm9yKGluZGV4KSk7CiAgICAgaWYgKCFpbmRl
eElzQ2VsbCkKLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyks
IHRhZ0ZvcihyZWcpKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZyksIHRhZ0ZvcihpbmRleCkpOwogfQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRTdG9yZUJv
b2woVmlydHVhbFJlZ2lzdGVyIHJlZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNC
b29sKQoraW5saW5lIHZvaWQgSklUOjplbWl0U3RvcmVCb29sKGludCBpbmRleCwgUmVnaXN0ZXJJ
RCBwYXlsb2FkLCBib29sIGluZGV4SXNCb29sKQogewotICAgIHN0b3JlMzIocGF5bG9hZCwgcGF5
bG9hZEZvcihyZWcpKTsKKyAgICBzdG9yZTMyKHBheWxvYWQsIHBheWxvYWRGb3IoaW5kZXgpKTsK
ICAgICBpZiAoIWluZGV4SXNCb29sKQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpCb29sZWFuVGFnKSwgdGFnRm9yKHJlZykpOworICAgICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgdGFnRm9yKGluZGV4KSk7CiB9CiAKLWlubGluZSB2
b2lkIEpJVDo6ZW1pdFN0b3JlRG91YmxlKFZpcnR1YWxSZWdpc3RlciByZWcsIEZQUmVnaXN0ZXJJ
RCB2YWx1ZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlRG91YmxlKGludCBpbmRleCwgRlBS
ZWdpc3RlcklEIHZhbHVlKQogewotICAgIHN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKHJl
ZykpOworICAgIHN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKGluZGV4KSk7CiB9CiAKLWlu
bGluZSB2b2lkIEpJVDo6ZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciByZWcsIGNvbnN0IEpTVmFs
dWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSkKK2lubGluZSB2b2lkIEpJVDo6ZW1pdFN0b3Jl
KGludCBpbmRleCwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlKQogewot
ICAgIHN0b3JlMzIoSW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwgcGF5bG9hZEZvcihyZWcsIGJh
c2UpKTsKLSAgICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnRhZygpKSwgdGFnRm9yKHJlZywgYmFz
ZSkpOworICAgIFZpcnR1YWxSZWdpc3RlciB0YXJnZXQgeyBpbmRleCB9OworICAgIHN0b3JlMzIo
SW1tMzIoY29uc3RhbnQucGF5bG9hZCgpKSwgcGF5bG9hZEZvcih0YXJnZXQsIGJhc2UpKTsKKyAg
ICBzdG9yZTMyKEltbTMyKGNvbnN0YW50LnRhZygpKSwgdGFnRm9yKHRhcmdldCwgYmFzZSkpOwog
fQogCi1pbmxpbmUgdm9pZCBKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFs
UmVnaXN0ZXIgcmVnKQoraW5saW5lIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoaW50IHZpcnR1YWxSZWdpc3RlckluZGV4KQogewogICAgIGlmICghbV9jb2RlQmxvY2stPmlz
S25vd25Ob3RJbW1lZGlhdGUodmlydHVhbFJlZ2lzdGVySW5kZXgpKSB7Ci0gICAgICAgIGlmIChy
ZWcuaXNDb25zdGFudCgpKQorICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdp
c3RlckluZGV4KHZpcnR1YWxSZWdpc3RlckluZGV4KSkKICAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGVtaXRKdW1w
SWZOb3RKU0NlbGwocmVnKSk7CisgICAgICAgICAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90
SlNDZWxsKHZpcnR1YWxSZWdpc3RlckluZGV4KSk7CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBK
SVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBSZWdp
c3RlcklEIHRhZykKK2lubGluZSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCB0YWcpCiB7CiAgICAgaWYgKCFt
X2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZSh2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpIHsK
LSAgICAgICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpCisgICAgICAgIGlmIChtX2NvZGVCbG9jay0+
aXNDb25zdGFudFJlZ2lzdGVySW5kZXgodmlydHVhbFJlZ2lzdGVySW5kZXgpKQogICAgICAgICAg
ICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHRhZykpOwogICAgIH0KIH0KIAotQUxXQVlTX0lOTElORSBi
b29sIEpJVDo6aXNPcGVyYW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKK0FMV0FZ
U19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50SW50KGludCBzcmMpCiB7Ci0gICAg
cmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykuaXNJbnQz
MigpOworICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3Jj
KSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMyKCk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBW
aXJ0dWFsUmVnaXN0ZXIgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCkKK0FMV0FZU19J
TkxJTkUgYm9vbCBKSVQ6OmdldE9wZXJhbmRDb25zdGFudEludChpbnQgb3AxLCBpbnQgb3AyLCBp
bnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCkKIHsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bnQob3AxKSkgewogICAgICAgICBjb25zdGFudCA9IGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFz
SW50MzIoKTsKQEAgLTU1MywxMSArNTU1LDExIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKSVQ6Omdl
dE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0ZXIgb3AxLCBWaXJ0dWFsUmVnaXN0CiAj
ZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCiAvLyBnZXQgYXJnIHB1dHMgYW4gYXJnIGZyb20g
dGhlIFNGIHJlZ2lzdGVyIGFycmF5IGludG8gYSBoL3cgcmVnaXN0ZXIKLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVn
aXN0ZXJJRCBkc3QpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGludCBzcmMsIFJlZ2lzdGVySUQgZHN0KQogewogICAgIEFTU0VSVChtX2J5dGVjb2RlSW5k
ZXgpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xk
IHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBtX2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCi0gICAg
aWYgKHNyYy5pc0NvbnN0YW50KCkpIHsKKyAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRS
ZWdpc3RlckluZGV4KHNyYykpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChzcmMpOwogICAgICAgICBpZiAoIXZhbHVlLmlzTnVtYmVyKCkpCiAgICAg
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUpKSwgZHN0KTsK
QEAgLTU2OSwzMiArNTcxLDQ3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXJJRCBkCiAgICAgbG9hZDY0
KGFkZHJlc3NGb3Ioc3JjKSwgZHN0KTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBkc3Qp
CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMs
IEpTVmFsdWVSZWdzIGRzdCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgZHN0
LnBheWxvYWRHUFIoKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1
YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCitBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIFJlZ2lzdGVySUQg
ZHN0KQoreworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLm9mZnNldCgpLCBkc3QpOwor
fQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnQg
c3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBpbnQgc3JjMiwgUmVnaXN0ZXJJRCBkc3QyKQogewogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgZHN0MSk7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihzcmMyLCBkc3QyKTsKIH0KIAotQUxXQVlTX0lOTElORSBib29sIEpJVDo6aXNPcGVy
YW5kQ29uc3RhbnRJbnQoVmlydHVhbFJlZ2lzdGVyIHNyYykKK0FMV0FZU19JTkxJTkUgdm9pZCBK
SVQ6OmVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3Rl
cklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBzcmMyLCBSZWdpc3RlcklEIGRzdDIpCit7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMS5vZmZzZXQoKSwgZHN0MSwgc3JjMi5vZmZzZXQo
KSwgZHN0Mik7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKSVQ6OmlzT3BlcmFuZENvbnN0YW50
SW50KGludCBzcmMpCiB7Ci0gICAgcmV0dXJuIHNyYy5pc0NvbnN0YW50KCkgJiYgZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykuaXNJbnQzMigpOworICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25z
dGFudFJlZ2lzdGVySW5kZXgoc3JjKSAmJiBnZXRDb25zdGFudE9wZXJhbmQoc3JjKS5pc0ludDMy
KCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyIGRzdCwgUmVnaXN0ZXJJRCBmcm9tKQorQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBSZWdpc3RlcklEIGZyb20pCiB7
CiAgICAgc3RvcmU2NChmcm9tLCBhZGRyZXNzRm9yKGRzdCkpOwogfQogCi1BTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpT
VmFsdWVSZWdzIGZyb20pCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGludCBkc3QsIEpTVmFsdWVSZWdzIGZyb20pCiB7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIGZyb20ucGF5bG9hZEdQUigpKTsKIH0KIAorQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdpc3Rl
cklEIGZyb20pCit7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qub2Zmc2V0KCksIGZy
b20pOworfQorCiBBTFdBWVNfSU5MSU5FIEpJVDo6SnVtcCBKSVQ6OmVtaXRKdW1wSWZCb3RoSlND
ZWxscyhSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVySUQgcmVnMiwgUmVnaXN0ZXJJRCBzY3JhdGNo
KQogewogICAgIG1vdmUocmVnMSwgc2NyYXRjaCk7CkBAIC02MTIsMjggKzYyOSwyOCBAQCBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJ
RCByZWcpCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZykpOwogfQogCi1BTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0ZXJJ
RCByZWcsIFZpcnR1YWxSZWdpc3RlciB2UmVnKQorQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQgcmVnLCBpbnQgdlJlZykKIHsKICAg
ICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKHZSZWcpKQogICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjpl
bWl0TG9hZERvdWJsZShWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBGUFJlZ2lzdGVySUQgdmFsdWUpCitp
bmxpbmUgdm9pZCBKSVQ6OmVtaXRMb2FkRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZh
bHVlKQogewotICAgIGlmIChyZWcuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3Rl
cihyZWcpOworICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoaW5k
ZXgpKSB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgaW5Db25zdGFudFBvb2wgPSBt
X2NvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihpbmRleCk7CiAgICAgICAgIGxvYWREb3VibGUo
VHJ1c3RlZEltbVB0cigmaW5Db25zdGFudFBvb2wpLCB2YWx1ZSk7CiAgICAgfSBlbHNlCi0gICAg
ICAgIGxvYWREb3VibGUoYWRkcmVzc0ZvcihyZWcpLCB2YWx1ZSk7CisgICAgICAgIGxvYWREb3Vi
bGUoYWRkcmVzc0ZvcihpbmRleCksIHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgSklUOjplbWl0
TG9hZEludDMyVG9Eb3VibGUoVmlydHVhbFJlZ2lzdGVyIHJlZywgRlBSZWdpc3RlcklEIHZhbHVl
KQoraW5saW5lIHZvaWQgSklUOjplbWl0TG9hZEludDMyVG9Eb3VibGUoaW50IGluZGV4LCBGUFJl
Z2lzdGVySUQgdmFsdWUpCiB7Ci0gICAgaWYgKHJlZy5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAg
QVNTRVJUKGlzT3BlcmFuZENvbnN0YW50SW50KHJlZykpOwotICAgICAgICBjb252ZXJ0SW50MzJU
b0RvdWJsZShJbW0zMihnZXRDb25zdGFudE9wZXJhbmQocmVnKS5hc0ludDMyKCkpLCB2YWx1ZSk7
CisgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkpIHsK
KyAgICAgICAgQVNTRVJUKGlzT3BlcmFuZENvbnN0YW50SW50KGluZGV4KSk7CisgICAgICAgIGNv
bnZlcnRJbnQzMlRvRG91YmxlKEltbTMyKGdldENvbnN0YW50T3BlcmFuZChpbmRleCkuYXNJbnQz
MigpKSwgdmFsdWUpOwogICAgIH0gZWxzZQotICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShh
ZGRyZXNzRm9yKHJlZyksIHZhbHVlKTsKKyAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUoYWRk
cmVzc0ZvcihpbmRleCksIHZhbHVlKTsKIH0KIAogQUxXQVlTX0lOTElORSBKSVQ6OlBhdGNoYWJs
ZUp1bXAgSklUOjplbWl0UGF0Y2hhYmxlSnVtcElmTm90SW50KFJlZ2lzdGVySUQgcmVnKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggOWM4MmJiNGRhMWJmMTI3
OWMzOTIwZWVlYWUyZTk5NzE4Y2YyMTYwZS4uYjMwMDEyNWM4ZDQxNWYzNDY1OGZlMzExMjI1Njg1
MWVkYzdmNmMxMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBA
IC01NiwxMCArNTYsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiB2b2lkIEpJVDo6ZW1pdF9vcF9tb3Yo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vdj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IGJ5dGVj
b2RlLm1fc3JjOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBp
bnQgc3JjID0gYnl0ZWNvZGUubV9zcmMub2Zmc2V0KCk7CiAKLSAgICBpZiAoc3JjLmlzQ29uc3Rh
bnQoKSkgeworICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3Jj
KSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KHNy
Yyk7CiAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIoKSkKICAgICAgICAgICAgIHN0b3JlNjQo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZSh2YWx1ZSkpLCBhZGRyZXNzRm9yKGRzdCkpOwpA
QCAtNzcsNyArNzcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEVuZD4oKTsKICAgICBSRUxFQVNFX0FTU0VSVChyZXR1cm5WYWx1ZUdQUiAh
PSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
eXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7
CkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBlbWl0QWxsb2NhdGVKU09i
amVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2Nh
dG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywg
c2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJl
Zywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgYWRkU2xvd0Nhc2Uoc2xv
d0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCkp
OwogICAgIH0KIH0KIApAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9u
ZXdfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
CiAKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVj
dD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
bWV0YWRhdGEubV9vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgVHJ1c3RlZEltbVB0cigmdm0oKSksIHN0cnVj
dHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKQEAgLTEyOSw5
ICsxMjksOSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8Uwogdm9pZCBKSVQ6OmVtaXRfb3Bfb3Zl
cnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJp
ZGVzSGFzSW5zdGFuY2U+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3Ry
dWN0b3I7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5t
X2hhc0luc3RhbmNlVmFsdWU7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OworICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3Iub2Zmc2V0KCk7
CisgICAgaW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0luc3RhbmNlVmFsdWUu
b2Zmc2V0KCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGhhc0luc3RhbmNlVmFsdWUs
IHJlZ1QwKTsKIApAQCAtMTU1LDkgKzE1NSw5IEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRl
c19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZv
aWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEluc3RhbmNlb2Y+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGU7CisgICAgaW50IGRzdCA9
IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWUub2Zmc2V0KCk7CisgICAgaW50IHByb3RvID0gYnl0ZWNvZGUubV9wcm90b3R5cGUub2Zmc2V0
KCk7CiAKICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8sIGFuZCB2YWx1
ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgogICAgIC8vIFdlIHVzZSByZWdUMCBmb3Ig
YmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2Fu
IHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgpAQCAtMTg2LDcgKzE4Niw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAKICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpbnQg
cmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwogICAgIAogICAgIEpJVEluc3Rh
bmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107
CiAgICAgCkBAIC0yMDQsOCArMjA0LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9j
dXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5
dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7
CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNldCgpOwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIGNvbXBhcmU2NChFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsK
QEAgLTIxNyw4ICsyMTcsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZp
bmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZD4oKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2Rz
dC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7
CiAgICAgCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIEp1
bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKQEAgLTI0Niw4ICsyNDYsOCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZF9vcl9udWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVl
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAKQEAgLTI2MSw4ICsyNjEs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNCb29sZWFuPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUg
PSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKICAgICAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CiAgICAgeG9yNjQoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OlZhbHVlRmFsc2UpLCByZWdUMCk7CkBAIC0yNzQsOCArMjc0LDgg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BJc051bWJlcj4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQg
dmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAgICAgCiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwg
bnVtYmVyVGFnUmVnaXN0ZXIsIHJlZ1QwKTsKQEAgLTI4Niw4ICsyODYsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV9v
cGVyYW5kOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQg
dmFsdWUgPSBieXRlY29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAgICAgaW50IHR5cGUgPSBieXRl
Y29kZS5tX3R5cGU7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CkBAIC0zMDcsOCArMzA3LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29w
X2lzX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNPYmplY3Q+KCk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUubV9vcGVyYW5kLm9mZnNl
dCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIEp1
bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKQEAgLTMzMiw3ICszMzIsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIAogICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXguCiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BSZXQ+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQ
Uik7CiAKICAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIGVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKQEAgLTM0Myw4ICszNDMsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29w
X3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1
YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3NyYzsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fc3JjLm9mZnNldCgpOwog
CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKICAgICAKQEAgLTM2MCwx
NSArMzYwLDE1IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9u
X25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNldEZ1bmN0aW9uTmFtZT4oKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZnVuY3Rpb24sIHJlZ1QwKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fbmFtZSwgcmVnVDEpOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9mdW5jdGlvbi5vZmZzZXQoKSwgcmVn
VDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uYW1lLm9mZnNldCgp
LCByZWdUMSk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsK
IH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOb3Q+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX29wZXJhbmQs
IHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fb3BlcmFuZC5v
ZmZzZXQoKSwgcmVnVDApOwogCiAgICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7
IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxs
IGJlCiAgICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAw
IG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCkBAIC0zNzcsNyAr
Mzc3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCByZWdU
MCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKICAgICB4b3I2NChU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VmFsdWVUcnVlKSwgcmVnVDApOwogCi0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pmYWxz
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMzkwLDE0ICszOTAs
MTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgR1BSUmVnIHNjcmF0Y2gyID0gcmVnVDI7CiAgICAgYm9vbCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOwogCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbiwgdmFsdWUpOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9jb25kaXRpb24ub2Zmc2V0KCksIHZhbHVlKTsKICAgICBh
ZGRKdW1wKGJyYW5jaElmRmFsc2V5KHZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgc2NyYXRjaDEs
IHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXFO
dWxsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSBieXRlY29kZS5tX3ZhbHVlOworICAg
IGludCBzcmMgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwogICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVs
KTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CkBAIC00MjEsNyAr
NDIxLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNy
YyA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zm
c2V0KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmMsIHJlZ1QwKTsKQEAgLTQ0NSw3ICs0NDUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVx
X251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjpl
bWl0X29wX2p1bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SnVuZGVmaW5lZE9yTnVsbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CiAg
ICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVj
b2RlLm1fdGFyZ2V0TGFiZWwpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwpAQCAtNDU3LDcgKzQ1Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX2p1bmRlZmluZWRf
b3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6
OmVtaXRfb3Bfam51bmRlZmluZWRfb3JfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSm51bmRlZmluZWRPck51bGw+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0
ZWNvZGUubV92YWx1ZTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgp
OwogICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5tX3RhcmdldExhYmVsKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKQEAgLTQ3MCw4ICs0NzAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0
cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjID0gYnl0ZWNvZGUubV92YWx1ZTsKLSAgICBKU1ZhbHVlIHNwZWNpYWxQb2ludGVy
ID0gZ2V0Q29uc3RhbnRPcGVyYW5kKGJ5dGVjb2RlLm1fc3BlY2lhbFBvaW50ZXIpOworICAgIGlu
dCBzcmMgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOworICAgIEpTVmFsdWUgc3BlY2lhbFBv
aW50ZXIgPSBnZXRDb25zdGFudE9wZXJhbmQoYnl0ZWNvZGUubV9zcGVjaWFsUG9pbnRlci5vZmZz
ZXQoKSk7CiAgICAgQVNTRVJUKHNwZWNpYWxQb2ludGVyLmlzQ2VsbCgpKTsKICAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUubV90YXJn
ZXRMYWJlbCk7CiAgICAgCkBAIC00ODUsMTggKzQ4NSwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9q
bmVxX3B0cihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6
OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9y
aHMsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocy5v
ZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7CiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGNvbXBhcmUz
MihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CiAgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fZHN0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKZXE+KCk7CiAgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFyZ2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhieXRlY29kZS5tX2xocy5vZmZzZXQoKSwgcmVn
VDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpLCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwogICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1
YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CiB9CkBAIC01MTAsMjYgKzUxMCwyNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9qdHJ1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIEdQUlJlZyBzY3JhdGNoMSA9IHJlZ1QxOwogICAgIEdQUlJlZyBzY3JhdGNoMiA9IHJl
Z1QyOwogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fY29uZGl0aW9uLCB2YWx1ZSk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2NvbmRpdGlvbi5vZmZzZXQo
KSwgdmFsdWUpOwogICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkodm0oKSwgSlNWYWx1ZVJlZ3Mo
dmFsdWUpLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNr
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFy
Z2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BOZXE+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYnl0ZWNvZGUubV9s
aHMsIHJlZ1QwLCBieXRlY29kZS5tX3JocywgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLm9mZnNldCgpLCByZWdUMCwgYnl0ZWNvZGUubV9yaHMub2Zm
c2V0KCksIHJlZ1QxKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDAsIHJlZ1Qx
LCByZWdUMik7CiAgICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsK
ICAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwogCi0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CiAgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1fdGFy
Z2V0TGFiZWwpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJ5dGVjb2RlLm1fbGhzLCBy
ZWdUMCwgYnl0ZWNvZGUubV9yaHMsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhieXRlY29kZS5tX2xocy5vZmZzZXQoKSwgcmVnVDAsIGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgp
LCByZWdUMSk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVn
VDIpOwogICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdl
dCk7CiB9CkBAIC01MzksNyArNTM5LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRocm93PigpOwogICAgIEFTU0VSVChyZWdUMCA9PSByZXR1
cm5WYWx1ZUdQUik7CiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNC
dWZmZXIodm0oKS50b3BFbnRyeUZyYW1lKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5
dGVjb2RlLm1fdmFsdWUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVj
b2RlLm1fdmFsdWUub2Zmc2V0KCksIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRp
b25DaGVjayhvcGVyYXRpb25UaHJvdywgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCByZWdUMCk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcih2bSgpKTsKIH0K
QEAgLTU0OCw5ICs1NDgsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KIHZvaWQgSklUOjpjb21w
aWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBDb21w
aWxlT3BTdHJpY3RFcVR5cGUgdHlwZSkKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNyYzEgPSBieXRlY29kZS5tX2xoczsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzOworICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzLm9mZnNl
dCgpOworICAgIGludCBzcmMyID0gYnl0ZWNvZGUubV9yaHMub2Zmc2V0KCk7CiAKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOwogICAgIApAQCAt
NTkyLDggKzU5Miw4IEBAIHZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CiAgICAgaW50IHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5tX3RhcmdldExhYmVsKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fbGhzOwotICAgIFZpcnR1YWxSZWdp
c3RlciBzcmMyID0gYnl0ZWNvZGUubV9yaHM7CisgICAgaW50IHNyYzEgPSBieXRlY29kZS5tX2xo
cy5vZmZzZXQoKTsKKyAgICBpbnQgc3JjMiA9IGJ5dGVjb2RlLm1fcmhzLm9mZnNldCgpOwogCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKIApA
QCAtNjUwLDggKzY1MCw4IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiB2b2lkIEpJVDo6ZW1p
dF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
ICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVtYmVyPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaW50IGRzdFZS
ZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2Rl
Lm1fb3BlcmFuZC5vZmZzZXQoKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcs
IHJlZ1QwKTsKICAgICAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkp
OwpAQCAtNjY0LDggKzY2NCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVt
ZXJpYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1lcmljPigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciBkc3RWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaW50IGRzdFZSZWcgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFu
ZC5vZmZzZXQoKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsK
IAogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKQEAgLTY4NCwy
MCArNjg0LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251bWVyaWMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9TdHJpbmc+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHNyY1ZSZWcgPSBieXRlY29kZS5tX29wZXJhbmQ7CisgICAgaW50IHNyY1ZSZWcgPSBieXRl
Y29kZS5tX29wZXJhbmQub2Zmc2V0KCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNW
UmVnLCByZWdUMCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsK
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwogCi0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3Rv
X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGRzdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3JjVlJlZyA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpbnQgZHN0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBzcmNWUmVnID0gYnl0ZWNvZGUubV9vcGVy
YW5kLm9mZnNldCgpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDAp
OwogCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CkBAIC03MjgsMTAg
KzcyOCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVnVDMpOwog
ICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpLCByZWdUMCk7
CiAgICAgc3RvcmU2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBB
ZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZXhjZXB0aW9uKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGJ5dGVjb2RlLm1fZXhjZXB0aW9uLm9mZnNldCgpKTsKIAogICAgIGxvYWQ2NChBZGRyZXNz
KHJlZ1QwLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Rocm93blZhbHVlKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdGhyb3duVmFsdWUub2Zmc2V0KCkpOwogCiAjaWYgRU5BQkxF
KERGR19KSVQpCiAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGlubGluZSBjYWNoaW5nIHRoZSBwcm9j
ZXNzIG9mIGRvaW5nIE9TUiBlbnRyeSwgaW5jbHVkaW5nCkBAIC03MzksNyArNzM5LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4
CiAKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsK
LSAgICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFk
YXRhLm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9
IG1ldGFkYXRhLm1fYnVmZmVyOwogICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxp
bmcoKSkKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gs
ICZ2bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGVsc2UKQEAgLTc0OSw3ICs3
NDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIEV4Y2VwdGlvbkhhbmRs
ZXJQdHJUYWcpOwogICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOwogICAgIGlmIChidWZmZXIg
JiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0g
KFZhbHVlUHJvZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgICAgICBidWZm
ZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CiAgICAg
ICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJlZ3MpOwogICAgICAgICAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGUmPihwcm9maWxlKSk7CkBA
IC03NjYsMTAgKzc2NiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pZGVudGl0eV93aXRoX3Byb2Zp
bGUoY29uc3QgSW5zdHJ1Y3Rpb24qKQogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29w
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50U2NvcGU+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGU7CisgICAgaW50
IGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CiAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50U2NvcGUsIHJlZ1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNl
bGwoYnl0ZWNvZGUubV9kc3QsIHJlZ1QwKTsKKyAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1f
ZHN0Lm9mZnNldCgpLCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0o
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTc3Nyw3ICs3NzcsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BTd2l0Y2hJbW0+KCk7CiAgICAgc2l6ZV90IHRhYmxlSW5kZXggPSBieXRlY29kZS5tX3RhYmxl
SW5kZXg7CiAgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS5tX2RlZmF1bHRPZmZzZXQpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKKyAgICB1bnNpZ25lZCBzY3J1dGlu
ZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZS5vZmZzZXQoKTsKIAogICAgIC8vIGNyZWF0ZSBqdW1w
IHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1l
bnQuCiAgICAgU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN3aXRj
aEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKQEAgLTc5NCw3ICs3OTQsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9zd2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoQ2hhcj4o
KTsKICAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKICAgICB1
bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLm1fZGVmYXVsdE9mZnNldCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9
IGJ5dGVjb2RlLm1fc2NydXRpbmVlOworICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2Rl
Lm1fc2NydXRpbmVlLm9mZnNldCgpOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3
aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTaW1w
bGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOwpAQCAtODExLDcgKzgxMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9z
dHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3aXRjaFN0cmluZz4oKTsKICAgICBz
aXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLm1fdGFibGVJbmRleDsKICAgICB1bnNpZ25lZCBk
ZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLm1f
ZGVmYXVsdE9mZnNldCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5lZSA9IGJ5dGVjb2Rl
Lm1fc2NydXRpbmVlOworICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVjb2RlLm1fc2NydXRp
bmVlLm9mZnNldCgpOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0
aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KICAgICBTdHJpbmdKdW1wVGFi
bGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpOwpAQCAtODM0LDggKzgzNCw4IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9u
dWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBzcmMx
ID0gYnl0ZWNvZGUubV9vcGVyYW5kOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKKyAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZC5vZmZzZXQoKTsKIAogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwogICAgIEp1bXAgaXNJbW1lZGlh
dGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwpAQCAtODY3LDggKzg2Nyw4IEBAIHZvaWQgSklU
OjplbWl0X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BOZXFOdWxsPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjMSA9IGJ5dGVjb2RlLm1fb3BlcmFuZDsKKyAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYzEgPSBieXRlY29kZS5t
X29wZXJhbmQub2Zmc2V0KCk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJl
Z1QwKTsKICAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKQEAg
LTkwMyw3ICs5MDMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlv
biopCiAgICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgog
ICAgIHNpemVfdCBjb3VudCA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7CiAgICAgZm9yIChzaXpl
X3QgaiA9IENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJl
Z2lzdGVycygpOyBqIDwgY291bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0
dWFsUmVnaXN0ZXJGb3JMb2NhbChqKSk7CisgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwoaikub2Zmc2V0KCkpOwogCiAgICAgZW1pdFdyaXRlQmFycmllciht
X2NvZGVCbG9jayk7CiAKQEAgLTkxMyw3ICs5MTMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnRl
cihjb25zdCBJbnN0cnVjdGlvbiopCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7CiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlLCByZWdUMCk7CiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpv
ZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVn
VDApOwpAQCAtOTI0LDcgKzkyNCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBTdHJ1Y3R1cmVJRCogY2FjaGVkU3Ry
dWN0dXJlSUQgPSAmbWV0YWRhdGEubV9jYWNoZWRTdHJ1Y3R1cmVJRDsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc3JjRHN0LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3NyY0RzdC5vZmZzZXQoKSwgcmVnVDEpOwogCiAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxKTsKIApAQCAtOTM3LDcgKzkzNyw3IEBAIHZv
aWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BDcmVhdGVUaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBjYWxsZWUgPSBieXRlY29kZS5tX2Nh
bGxlZTsKKyAgICBpbnQgY2FsbGVlID0gYnl0ZWNvZGUubV9jYWxsZWUub2Zmc2V0KCk7CiAgICAg
V3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5tX2Nh
Y2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwogICAgIFJlZ2lz
dGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKQEAgLTk2NSwxMyArOTY1LDEzIEBAIHZvaWQgSklU
OjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgbG9hZDgoQWRkcmVzcyhzdHJ1Y3R1cmVSZWcsIFN0cnVjdHVyZTo6aW5saW5lQ2Fw
YWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3Rv
cmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdC5vZmZzZXQoKSk7CiB9CiAKIHZvaWQgSklU
OjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hlY2tU
ZHo+KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3RhcmdldFZpcnR1
YWxSZWdpc3RlciwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV90YXJnZXRWaXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCksIHJlZ1QwKTsKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiB9CiAKQEAgLTk4NSw3ICs5ODUsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRQogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRXE+KCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKICAg
ICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BS
IH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZh
bHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpLCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKQEAgLTk5Niw3ICs5OTYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSk7CiAgICAgeG9yMzIo
VHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKICAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BS
LCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpLCByZXR1cm5WYWx1ZUdQUik7CiB9CiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTEwMjQs
MTAgKzEwMjQsMTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFYKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJbnN0YW5jZW9mQ3VzdG9tPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwot
ICAgIFZpcnR1YWxSZWdpc3RlciBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLm1fY29uc3RydWN0b3I7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5tX2hhc0lu
c3RhbmNlVmFsdWU7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAg
IGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CisgICAgaW50IGNvbnN0cnVj
dG9yID0gYnl0ZWNvZGUubV9jb25zdHJ1Y3Rvci5vZmZzZXQoKTsKKyAgICBpbnQgaGFzSW5zdGFu
Y2VWYWx1ZSA9IGJ5dGVjb2RlLm1faGFzSW5zdGFuY2VWYWx1ZS5vZmZzZXQoKTsKIAogICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMSk7CkBAIC0xMTA0LDggKzExMDQsOCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3JlZ2V4cChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3UmVnZXhwPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnZXhwID0gYnl0ZWNv
ZGUubV9yZWdleHA7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAg
IGludCByZWdleHAgPSBieXRlY29kZS5tX3JlZ2V4cC5vZmZzZXQoKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld1JlZ2V4cCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCkpLCBqc0Nhc3Q8UmVnRXhwKj4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KHJlZ2V4
cCkpKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQpAQCAtMTEx
NSwxMiArMTExNSwxMiBAQCB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBKdW1wIGxhenlKdW1wOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9k
c3Qub2Zmc2V0KCk7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKSwgcmVnVDApOwogI2Vsc2UKLSAgICBlbWl0TG9h
ZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChi
eXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMCk7CiAjZW5kaWYKICAgICBGdW5jdGlvbkV4
ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2RlQmxvY2stPmZ1bmN0aW9uRGVjbChieXRlY29kZS5t
X2Z1bmN0aW9uRGVjbCk7CiAKQEAgLTExNjEsMTEgKzExNjEsMTEgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgT3A+CiB2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3A+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKICNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZSwgcmVn
VDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQo
KSwgcmVnVDApOwogI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUubV9zY29wZSwg
cmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCBy
ZWdUMCk7CiAjZW5kaWYKIAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2Nv
ZGVCbG9jay0+ZnVuY3Rpb25FeHByKGJ5dGVjb2RlLm1fZnVuY3Rpb25EZWNsKTsKQEAgLTEyMDcs
MTAgKzEyMDcsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheT4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlc1N0YXJ0ID0gYnl0ZWNvZGUu
bV9hcmd2OworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQg
dmFsdWVzSW5kZXggPSBieXRlY29kZS5tX2FyZ3Yub2Zmc2V0KCk7CiAgICAgaW50IHNpemUgPSBi
eXRlY29kZS5tX2FyZ2M7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNTdGFydC5vZmZz
ZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOworICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzSW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Fy
cmF5V2l0aFByb2ZpbGUsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLAogICAgICAgICAmbWV0YWRhdGEubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdU
MCwgc2l6ZSk7CiB9CkBAIC0xMjE5LDggKzEyMTksOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdBcnJheVdp
dGhTaXplPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgc2l6ZUluZGV4ID0gYnl0ZWNvZGUubV9sZW5ndGg7CisgICAgaW50IGRz
dCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAgIGludCBzaXplSW5kZXggPSBieXRlY29k
ZS5tX2xlbmd0aC5vZmZzZXQoKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2l6ZUluZGV4LCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksCkBAIC0xMjM2LDkgKzEyMzYsOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBi
eXRlY29kZS5tX2VudW1lcmF0b3I7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGludCBl
bnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yLm9mZnNldCgpOwogCiAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCByZWdUMSk7CkBAIC0xMjgyLDkgKzEyODIsOSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SGFzSW5kZXhlZFByb3BlcnR5PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OworICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5Lm9m
ZnNldCgpOwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJv
ZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbElu
Zm8oKTsKICAgICAKQEAgLTEzMzAsOSArMTMzMCw5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9o
YXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29k
ZS5tX3Byb3BlcnR5OworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAg
ICBpbnQgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5Lm9mZnNldCgpOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZv
ID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJ
bmZvOwogCiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwpAQCAtMTM0OSwxMCArMTM0OSwx
MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbgogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVj
dF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRl
eCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBi
eXRlY29kZS5tX2VudW1lcmF0b3I7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNl
dCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGludCBp
bmRleCA9IGJ5dGVjb2RlLm1faW5kZXgub2Zmc2V0KCk7CisgICAgaW50IGVudW1lcmF0b3IgPSBi
eXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7CiAKICAgICAvLyBDaGVjayB0aGF0IGJhc2Ug
aXMgYSBjZWxsCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC0x
MzkwLDkgKzEzOTAsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVt
ZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51
bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1f
ZW51bWVyYXRvcjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4
OworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgZW51bWVy
YXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvci5vZmZzZXQoKTsKKyAgICBpbnQgaW5kZXggPSBi
eXRlY29kZS5tX2luZGV4Lm9mZnNldCgpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bmRleCwgcmVnVDApOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVn
VDEpOwpAQCAtMTQxNCw5ICsxNDE0LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9z
dHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGkKIHZvaWQg
SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3Ig
PSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0
ZWNvZGUubV9pbmRleDsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7Cisg
ICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3Iub2Zmc2V0KCk7CisgICAg
aW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleC5vZmZzZXQoKTsKIAogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVu
dW1lcmF0b3IsIHJlZ1QxKTsKQEAgLTE0NDAsNyArMTQ0MCw3IEBAIHZvaWQgSklUOjplbWl0X29w
X3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7
CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAg
ICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRhZGF0YS5tX3R5cGVMb2Nh
dGlvbjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5tX3Rh
cmdldFZpcnR1YWxSZWdpc3RlcjsKKyAgICBpbnQgdmFsdWVUb1Byb2ZpbGUgPSBieXRlY29kZS5t
X3RhcmdldFZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKIApAQCAtMTUwOSw3ICsxNTA5LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3QKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIw
OyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVnIHNj
cmF0Y2gyUmVnID0gcmVnVDI7CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBz
aGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLCByZWdUMyk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpLCByZWdUMyk7CiAgICAgbG9nU2hh
ZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHJl
Z1QzKTsKIH0KIApAQCAtMTUyMyw4ICsxNTIzLDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3No
YWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBu
b24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CiAg
ICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCh2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0
Y2gxUmVnLCBzY3JhdGNoMlJlZyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29k
ZS5tX3RoaXNWYWx1ZSwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV9zY29wZSwgcmVnVDMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV90aGlzVmFsdWUub2Zmc2V0KCksIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCksIHJlZ1QzKTsKICAgICBsb2dTaGFkb3dDaGlja2Vu
VGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdzKHJlZ1QyKSwgcmVnVDMsIG1f
Y29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCkpOwogfQogCkBAIC0xNTQ1
LDcgKzE1NDUsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX2NvbnRyb2xfZmxvdyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogdm9pZCBKSVQ6OmVtaXRfb3BfYXJn
dW1lbnRfY291bnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEFyZ3VtZW50Q291bnQ+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGludCBk
c3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKICAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyksIHJlZ1QwKTsKICAgICBzdWIz
MihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1Zh
bHVlUmVnczo6d2l0aFR3b0F2YWlsYWJsZVJlZ3MocmVnVDAsIHJlZ1QxKTsKQEAgLTE1NTYsNyAr
MTU1Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5n
dGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFJlc3RMZW5ndGg+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIGludCBkc3QgPSBieXRl
Y29kZS5tX2RzdC5vZmZzZXQoKTsKICAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBieXRl
Y29kZS5tX251bVBhcmFtZXRlcnNUb1NraXA7CiAgICAgbG9hZDMyKHBheWxvYWRGb3IoQ2FsbEZy
YW1lU2xvdDo6YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpLCByZWdUMCk7CiAgICAgc3ViMzIo
VHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CkBAIC0xNTg2LDcgKzE1ODYsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHZvaWQgSklUOjplbWl0X29wX2dldF9hcmd1bWVudChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wR2V0QXJndW1lbnQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKICAg
ICBpbnQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7CkBAIC0xNTk2LDcgKzE1OTYsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIAogICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKSwgcmVnVDIpOwogICAgIEp1bXAgYXJndW1lbnRPdXRPZkJvdW5k
cyA9IGJyYW5jaDMyKExlc3NUaGFuT3JFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihpbmRleCkp
OwotICAgIGxvYWRWYWx1ZShhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWVTbG90
Ojp0aGlzQXJndW1lbnQgKyBpbmRleCkpLCByZXN1bHRSZWdzKTsKKyAgICBsb2FkVmFsdWUoYWRk
cmVzc0ZvcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCksIHJlc3VsdFJlZ3Mp
OwogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGlu
ayh0aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
czMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cAppbmRleCAxOTEwNDU0YzM4OTU5ZDE5NTkyNGM0ZTU2NjNmZTA5YzZkNTU0YTQwLi5kYWU4YTc4
NzM2MmU5MDk3Zjk4N2FiMDY3MTEzZmM4Mzg0YzliN2ZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCkBAIC05MzMsNyArOTMzLDcgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAg
ICBWYWx1ZVByb2ZpbGVBbmRWaXJ0dWFsUmVnaXN0ZXJCdWZmZXIqIGJ1ZmZlciA9IG1ldGFkYXRh
Lm1fYnVmZmVyOworICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IG1l
dGFkYXRhLm1fYnVmZmVyOwogICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmco
KSkKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsICZ2
bSgpLCBtX2J5dGVjb2RlSW5kZXguYXNCaXRzKCkpOwogICAgIGVsc2UKQEAgLTk0Myw3ICs5NDMs
NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIGZhckp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKICAgICBz
a2lwT1NSRW50cnkubGluayh0aGlzKTsKICAgICBpZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQcm9m
aWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRW
aXJ0dWFsUmVnaXN0ZXImIHByb2ZpbGUpIHsKKyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAo
VmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgewogICAgICAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVncyhyZWdUMSwgcmVnVDApOwogICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7CiAgICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZSY+KHByb2ZpbGUpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IDZmZjg4MDIxMTM4MmU5NjBi
ZDcyMWFjZDM4NTA5ZThjMjg1NjA2NTYuLjA4MmE3ODMwODRkMmZjNWEwNzM2YjFlNmI3MWE4YTA2
ZDMwMzZmN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cApAQCAtMTY1NSwxOCArMTY1NSwxOCBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElP
TiBvcGVyYXRpb25PcHRpbWl6ZShWTSogdm1Qb2ludGVyLCB1aW50MzJfdCBieXRlYwogICAgICAg
ICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6dmVyYm9zZU9TUigpKSkKICAgICAgICAgICAgIGRhdGFM
b2coIlRyaWdnZXJpbmcgb3B0aW1pemVkIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICJc
biIpOwogCi0gICAgICAgIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzID0gMDsKKyAgICAgICAg
dW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXM7CiAgICAgICAgIGlmIChieXRlY29kZUluZGV4KQog
ICAgICAgICAgICAgbnVtVmFyc1dpdGhWYWx1ZXMgPSBjb2RlQmxvY2stPm51bUNhbGxlZUxvY2Fs
cygpOwotCi0gICAgICAgIE9wZXJhbmRzPE9wdGlvbmFsPEpTVmFsdWU+PiBtdXN0SGFuZGxlVmFs
dWVzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJzV2l0aFZhbHVlcywgMCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0gMDsKKyAgICAgICAg
T3BlcmFuZHM8T3B0aW9uYWw8SlNWYWx1ZT4+IG11c3RIYW5kbGVWYWx1ZXMoY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCksIG51bVZhcnNXaXRoVmFsdWVzKTsKICAgICAgICAgaW50IGxvY2Fsc1Vz
ZWRGb3JDYWxsZWVTYXZlcyA9IHN0YXRpY19jYXN0PGludD4oQ29kZUJsb2NrOjpsbGludEJhc2Vs
aW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpOwogICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgIE9wZXJhbmQgb3BlcmFuZCA9IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkp
OwotCi0gICAgICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYgb3BlcmFuZC50b0xvY2Fs
KCkgPCBsb2NhbHNVc2VkRm9yQ2FsbGVlU2F2ZXMpCisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9
IG11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAgICAgaWYgKG9w
ZXJhbmRJc0xvY2FsKG9wZXJhbmQpICYmIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2Fs
KCkgPCBsb2NhbHNVc2VkRm9yQ2FsbGVlU2F2ZXMpCiAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzW2ldID0gY2FsbEZyYW1lLT51bmNoZWNrZWRS
KG9wZXJhbmQudmlydHVhbFJlZ2lzdGVyKCkpLmpzVmFsdWUoKTsKKyAgICAgICAgICAgIG11c3RI
YW5kbGVWYWx1ZXNbaV0gPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgp
OwogICAgICAgICB9CiAKICAgICAgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudENvZGVCbG9jayA9
IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsKQEAgLTE3ODQsNyArMTc4NCw3IEBAIGNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxl
KFZNKiB2bVBvaW50ZXIsIHVpCiAgICAgY29kZUJsb2NrLT5lbnN1cmVDYXRjaExpdmVuZXNzSXND
b21wdXRlZEZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCk7CiAgICAgYXV0byBieXRlY29k
ZSA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnl0ZWNvZGVJbmRleCktPmFzPE9wQ2F0
Y2g+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2sp
OwotICAgIG1ldGFkYXRhLm1fYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kVmly
dHVhbFJlZ2lzdGVyJiBwcm9maWxlKSB7CisgICAgbWV0YWRhdGEubV9idWZmZXItPmZvckVhY2go
WyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7CiAgICAgICAgIHByb2ZpbGUu
bV9idWNrZXRzWzBdID0gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dW5jaGVja2VkUihwcm9m
aWxlLm1fb3BlcmFuZCkuanNWYWx1ZSgpKTsKICAgICB9KTsKIApAQCAtMTkwOCw4ICsxOTA4LDgg
QEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblBvcFNjb3BlKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGludDMyX3Qgc2NvcGUKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERF
Q0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCi0gICAgYXV0byYgc2NvcGVTbG90ID0gY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihzY29wZVJlZykpOwotICAgIHNjb3Bl
U2xvdCA9IHNjb3BlU2xvdC5SZWdpc3Rlcjo6c2NvcGUoKS0+bmV4dCgpOworICAgIEpTU2NvcGUq
IHNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3BlUmVnKS5SZWdpc3Rlcjo6c2NvcGUo
KTsKKyAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc2NvcGVSZWcpID0gc2NvcGUtPm5leHQoKTsK
IH0KIAogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20oSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBK
U09iamVjdCogY29uc3RydWN0b3IsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRIYXNJbnN0YW5jZSkK
QEAgLTI0MTcsNyArMjQxNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uR2V0RnJvbVNjb3BlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAKICAgICBhdXRv
IGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKLSAgICBK
U09iamVjdCogc2NvcGUgPSBqc0Nhc3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
Ynl0ZWNvZGUubV9zY29wZSkuanNWYWx1ZSgpKTsKKyAgICBKU09iamVjdCogc2NvcGUgPSBqc0Nh
c3Q8SlNPYmplY3QqPihjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZz
ZXQoKSkuanNWYWx1ZSgpKTsKICAgICBHZXRQdXRJbmZvJiBnZXRQdXRJbmZvID0gYnl0ZWNvZGUu
bWV0YWRhdGEoY29kZUJsb2NrKS5tX2dldFB1dEluZm87CiAKICAgICAvLyBNb2R1bGVWYXIgaXMg
YWx3YXlzIGNvbnZlcnRlZCB0byBDbG9zdXJlVmFyIGZvciBnZXRfZnJvbV9zY29wZS4KQEAgLTI0
NjAsOCArMjQ2MCw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRUb1Njb3BlKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEluc3RyCiAgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwogCiAgICAgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV92YXIpOwotICAgIEpT
T2JqZWN0KiBzY29wZSA9IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkUihi
eXRlY29kZS5tX3Njb3BlKS5qc1ZhbHVlKCkpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsRnJh
bWUtPnIoYnl0ZWNvZGUubV92YWx1ZSkuanNWYWx1ZSgpOworICAgIEpTT2JqZWN0KiBzY29wZSA9
IGpzQ2FzdDxKU09iamVjdCo+KGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3Bl
Lm9mZnNldCgpKS5qc1ZhbHVlKCkpOworICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsRnJhbWUtPnIo
Ynl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKSkuanNWYWx1ZSgpOwogICAgIEdldFB1dEluZm8mIGdl
dFB1dEluZm8gPSBtZXRhZGF0YS5tX2dldFB1dEluZm87CiAKICAgICAvLyBNb2R1bGVWYXIgZG9l
cyBub3Qga2VlcCB0aGUgc2NvcGUgcmVnaXN0ZXIgdmFsdWUgYWxpdmUgaW4gREZHLgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCBhYmY1
MmY3MTNlOGFhMGFmYjVlODA1YzdjZjNmMWQzODgzNzFjMmY2Li5jNjU1ZGI4YmQyZDIxMjQwZTJj
YTg2YTkxYTk2MjE2MDQwODRlOTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAtNTcsOSArNTcsOSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsK
ICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50
IHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKICAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CiAKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFMKIHsKICAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7CiAgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7Ci0g
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICAgICAgaW50
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwogICAgICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICAgICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogCkBAIC0xMTcsOCArMTE3LDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CisgICAgaW50IGJh
c2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0
YWRhdGEubV9hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVC
bG9jay0+YWRkQnlWYWxJbmZvKCk7CiAKQEAgLTE3Nyw3ICsxNzcsNyBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZh
bChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGluZGV4
aW5nU2hhcGUpCiB7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsK
KyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlLm9mZnNldCgpOwogICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKICAgICAKICAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CkBAIC0yMDgsNyArMjA4LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBi
YWQKICAgICB9CiAgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6CiAgICAgICAgIHN0b3JlNjQocmVn
VDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgZW1pdFdy
aXRlQmFycmllcihieXRlY29kZS5tX2Jhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Cisg
ICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCB2YWx1ZSwg
U2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAg
ICBDUkFTSCgpOwpAQCAtMjM1LDcgKzIzNSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIE9wPgogSklU
OjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0
Y2hhYmxlSnVtcCYgYmFkVHlwZSkKIHsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29k
ZS5tX3ZhbHVlOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CiAg
ICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwogICAg
IAogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKQEAgLTI0OSw3ICsyNDksNyBAQCBKSVQ6Okp1bXBM
aXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVK
dW1wJiBiYWRUeXBlKQogICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwogICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKICAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5k
ZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
KSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2UsIHZhbHVlLCBTaG91bGRG
aWx0ZXJWYWx1ZSk7CisgICAgZW1pdFdyaXRlQmFycmllcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0
KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgSnVtcCBlbmQgPSBqdW1wKCk7CiAg
ICAgCiAgICAgZW1wdHkubGluayh0aGlzKTsKQEAgLTI3NCw4ICsyNzQsOCBAQCBKSVRQdXRCeUlk
R2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJ
bmZvLCBPcCBieXRlYwogICAgIC8vIHByb3BlcnR5OiByZWdUMQogICAgIC8vIHNjcmF0Y2g6IHJl
Z1QyCiAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIGludCBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFs
dWUub2Zmc2V0KCk7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdU
MSkpOwogICAgIGVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhieVZhbEluZm8sIHJlZ1QxLCByZWdU
MSwgcHJvcGVydHlOYW1lLCBzbG93Q2FzZXMpOwpAQCAtMzA0LDE0ICszMDQsMTQgQEAgSklUUHV0
QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5
VmFsSW5mbywgT3AgYnl0ZWMKIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+b3Bjb2RlSUQoKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlOworICAgIGludCBiYXNlOworICAgIGludCBwcm9wZXJ0eTsKKyAgICBpbnQgdmFs
dWU7CiAKICAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgewotICAgICAgICBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgICAgICBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7Ci0gICAgICAgIHZhbHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICAgICAgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKKyAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5tX3By
b3BlcnR5Lm9mZnNldCgpOworICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0
KCk7CiAgICAgfTsKIAogICAgIGlmIChpc0RpcmVjdCkKQEAgLTMzNywzNiArMzM3LDM2IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeUlkPigpOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsKICAgICBp
bnQzMl90IG9wdGlvbnMgPSBieXRlY29kZS5tX2F0dHJpYnV0ZXM7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2FjY2Vzc29yLm9mZnNldCgpLCByZWdUMSk7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5tX3Byb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHV0U2V0dGVyQnlJZD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1f
YmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNl
Lm9mZnNldCgpLCByZWdUMCk7CiAgICAgaW50MzJfdCBvcHRpb25zID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvciwg
cmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvci5v
ZmZzZXQoKSwgcmVnVDEpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJ
ZCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25z
LCByZWdUMSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lk
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLCByZWdUMCk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCksIHJlZ1QwKTsK
ICAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fZ2V0dGVyLCByZWdUMSk7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3NldHRlciwgcmVnVDIpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9nZXR0ZXIub2Zmc2V0KCksIHJlZ1QxKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fc2V0dGVyLm9mZnNldCgpLCByZWdUMik7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIFRydXN0ZWRJbW1Q
dHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdUMSwgcmVn
VDIpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihieXRlY29kZS5tX2Jhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fcHJvcGVydHksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eS5vZmZzZXQoKSwgcmVnVDEpOwogICAgIGlu
dDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLm1fYXR0cmlidXRlczsKICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYWNjZXNzb3IsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwpAQCAtMzc1
LDE4ICszNzUsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1dF9z
ZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRTZXR0ZXJCeVZh
bD4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fYmFzZSwgcmVnVDAp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSwgcmVnVDEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpLCBy
ZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX3Byb3BlcnR5Lm9m
ZnNldCgpLCByZWdUMSk7CiAgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUubV9hdHRy
aWJ1dGVzOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvciwg
cmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9hY2Nlc3Nvci5v
ZmZzZXQoKSwgcmVnVDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlW
YWwsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgp
OworICAgIGludCBiYXNlID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwogICAgIGludCBwcm9w
ZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkSlNSZXN1
bHQsIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSk7CkBAIC0zOTUsOSAr
Mzk1LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9w
ZXJ0eTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJh
c2UgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eS5vZmZzZXQoKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IHJlZ1QwKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbEpTUmVzdWx0LCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxKTsKQEAg
LTQwNiw4ICs0MDYsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5
X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAgIGludCByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9i
YXNlLm9mZnNldCgpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC00MzAsNyArNDMwLDcgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG8KICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOwotICAgIFZp
cnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgaW50IHJlc3Vs
dFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwog
CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRl
eCsrXTsKQEAgLTQ0NSw4ICs0NDUsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9i
eV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0bwogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1f
YmFzZTsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOworICAg
IGludCBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZS5vZmZzZXQoKTsKICAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwpA
QCAtNDY5LDcgKzQ2OSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlCiAgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zm
c2V0KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Im
IGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CkBAIC00ODUsOCArNDg1LDggQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeUlkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOworICAg
IGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2VW
UmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBAIC01MTMsOSAr
NTEzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkV2l0aFRoaXM+KCk7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWU7CisgICAgaW50IHJlc3VsdFZSZWcgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZVZSZWcgPSBieXRlY29kZS5tX2Jh
c2Uub2Zmc2V0KCk7CisgICAgaW50IHRoaXNWUmVnID0gYnl0ZWNvZGUubV90aGlzVmFsdWUub2Zm
c2V0KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKQEAgLTUzOSw3ICs1MzksNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5
dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwogICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwpAQCAt
NTU2LDcgKzU1Niw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sCiAgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKIAogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlJZFdpdGhUaGlzPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5tX2RzdC5vZmZz
ZXQoKTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsr
XTsKQEAgLTU3MSw4ICs1NzEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dp
dGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLAogdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlk
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWVWUmVnID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBpbnQg
YmFzZVZSZWcgPSBieXRlY29kZS5tX2Jhc2Uub2Zmc2V0KCk7CisgICAgaW50IHZhbHVlVlJlZyA9
IGJ5dGVjb2RlLm1fdmFsdWUub2Zmc2V0KCk7CiAgICAgYm9vbCBkaXJlY3QgPSAhIShieXRlY29k
ZS5tX2ZsYWdzICYgUHV0QnlJZElzRGlyZWN0KTsKIAogICAgIC8vIEluIG9yZGVyIHRvIGJlIGFi
bGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdl
IHN0b3JlIG9uZSBwb2ludGVyLApAQCAtNjE1LDggKzYxNSw4IEBAIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSW5CeUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0
ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9i
YXNlOworICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAg
aW50IGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlLm9mZnNldCgpOwogICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3Bl
cnR5KSk7CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CkBA
IC02MzgsNyArNjM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG8KICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJbkJ5SWQ+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFZSZWcgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0Lm9mZnNldCgpOwog
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
aW5CeUlkc1ttX2luQnlJZEluZGV4KytdOwpAQCAtNjU3LDcgKzY1Nyw3IEBAIHZvaWQgSklUOjpl
bWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKICAgICBh
ZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkp
LCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRSZXNv
bHZlQ2xvc3VyZShWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIGJv
b2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQordm9pZCBKSVQ6OmVt
aXRSZXNvbHZlQ2xvc3VyZShpbnQgZHN0LCBpbnQgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQogewogICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgcmVnVDApOwpAQCAtNjcwLDggKzY3MCw4IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVf
c2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUubV9kc3Qu
b2Zmc2V0KCk7CisgICAgaW50IHNjb3BlID0gYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQoKTsKICAg
ICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLm1fcmVzb2x2ZVR5cGU7CiAgICAg
dW5zaWduZWQgZGVwdGggPSBtZXRhZGF0YS5tX2xvY2FsU2NvcGVEZXB0aDsKIApAQCAtNzcwLDcg
Kzc3MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0TG9hZFdp
dGhTdHJ1Y3R1cmVDaGVjayhWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVj
dHVyZVNsb3QpCit2b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soaW50IHNjb3Bl
LCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQogewogICAgIGxvYWRQdHIoc3RydWN0dXJlU2xv
dCwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKQEAg
LTc5MCw3ICs3OTAsNyBAQCB2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIo
SlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyByZWcpCiAgICAgbG9hZFB0cihyZWcsIHJlZyk7CiB9
CiAKLXZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUsIHVp
bnRwdHJfdCBvcGVyYW5kKQordm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29wZSwg
dWludHB0cl90IG9wZXJhbmQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwg
cmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1Qw
KTsKQEAgLTgwMCw4ICs4MDAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwogICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgc2NvcGUg
PSBieXRlY29kZS5tX3Njb3BlOworICAgIGludCBkc3QgPSBieXRlY29kZS5tX2RzdC5vZmZzZXQo
KTsKKyAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5tX3Njb3BlLm9mZnNldCgpOwogICAgIFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEubV9nZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7
CiAgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLm1fc3RydWN0dXJlLnNs
b3QoKTsKICAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3QqPigmbWV0YWRhdGEubV9vcGVyYW5kKTsKQEAgLTkxOSwxNyArOTE5LDE3IEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAogICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBpbnQgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CiAgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgY3VycmVudEluc3Ry
dWN0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBv
cGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKK3ZvaWQg
SklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgaW50IHZhbHVlLCBX
YXRjaHBvaW50U2V0KiBzZXQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwg
cmVnVDApOwogICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwogICAgIHN0b3JlUHRyKHJlZ1QwLCBv
cGVyYW5kKTsKIH0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1Zh
bHVlKiogYWRkcmVzc09mT3BlcmFuZCwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXYXRjaHBvaW50
U2V0KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQordm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJp
YWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0
LCByZWdUMSk7CkBAIC05MzgsNyArOTM4LDcgQEAgdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJp
YWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBWaXJ0dWFsUmVnaXMKICAg
ICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwogfQogCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVW
YXIoVmlydHVhbFJlZ2lzdGVyIHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgVmlydHVhbFJlZ2lz
dGVyIHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCit2b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVW
YXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0
KiBzZXQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwogICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKQEAgLTk1MCw4ICs5NTAsOCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFB1dFRvU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlID0gYnl0ZWNvZGUu
bV9zY29wZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOwor
ICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAgaW50IHZhbHVl
ID0gYnl0ZWNvZGUubV92YWx1ZS5vZmZzZXQoKTsKICAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8g
PSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsKICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKICAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVT
bG90ID0gbWV0YWRhdGEubV9zdHJ1Y3R1cmUuc2xvdCgpOwpAQCAtMTA4Niw4ICsxMDg2LDggQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3IKIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3Vt
ZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzOworICAgIGludCBkc3QgPSBi
eXRlY29kZS5tX2RzdC5vZmZzZXQoKTsKKyAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9h
cmd1bWVudHMub2Zmc2V0KCk7CiAgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKICAg
ICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOwpAQCAtMTA5
OSw5ICsxMDk5LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
dG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3VtZW50
cz4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzID0gYnl0ZWNvZGUubV9hcmd1bWVu
dHM7CisgICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLm1fYXJndW1lbnRzLm9mZnNldCgpOwog
ICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
Lm9mZnNldCgpOwogICAgIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCBy
ZWdUMCk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwpAQCAtMTEx
MCw3ICsxMTEwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJn
dW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogfQogCi12b2lkIEpJVDo6ZW1pdFdy
aXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwg
V3JpdGVCYXJyaWVyTW9kZSBtb2RlKQordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWdu
ZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCiB7CiAgICAg
SnVtcCB2YWx1ZU5vdENlbGw7CiAgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwg
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKQEAgLTExMzMsNyArMTEzMyw3IEBA
IHZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVh
bFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhCiAgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0V3Jp
dGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2Rl
IG1vZGUpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwogICAg
IEp1bXAgdmFsdWVOb3RDZWxsOwpAQCAtMTE1MCw4ICsxMTUwLDggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRJ
bnRlcm5hbEZpZWxkPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUubV9kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5tX2Jh
c2Uub2Zmc2V0KCk7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMSk7CkBAIC0xMTY0LDggKzExNjQs
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9m
aWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0SW50ZXJuYWxGaWVsZD4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVlOworICAgIGludCBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlLm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWUub2Zm
c2V0KCk7CiAgICAgdW5zaWduZWQgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwogCiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CkBAIC0xMTc2LDcgKzExNzYsNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIAogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKIAotdm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIg
dmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVy
KHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQog
ewogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZh
bHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CkBAIC0xMTk5LDcgKzEx
OTksNyBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIs
IFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVCYQogICAgICAgICB2YWx1ZU5vdENlbGwubGlu
ayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwg
VmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit2b2lkIEpJVDo6
ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJy
aWVyTW9kZSBtb2RlKQogewogICAgIEp1bXAgdmFsdWVOb3RDZWxsOwogICAgIGlmIChtb2RlID09
IFNob3VsZEZpbHRlclZhbHVlKSB7CkBAIC0xNDI1LDcgKzE0MjUsNyBAQCBKSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEludFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZQogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5
UHJvZmlsZTsKICAgICBBU1NFUlQoaXNJbnQodHlwZSkpOwogICAgIAotICAgIFZpcnR1YWxSZWdp
c3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUu
bV92YWx1ZS5vZmZzZXQoKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJJRCBi
YXNlID0gcmVnVDA7CkBAIC0xNTAxLDcgKzE1MDEsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRU
eQogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsK
ICAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CiAgICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIHZh
bHVlID0gYnl0ZWNvZGUubV92YWx1ZTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5tX3ZhbHVl
Lm9mZnNldCgpOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBSZWdpc3RlcklEIGJhc2UgPSBy
ZWdUMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VK
SVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSlNJbnRlcmZhY2VKSVQuaAppbmRleCA1
ODI3MTNlNjQwODdhNTFmNTkzOWI5MGI5ODU0NWRmMTMzZDBjNmFhLi4yY2Y5MTk4ZjQwZWRhYWY1
M2E2MWRiZjMzOTBhNmM3ZGIyODZhNWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pTSW50ZXJmYWNlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
U0ludGVyZmFjZUpJVC5oCkBAIC00NSwxOCArNDUsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIGlubGluZSBKdW1wIGVtaXRMb2FkSlNDZWxsKFZp
cnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsKLSAgICAgICAgaW5saW5lIEp1bXAg
ZW1pdExvYWRJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgZHN0KTsKLSAgICAgICAg
aW5saW5lIEp1bXAgZW1pdExvYWREb3VibGUoVmlydHVhbFJlZ2lzdGVyLCBGUFJlZ2lzdGVySUQg
ZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpOworICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZEpT
Q2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2FkKTsK
KyAgICAgICAgaW5saW5lIEp1bXAgZW1pdExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0
ZXJJbmRleCwgUmVnaXN0ZXJJRCBkc3QpOworICAgICAgICBpbmxpbmUgSnVtcCBlbWl0TG9hZERv
dWJsZSh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgRlBSZWdpc3RlcklEIGRzdCwgUmVn
aXN0ZXJJRCBzY3JhdGNoKTsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGlubGlu
ZSBKdW1wIGVtaXRKdW1wSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgaW5s
aW5lIEp1bXAgZW1pdEp1bXBJZk5vdEpTQ2VsbCh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRl
eCk7CiAjZW5kaWYKIAotICAgICAgICB2b2lkIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRy
KFZpcnR1YWxSZWdpc3RlciBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tID0g
Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRl
cihSZWdpc3RlcklEIGZyb20sIFZpcnR1YWxSZWdpc3RlciBlbnRyeSk7Ci0gICAgICAgIHZvaWQg
ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIgZW50
cnkpOwotICAgICAgICB2b2lkIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJ
RCBmcm9tLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpOworICAgICAgICB2b2lkIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKGludCBlbnRyeSwgUmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBm
cm9tID0gY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFt
ZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIGludCBlbnRyeSk7CisgICAgICAgIHZvaWQgZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKHZvaWQqIHZhbHVlLCBpbnQgZW50cnkpOworICAgICAgICB2b2lk
IGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJJRCBmcm9tLCBpbnQgZW50cnkp
OwogCiAgICAgICAgIFZNKiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1fdm07IH0KIApAQCAtNjQsMzYg
KzY0LDM2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH07CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQotICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExv
YWRKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXls
b2FkKQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1p
dExvYWRKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgcGF5
bG9hZCkKICAgICB7Ci0gICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIp
LCBwYXlsb2FkKTsKLSAgICAgICAgcmV0dXJuIGVtaXRKdW1wSWZOb3RKU0NlbGwodmlydHVhbFJl
Z2lzdGVyKTsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4
KSwgcGF5bG9hZCk7CisgICAgICAgIHJldHVybiBlbWl0SnVtcElmTm90SlNDZWxsKHZpcnR1YWxS
ZWdpc3RlckluZGV4KTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAg
SlNJbnRlcmZhY2VKSVQ6OmVtaXRKdW1wSWZOb3RKU0NlbGwoVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlcikKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VK
SVQ6OmVtaXRKdW1wSWZOb3RKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgpCiAg
ICAgewotICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXgpOwotICAgICAgICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIHRhZ0Zvcih2aXJ0
dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOworICAgICAgICBB
U1NFUlQoc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJbmRleCkgPCBGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihOb3RFcXVhbCwgdGFn
Rm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
KTsKICAgICB9CiAgICAgCi0gICAgaW5saW5lIEpTSW50ZXJmYWNlSklUOjpKdW1wIEpTSW50ZXJm
YWNlSklUOjplbWl0TG9hZEludDMyKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIFJl
Z2lzdGVySUQgZHN0KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFj
ZUpJVDo6ZW1pdExvYWRJbnQzMih1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCwgUmVnaXN0
ZXJJRCBkc3QpCiAgICAgewotICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lzdGVyIDwgRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICBsb2FkUHRyKHBheWxvYWRGb3IodmlydHVh
bFJlZ2lzdGVyKSwgZHN0KTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVxdWFsLCB0YWdG
b3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Cisg
ICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KHZpcnR1YWxSZWdpc3RlckluZGV4KSA8IEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZp
cnR1YWxSZWdpc3RlckluZGV4KSwgZHN0KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKE5vdEVx
dWFsLCB0YWdGb3Ioc3RhdGljX2Nhc3Q8aW50Pih2aXJ0dWFsUmVnaXN0ZXJJbmRleCkpLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNJbnRl
cmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91YmxlKFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRj
aCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRM
b2FkRG91YmxlKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBGUFJlZ2lzdGVySUQgZHN0
LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgewotICAgICAgICBBU1NFUlQodmlydHVhbFJlZ2lz
dGVyIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICBsb2FkUHRyKHRhZ0Zv
cih2aXJ0dWFsUmVnaXN0ZXIpLCBzY3JhdGNoKTsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0
PGludD4odmlydHVhbFJlZ2lzdGVySW5kZXgpIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgp
OworICAgICAgICBsb2FkUHRyKHRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIHNjcmF0Y2gp
OwogICAgICAgICBKdW1wIGlzRG91YmxlID0gYnJhbmNoMzIoQmVsb3csIHNjcmF0Y2gsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKTsKICAgICAgICAgSnVtcCBub3RJbnQgPSBicmFu
Y2gzMihOb3RFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7
Ci0gICAgICAgIGxvYWRQdHIocGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBzY3JhdGNoKTsK
KyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlckluZGV4KSwgc2NyYXRj
aCk7CiAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHNjcmF0Y2gsIGRzdCk7CiAgICAgICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKICAgICAgICAgaXNEb3VibGUubGluayh0aGlzKTsKLSAgICAg
ICAgbG9hZERvdWJsZShhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGRzdCk7CisgICAgICAg
IGxvYWREb3VibGUoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJJbmRleCksIGRzdCk7CiAgICAg
ICAgIGRvbmUubGluayh0aGlzKTsKICAgICAgICAgcmV0dXJuIG5vdEludDsKICAgICB9CkBAIC0x
MDEsMjMgKzEwMSwyMyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVt
aXRMb2FkSlNDZWxsKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQg
ZHN0KQorICAgIGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1p
dExvYWRKU0NlbGwodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0
KQogICAgIHsKLSAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0
KTsKKyAgICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3Qp
OwogICAgICAgICByZXR1cm4gYnJhbmNoSWZOb3RDZWxsKGRzdCk7CiAgICAgfQogICAgIAotICAg
IGlubGluZSBKU0ludGVyZmFjZUpJVDo6SnVtcCBKU0ludGVyZmFjZUpJVDo6ZW1pdExvYWRJbnQz
MihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIGRzdCkKKyAgICBp
bmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkSW50MzIo
dW5zaWduZWQgdmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKLSAg
ICAgICAgbG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZHN0KTsKKyAgICAgICAg
bG9hZDY0KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBkc3QpOwogICAgICAgICBK
dW1wIG5vdEludDMyID0gYnJhbmNoSWZOb3RJbnQzMihkc3QpOwogICAgICAgICB6ZXJvRXh0ZW5k
MzJUb1B0cihkc3QsIGRzdCk7CiAgICAgICAgIHJldHVybiBub3RJbnQzMjsKICAgICB9CiAKLSAg
ICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRlcmZhY2VKSVQ6OmVtaXRMb2FkRG91
YmxlKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIEZQUmVnaXN0ZXJJRCBkc3QsIFJl
Z2lzdGVySUQgc2NyYXRjaCkKKyAgICBpbmxpbmUgSlNJbnRlcmZhY2VKSVQ6Okp1bXAgSlNJbnRl
cmZhY2VKSVQ6OmVtaXRMb2FkRG91YmxlKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlckluZGV4LCBG
UFJlZ2lzdGVySUQgZHN0LCBSZWdpc3RlcklEIHNjcmF0Y2gpCiAgICAgewotICAgICAgICBsb2Fk
NjQoYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBzY3JhdGNoKTsKKyAgICAgICAgbG9hZDY0
KGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVySW5kZXgpLCBzY3JhdGNoKTsKICAgICAgICAgSnVt
cCBub3ROdW1iZXIgPSBicmFuY2hJZk5vdE51bWJlcihzY3JhdGNoKTsKICAgICAgICAgSnVtcCBu
b3RJbnQgPSBicmFuY2hJZk5vdEludDMyKHNjcmF0Y2gpOwogICAgICAgICBjb252ZXJ0SW50MzJU
b0RvdWJsZShzY3JhdGNoLCBkc3QpOwpAQCAtMTI5LDEyICsxMjksMTIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgfQogI2VuZGlmCiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgSlNJbnRlcmZhY2VK
SVQ6OmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFZpcnR1YWxSZWdpc3RlciBlbnRyeSwg
UmVnaXN0ZXJJRCB0bywgUmVnaXN0ZXJJRCBmcm9tKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBK
U0ludGVyZmFjZUpJVDo6ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoaW50IGVudHJ5LCBS
ZWdpc3RlcklEIHRvLCBSZWdpc3RlcklEIGZyb20pCiAgICAgewotICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MoZnJvbSwgZW50cnkub2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8pOworICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MoZnJvbSwgZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgdG8p
OwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5
KQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZy
YW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KQogICAgIHsKICNpZiBVU0UoSlNW
QUxVRTMyXzY0KQogICAgICAgICBzdG9yZVB0cihmcm9tLCBwYXlsb2FkRm9yKGVudHJ5KSk7CkBA
IC0xNDMsMTIgKzE0MywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgIH0KIAotICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBKU0ludGVyZmFjZUpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVh
ZGVyKHZvaWQqIHZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIgZW50cnkpCisgICAgQUxXQVlTX0lOTElO
RSB2b2lkIEpTSW50ZXJmYWNlSklUOjplbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFs
dWUsIGludCBlbnRyeSkKICAgICB7CiAgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIodmFs
dWUpLCBhZGRyZXNzRm9yKGVudHJ5KSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lk
IEpTSW50ZXJmYWNlSklUOjplbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQg
ZnJvbSwgVmlydHVhbFJlZ2lzdGVyIGVudHJ5KQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBKU0lu
dGVyZmFjZUpJVDo6ZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklEIGZyb20s
IGludCBlbnRyeSkKICAgICB7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgc3RvcmUz
MihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHRhZ0ZvcihlbnRyeSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TZXR1cFZhcmFyZ3NGcmFtZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAppbmRleCA0OWY1
NGM1ZGE1NjcyNTAzYTFlMDc2ZjIyZDlkMzgwMjliYjA5ZmNhLi4wOTUyNTkxZWU5ZjdkNWQ0ZmMy
MTcwYzcxNjkzY2ViNjY5Nzc0YjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NldHVwVmFyYXJnc0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1NldHVwVmFyYXJnc0ZyYW1lLmNwcApAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgZW1pdFNldHVw
VmFyYXJnc0ZyYW1lRmFzdENhc2UoVk0mIHZtLCBDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG51
bVVzZWRTbG90CiAgICAgICAgICAgICBmaXJzdEFyZ3VtZW50UmVnID0gVmlydHVhbFJlZ2lzdGVy
KDApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGFyZ3VtZW50Q291bnRSZWNvdmVyeSA9IFZhbHVl
UmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKLSAgICAgICAgICAgIENhbGxGcmFtZVNsb3Q6
OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBEYXRhRm9ybWF0SW50MzIpOworICAgICAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKSwgRGF0YUZvcm1hdEludDMyKTsKICAgICAgICAgZmlyc3RBcmd1bWVudFJlZyA9IFZpcnR1
YWxSZWdpc3RlcihDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0KDApKTsKICAgICB9CiAgICAgZW1p
dFNldHVwVmFyYXJnc0ZyYW1lRmFzdENhc2Uodm0sIGppdCwgbnVtVXNlZFNsb3RzR1BSLCBzY3Jh
dGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBhcmd1bWVudENvdW50UmVjb3Zlcnks
IGZpcnN0QXJndW1lbnRSZWcsIGZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCmluZGV4IGUxNTYw
MzBlNDE0Mzc4YWNiMzU1ZGFhNzJjZTVjNDUyMGVkYzFlZjEuLmExMTYyMmVlYmRiZTQ3ODVlZjA2
YWRjMzkzNDcxZjVjMjFmNzI0MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
U3BlY2lhbGl6ZWRUaHVua0pJVC5oCkBAIC01NSwxMyArNTUsMTMgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIAogICAgICAgICB2b2lkIGxvYWREb3VibGVBcmd1bWVudChpbnQgYXJndW1lbnQs
IEZQUmVnaXN0ZXJJRCBkc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCkKICAgICAgICAgewotICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHNyYyA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFy
Z3VtZW50KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNyYyA9IENhbGxGcmFtZTo6YXJndW1lbnRP
ZmZzZXQoYXJndW1lbnQpOwogICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoZW1pdExvYWRE
b3VibGUoc3JjLCBkc3QsIHNjcmF0Y2gpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
dm9pZCBsb2FkQ2VsbEFyZ3VtZW50KGludCBhcmd1bWVudCwgUmVnaXN0ZXJJRCBkc3QpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcmMgPSB2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChhcmd1bWVudCk7CisgICAgICAgICAgICB1bnNpZ25lZCBzcmMgPSBDYWxsRnJh
bWU6OmFyZ3VtZW50T2Zmc2V0KGFyZ3VtZW50KTsKICAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBw
ZW5kKGVtaXRMb2FkSlNDZWxsKHNyYywgZHN0KSk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC03
Myw3ICs3Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBsb2Fk
SW50MzJBcmd1bWVudChpbnQgYXJndW1lbnQsIFJlZ2lzdGVySUQgZHN0LCBKdW1wJiBmYWlsVGFy
Z2V0KQogICAgICAgICB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjID0gdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpOworICAgICAgICAgICAgdW5zaWduZWQgc3Jj
ID0gQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldChhcmd1bWVudCk7CiAgICAgICAgICAgICBmYWls
VGFyZ2V0ID0gZW1pdExvYWRJbnQzMihzcmMsIGRzdCk7CiAgICAgICAgIH0KICAgICAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggNzFh
NGFjN2E3NTBjMWQ1ZGZmODRlMzY1N2MwMTVkNGY2ZDk3NTIyOC4uYjgxNDZkMjE3NjYxNDgwZWQ0
YjJhNzZhMGVhMWRmYTMxZjMxZjFmMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
VGh1bmtHZW5lcmF0b3JzLmNwcApAQCAtMTAzNiw4ICsxMDM2LDggQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBhYnNUaHVua0dlbmVyYXRvcihWTSYgdm0pCiAgICAgICAg
IHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxm
TWFuYWdlZENvZGVSZWYodm0uaml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwodm0pKTsKIAogI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDApOwotICAgIGppdC5sb2FkNjQoQXNzZW1ibHlIZWxwZXJz
OjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIEdQUkluZm86OnJlZ1QwKTsKKyAgICB1bnNp
Z25lZCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCA9IENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXQoMCk7
CisgICAgaml0LmxvYWQ2NChBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lz
dGVySW5kZXgpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgYXV0byBub3RJbnRlZ2VyID0gaml0LmJy
YW5jaElmTm90SW50MzIoR1BSSW5mbzo6cmVnVDApOwogCiAgICAgLy8gQWJzIEludDMyLgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKaW5kZXggZjBh
ZTcyNTgwMDcxZDJiZjhhMDEzMmNjNjMwMTdmZDI5ZGZkZGZjOS4uZjE2NGI4MGIxMTg0NWM2ZmM0
NTNjNGIzNzgzYWJiNmM0MjNkODk1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiQXJyYXlD
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAi
Q2FsbEZyYW1lLmgiCi0jaW5jbHVkZSAiQ2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNp
bmNsdWRlICJDb21tb25TbG93UGF0aHMuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUg
IkVycm9ySGFuZGxpbmdTY29wZS5oIgpAQCAtOTksOCArOTgsOCBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIExMSW50IHsKICAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsgICAgICAgICAg
ICAgICAgICAgIFwKICAgICBMTElOVF9TRVRfUENfRk9SX1NUVUJTKCkKIAotaW5saW5lIEpTVmFs
dWUgZ2V0Tm9uQ29uc3RhbnRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCkgeyByZXR1cm4gY2FsbEZyYW1lLT51bmNoZWNrZWRSKG9wZXJhbmQpLmpz
VmFsdWUoKTsgfQotaW5saW5lIEpTVmFsdWUgZ2V0T3BlcmFuZChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+cihvcGVyYW5k
KS5qc1ZhbHVlKCk7IH0KK2lubGluZSBKU1ZhbHVlIGdldE5vbkNvbnN0YW50T3BlcmFuZChDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgVmlydHVhbFJlZ2lzdGVyJiBvcGVyYW5kKSB7IHJldHVy
biBjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZC5vZmZzZXQoKSkuanNWYWx1ZSgpOyB9Citp
bmxpbmUgSlNWYWx1ZSBnZXRPcGVyYW5kKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBWaXJ0
dWFsUmVnaXN0ZXImIG9wZXJhbmQpIHsgcmV0dXJuIGNhbGxGcmFtZS0+cihvcGVyYW5kLm9mZnNl
dCgpKS5qc1ZhbHVlKCk7IH0KIAogI2RlZmluZSBMTElOVF9SRVRVUk5fVFdPKGZpcnN0LCBzZWNv
bmQpIGRvIHsgICAgICAgXAogICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KGZpcnN0LCBzZWNv
bmQpOyAgICAgICAgXApAQCAtMTU3Miw3ICsxNTcxLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJu
VHlwZSBnZW5lcmljQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUKICAgICBDYWxsRnJhbWUqIGNhbGxlZUZyYW1lID0gY2FsbEZyYW1lIC0gYnl0ZWNvZGUubV9h
cmd2OwogICAgIAogICAgIGNhbGxlZUZyYW1lLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cyhieXRlY29kZS5tX2FyZ2MpOwotICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxS
ZWdpc3RlcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CisgICAgY2Fs
bGVlRnJhbWUtPnVuY2hlY2tlZFIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSA9IGNhbGxlZUFzVmFs
dWU7CiAgICAgY2FsbGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7CiAgICAgCiAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwpAQCAtMTY5
MCw3ICsxNjg5LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSB2YXJhcmdzU2V0dXAoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uKgogICAgICAgICBzZXR1cEZvcndh
cmRBcmd1bWVudHNGcmFtZUFuZFNldFRoaXMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGNhbGxl
ZUZyYW1lLCBnZXRPcGVyYW5kKGNhbGxGcmFtZSwgYnl0ZWNvZGUubV90aGlzVmFsdWUpLCB2bS52
YXJhcmdzTGVuZ3RoKTsKIAogICAgIGNhbGxlZUZyYW1lLT5zZXRDYWxsZXJGcmFtZShjYWxsRnJh
bWUpOwotICAgIGNhbGxlZUZyYW1lLT51bmNoZWNrZWRSKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJh
bWVTbG90OjpjYWxsZWUpKSA9IGNhbGxlZUFzVmFsdWU7CisgICAgY2FsbGVlRnJhbWUtPnVuY2hl
Y2tlZFIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSA9IGNhbGxlZUFzVmFsdWU7CiAgICAgY2FsbEZy
YW1lLT5zZXRDdXJyZW50VlBDKHBjKTsKIAogICAgIFJFTEVBU0VfQU5EX1JFVFVSTih0aHJvd1Nj
b3BlLCBzZXRVcENhbGwoY2FsbGVlRnJhbWUsIGtpbmQsIGNhbGxlZUFzVmFsdWUpKTsKQEAgLTE3
MjYsNyArMTcyNSw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgY29tbW9uQ2FsbEV2YWwo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IEluc3RydWN0aW9uCiAgICAgCiAgICAgY2FsbGVl
RnJhbWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKGJ5dGVjb2RlLm1fYXJnYyk7CiAg
ICAgY2FsbGVlRnJhbWUtPnNldENhbGxlckZyYW1lKGNhbGxGcmFtZSk7Ci0gICAgY2FsbGVlRnJh
bWUtPnVuY2hlY2tlZFIoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpID0g
Y2FsbGVlQXNWYWx1ZTsKKyAgICBjYWxsZWVGcmFtZS0+dW5jaGVja2VkUihDYWxsRnJhbWVTbG90
OjpjYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKICAgICBjYWxsZWVGcmFtZS0+c2V0UmV0dXJuUEMo
cmV0dXJuUG9pbnQuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgY2FsbGVlRnJhbWUtPnNldENv
ZGVCbG9jayhudWxscHRyKTsKICAgICBjYWxsRnJhbWUtPnNldEN1cnJlbnRWUEMocGMpOwpAQCAt
MTkxMyw3ICsxOTEyLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2xvZ19zaGFk
b3dfY2hpY2tlbl90YWlsKQogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChwYykp
KTsKICNlbHNlCi0gICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KCpwYyk7CisgICAgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KEJ5dGVjb2RlSW5kZXgoYml0d2lzZV9jYXN0PHVpbnQz
Ml90PihwYykpKTsKICNlbmRpZgogCiAgICAgU2hhZG93Q2hpY2tlbiogc2hhZG93Q2hpY2tlbiA9
IHZtLnNoYWRvd0NoaWNrZW4oKTsKQEAgLTE5MzEsNyArMTkzMCw3IEBAIExMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9wcm9maWxlX2NhdGNoKQogCiAgICAgYXV0byBieXRlY29kZSA9IHBj
LT5hczxPcENhdGNoPigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
Y29kZUJsb2NrKTsKLSAgICBtZXRhZGF0YS5tX2J1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJv
ZmlsZUFuZFZpcnR1YWxSZWdpc3RlciYgcHJvZmlsZSkgeworICAgIG1ldGFkYXRhLm1fYnVmZmVy
LT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgewogICAgICAg
ICBwcm9maWxlLm1fYnVja2V0c1swXSA9IEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnVuY2hl
Y2tlZFIocHJvZmlsZS5tX29wZXJhbmQpLmpzVmFsdWUoKSk7CiAgICAgfSk7CiAKQEAgLTE5NjIs
MTI0ICsxOTYxLDExIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9vdXRfb2ZfbGlu
ZV9qdW1wX3RhcmdldCkKICAgICBMTElOVF9FTkRfSU1QTCgpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBPcGNvZGU+Ci1zdGF0aWMgdm9pZCBoYW5kbGVWYXJhcmdzQ2hlY2twb2ludChWTSYgdm0s
IENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25z
dCBPcGNvZGUmIGJ5dGVjb2RlLCBDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZSYgc2lkZVN0YXRl
KQotewotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICB1bnNp
Z25lZCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IHNpZGVTdGF0ZS50bXBzW09wY29kZTo6
YXJnQ291bnRJbmNsdWRpbmdUaGlzXS5hc1VJbnQzMigpOwotICAgIHVuc2lnbmVkIGZpcnN0VmFy
QXJnID0gYnl0ZWNvZGUubV9maXJzdFZhckFyZzsKLQotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVy
IGFyZ3M7Ci0gICAgYXJncy5maWxsKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIC0gMSwgWyZd
IChKU1ZhbHVlKiBidWZmZXIpIHsKLSAgICAgICAgbG9hZFZhcmFyZ3MoZ2xvYmFsT2JqZWN0LCBi
dWZmZXIsIGNhbGxGcmFtZS0+cihieXRlY29kZS5tX2FyZ3VtZW50cykuanNWYWx1ZSgpLCBmaXJz
dFZhckFyZywgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgLSAxKTsKLSAgICB9KTsKLSAgICBp
ZiAoYXJncy5oYXNPdmVyZmxvd2VkKCkpIHsKLSAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLQotICAgIEpTVmFsdWUgcmVz
dWx0OwotICAgIGlmIChPcGNvZGU6Om9wY29kZUlEICE9IG9wX2NvbnN0cnVjdF92YXJhcmdzKQot
ICAgICAgICByZXN1bHQgPSBjYWxsKGdsb2JhbE9iamVjdCwgZ2V0T3BlcmFuZChjYWxsRnJhbWUs
IGJ5dGVjb2RlLm1fY2FsbGVlKSwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fdGhp
c1ZhbHVlKSwgYXJncywgIiIpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0
KGdsb2JhbE9iamVjdCwgZ2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fY2FsbGVlKSwg
Z2V0T3BlcmFuZChjYWxsRnJhbWUsIGJ5dGVjb2RlLm1fdGhpc1ZhbHVlKSwgYXJncywgIiIpOwot
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsKLSAgICBjYWxsRnJhbWUt
PnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9kc3QpID0gcmVzdWx0OwotfQotCi1pbmxpbmUgU2xvd1Bh
dGhSZXR1cm5UeXBlIGRpc3BhdGNoVG9OZXh0SW5zdHJ1Y3Rpb24oQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEluc3RydWN0aW9uU3RyZWFtOjpSZWYgcGMpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWNv
ZGVCbG9jay0+dm0oKS5leGNlcHRpb25Gb3JJbnNwZWN0aW9uKCkpOwotICAgIGlmIChPcHRpb25z
Ojpmb3JjZU9TUkV4aXRUb0xMSW50KCkgfHwgY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlw
ZTo6SW50ZXJwcmV0ZXJUaHVuaykgewotICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogbmV4dFBD
ID0gcGMubmV4dCgpLnB0cigpOwotICAgICAgICBhdXRvIG5leHRCeXRlY29kZSA9IExMSW50Ojpn
ZXRDb2RlUHRyPEpTRW50cnlQdHJUYWc+KCpwYy5uZXh0KCkucHRyKCkpOwotICAgICAgICByZXR1
cm4gZW5jb2RlUmVzdWx0KG5leHRQQywgbmV4dEJ5dGVjb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OwotICAgIH0KLQotI2lmIEVOQUJMRShKSVQpCi0gICAgQVNTRVJUKGNvZGVCbG9jay0+aml0VHlw
ZSgpID09IEpJVFR5cGU6OkJhc2VsaW5lSklUKTsKLSAgICBCeXRlY29kZUluZGV4IG5leHRCeXRl
Y29kZUluZGV4ID0gcGMubmV4dCgpLmluZGV4KCk7Ci0gICAgYXV0byBuZXh0Qnl0ZWNvZGUgPSBj
b2RlQmxvY2stPmppdENvZGVNYXAoKS5maW5kKG5leHRCeXRlY29kZUluZGV4KTsKLSAgICByZXR1
cm4gZW5jb2RlUmVzdWx0KG51bGxwdHIsIG5leHRCeXRlY29kZS5leGVjdXRhYmxlQWRkcmVzcygp
KTsKLSNlbmRpZgotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLWV4dGVy
biAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0X2Zy
b21faW5saW5lZF9jYWxsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZSByZXN1
bHQpCi17Ci0gICAgLy8gU2luY2UgYWxsIG91ciBjYWxsaW5nIGNoZWNrcG9pbnRzIGRvIHJpZ2h0
IG5vdyBpcyBtb3ZlIHJlc3VsdCBpbnRvIG91ciBkZXN0IHdlIGNhbiBqdXN0IGRvIHRoYXQgaGVy
ZSBhbmQgcmV0dXJuLgotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKLSAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7Ci0gICAgU2xvd1BhdGhGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hl
Y2twb2ludE9TUkV4aXRTaWRlU3RhdGU+IHNpZGVTdGF0ZSA9IHZtLmZpbmRDaGVja3BvaW50T1NS
U2lkZVN0YXRlKGNhbGxGcmFtZSk7Ci0gICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0g
c2lkZVN0YXRlLT5ieXRlY29kZUluZGV4OwotICAgIGF1dG8gcGMgPSBjb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KGJ5dGVjb2RlSW5kZXgpOwotCi0gICAgYXV0byBvcGNvZGUgPSBwYy0+b3Bj
b2RlSUQoKTsKLSAgICBzd2l0Y2ggKG9wY29kZSkgewotICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdz
OiB7Ci0gICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihwYy0+YXM8T3BDYWxsVmFyYXJncz4o
KS5tX2RzdCkgPSBKU1ZhbHVlOjpkZWNvZGUocmVzdWx0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKLSAgICAgICAgY2FsbEZyYW1lLT51
bmNoZWNrZWRSKHBjLT5hczxPcENvbnN0cnVjdFZhcmFyZ3M+KCkubV9kc3QpID0gSlNWYWx1ZTo6
ZGVjb2RlKHJlc3VsdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAvLyBvcF90YWlsX2Nh
bGxfdmFyYXJncyBzaG91bGQgbmV2ZXIgcmV0dXJuIGlmIHRoZSB0aGluZyBpdCB3YXMgY2FsbGlu
ZyB3YXMgaW5saW5lZC4KLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGlzcGF0Y2hU
b05leHRJbnN0cnVjdGlvbihjb2RlQmxvY2ssIHBjKTsKLX0KLQotZXh0ZXJuICJDIiBTbG93UGF0
aFJldHVyblR5cGUgc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEVuY29kZWRKU1ZhbHVlIC8qIG5lZWRlZCBmb3IgY0NhbGwyIGluIENMb29wICovKQot
ewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKLSAg
ICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7Ci0gICAgU2xvd1BhdGhGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGNhbGxGcmFtZSk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRl
U3RhdGU+IHNpZGVTdGF0ZSA9IHZtLmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKGNhbGxGcmFt
ZSk7Ci0gICAgQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4ID0gc2lkZVN0YXRlLT5ieXRlY29k
ZUluZGV4OwotICAgIEFTU0VSVChieXRlY29kZUluZGV4LmNoZWNrcG9pbnQoKSk7Ci0KLSAgICBh
dXRvIHBjID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieXRlY29kZUluZGV4KTsKLQot
ICAgIGF1dG8gb3Bjb2RlID0gcGMtPm9wY29kZUlEKCk7Ci0gICAgc3dpdGNoIChvcGNvZGUpIHsK
LSAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKLSAgICAgICAgaGFuZGxlVmFyYXJnc0NoZWNrcG9p
bnQodm0sIGNhbGxGcmFtZSwgZ2xvYmFsT2JqZWN0LCBwYy0+YXM8T3BDYWxsVmFyYXJncz4oKSwg
KnNpZGVTdGF0ZS5nZXQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugb3BfY29uc3RydWN0
X3ZhcmFyZ3M6Ci0gICAgICAgIGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50KHZtLCBjYWxsRnJhbWUs
IGdsb2JhbE9iamVjdCwgcGMtPmFzPE9wQ29uc3RydWN0VmFyYXJncz4oKSwgKnNpZGVTdGF0ZS5n
ZXQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6Ci0g
ICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocGMubmV4dCgpLT5vcGNvZGVJRCgpID09IG9wX3Jl
dCB8fCBwYy5uZXh0KCktPm9wY29kZUlEKCkgPT0gb3Bfam1wLCAiV2Ugc3Ryb25nbHkgYXNzdW1l
IGFsbCB0YWlsIGNhbGxzIGFyZSBmb2xsb3dlZCBieSBhbiBvcF9yZXQgKG9yIHNvbWV0aW1lcyBh
IGptcCB0byBhIHJldCkuIik7Ci0gICAgICAgIGhhbmRsZVZhcmFyZ3NDaGVja3BvaW50KHZtLCBj
YWxsRnJhbWUsIGdsb2JhbE9iamVjdCwgcGMtPmFzPE9wVGFpbENhbGxWYXJhcmdzPigpLCAqc2lk
ZVN0YXRlLmdldCgpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgcmV0dXJuIGVuY29kZVJl
c3VsdChyZXR1cm5Ub1Rocm93KHZtKSwgMCk7Ci0KLSAgICByZXR1cm4gZGlzcGF0Y2hUb05leHRJ
bnN0cnVjdGlvbihjb2RlQmxvY2ssIHBjKTsKLX0KLQogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVy
blR5cGUgbGxpbnRfdGhyb3dfc3RhY2tfb3ZlcmZsb3dfZXJyb3IoVk0qIHZtLCBQcm90b0NhbGxG
cmFtZSogcHJvdG9GcmFtZSkKIHsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHZtLT50b3BD
YWxsRnJhbWU7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKwog
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBudWxscHRyOwogICAgIGlmIChjYWxs
RnJhbWUpCiAgICAgICAgIGdsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9i
amVjdCgqdm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
aAppbmRleCA3Yzc1ZGIzYmY0OTlhNDRkNTBhZGI5MDE4Y2YxZTZlOWRkYTUwNWZkLi4yZmYyOGIw
MDZiYzIyMzMzMGNjNjc4NjVhMTY3OTRhOTBlN2U3YWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuaApAQCAtMTM2LDggKzEzNiw2IEBAIExMSU5UX1NM
T1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc3VwZXJfc2FtcGxlcl9iZWdpbik7CiBMTElO
VF9TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3N1cGVyX3NhbXBsZXJfZW5kKTsKIExM
SU5UX1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfb3V0X29mX2xpbmVfanVtcF90YXJn
ZXQpOwogZXh0ZXJuICJDIiBTbG93UGF0aFJldHVyblR5cGUgbGxpbnRfdGhyb3dfc3RhY2tfb3Zl
cmZsb3dfZXJyb3IoVk0qLCBQcm90b0NhbGxGcmFtZSopIFdURl9JTlRFUk5BTDsKLWV4dGVybiAi
QyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0KENhbGxG
cmFtZSogY2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZSB1bnVzZWQpIFdURl9JTlRFUk5BTDsKLWV4
dGVybiAiQyIgU2xvd1BhdGhSZXR1cm5UeXBlIHNsb3dfcGF0aF9jaGVja3BvaW50X29zcl9leGl0
X2Zyb21faW5saW5lZF9jYWxsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZSBj
YWxsUmVzdWx0KSBXVEZfSU5URVJOQUw7CiAjaWYgRU5BQkxFKENfTE9PUCkKIGV4dGVybiAiQyIg
U2xvd1BhdGhSZXR1cm5UeXBlIGxsaW50X3N0YWNrX2NoZWNrX2F0X3ZtX2VudHJ5KFZNKiwgUmVn
aXN0ZXIqKSBXVEZfSU5URVJOQUw7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQppbmRleCAzMjkyMzY5YWUxOTBkM2Zi
MDdmMDdkNjMwZDk3M2I1YmYxMTdhNjRmLi41ZjlmOWYwZDVlMTg0MGUyOGFlNDJmYjM5MTIyZjBk
Mjk1MGZmZjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC0xMDk1LDcgKzEwOTUsNyBAQCBtYWNybyBnZXR0ZXJTZXR0
ZXJPU1JFeGl0UmV0dXJuUG9pbnQob3BOYW1lLCBzaXplKQogICAgIGRlZmluZU9TUkV4aXRSZXR1
cm5MYWJlbChvcE5hbWUsIHNpemUpCiAKICAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxs
KCkKLSAgICBsb2FkaSBMTEludFJldHVyblBDW2Nmcl0sIFBDCisgICAgbG9hZGkgQXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgKyBUYWdPZmZzZXRbY2ZyXSwgUEMKIGVuZAogCiBtYWNybyBhcnJh
eVByb2ZpbGUob2Zmc2V0LCBjZWxsQW5kSW5kZXhpbmdUeXBlLCBtZXRhZGF0YSwgc2NyYXRjaCkK
QEAgLTE4NTAsMTcgKzE4NTAsMTMgQEAgZW5kKQogY2FsbE9wKGNvbnN0cnVjdCwgT3BDb25zdHJ1
Y3QsIHByZXBhcmVGb3JSZWd1bGFyQ2FsbCwgbWFjcm8gKGdldHUsIG1ldGFkYXRhKSBlbmQpCiAK
IAotbWFjcm8gYnJhbmNoSWZFeGNlcHRpb24oZXhjZXB0aW9uVGFyZ2V0KQorbWFjcm8gZG9DYWxs
VmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoLCBmcmFtZVNs
b3dQYXRoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCisgICAgY2FsbFNsb3dQYXRoKGZyYW1lU2xv
d1BhdGgpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQzCiAgICAgbG9hZHAgQ29kZUJsb2Nr
OjptX3ZtW3QzXSwgdDMKICAgICBidHB6IFZNOjptX2V4Y2VwdGlvblt0M10sIC5ub0V4Y2VwdGlv
bgotICAgIGptcCBleGNlcHRpb25UYXJnZXQKLS5ub0V4Y2VwdGlvbjogICAgCi1lbmQKLQotbWFj
cm8gZG9DYWxsVmFyYXJncyhvcGNvZGVOYW1lLCBzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNo
LCBmcmFtZVNsb3dQYXRoLCBzbG93UGF0aCwgcHJlcGFyZUNhbGwpCi0gICAgY2FsbFNsb3dQYXRo
KGZyYW1lU2xvd1BhdGgpCi0gICAgYnJhbmNoSWZFeGNlcHRpb24oX2xsaW50X3Rocm93X2Zyb21f
c2xvd19wYXRoX3RyYW1wb2xpbmUpCisgICAgam1wIF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0
aF90cmFtcG9saW5lCisubm9FeGNlcHRpb246CiAgICAgIyBjYWxsZWVGcmFtZSBpbiByMQogICAg
IGlmIEpTVkFMVUU2NAogICAgICAgICBtb3ZlIHIxLCBzcApAQCAtMjAxNSw0MCArMjAxMSw2IEBA
IG9wKGxsaW50X2ludGVybmFsX2Z1bmN0aW9uX2NvbnN0cnVjdF90cmFtcG9saW5lLCBtYWNybyAo
KQogZW5kKQogCiAKLW9wKGNoZWNrcG9pbnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGxfdHJh
bXBvbGluZSwgbWFjcm8gKCkKLSAgICBpZiBKU1ZBTFVFNjQgYW5kIG5vdCAoQ19MT09QIG9yIENf
TE9PUF9XSU4pCi0gICAgICAgIHJlc3RvcmVTdGFja1BvaW50ZXJBZnRlckNhbGwoKQotCi0gICAg
ICAgICMgTWFrZSBzdXJlIHdlIG1vdmUgcjAgdG8gYTEgZmlyc3Qgc2luY2UgcjAgbWlnaHQgYmUg
dGhlIHNhbWUgYXMgYTAsIGZvciBpbnN0YW5jZSwgb24gYXJtLgotICAgICAgICBtb3ZlIHIwLCBh
MQotICAgICAgICBtb3ZlIGNmciwgYTAKLSAgICAgICAgIyBXZSBkb24ndCBjYWxsIHNhdmVTdGF0
ZUZvckNDYWxsKCkgYmVjYXVzZSB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBieXRlY29kZUluZGV4
IGZyb20gb3VyIHNpZGUgc3RhdGUuCi0gICAgICAgIGNDYWxsMihfc2xvd19wYXRoX2NoZWNrcG9p
bnRfb3NyX2V4aXRfZnJvbV9pbmxpbmVkX2NhbGwpCi0gICAgICAgIHJlc3RvcmVTdGF0ZUFmdGVy
Q0NhbGwoKQotICAgICAgICBicmFuY2hJZkV4Y2VwdGlvbihfbGxpbnRfdGhyb3dfZnJvbV9zbG93
X3BhdGhfdHJhbXBvbGluZSkKLSAgICAgICAgam1wIHIxLCBKU0VudHJ5UHRyVGFnCi0gICAgZWxz
ZQotICAgICAgICBub3RTdXBwb3J0ZWQoKQotICAgIGVuZAotZW5kKQotCi1vcChjaGVja3BvaW50
X29zcl9leGl0X3RyYW1wb2xpbmUsIG1hY3JvICgpCi0gICAgIyBGSVhNRTogV2UgY2FuIHByb2Jh
Ymx5IGRpc3BhdGNoIHRvIHRoZSBjaGVja3BvaW50IGhhbmRsZXIgZGlyZWN0bHkgYnV0IHRoaXMg
d2FzIGVhc2llciAKLSAgICAjIGFuZCBwcm9iYWJseSBkb2Vzbid0IG1hdHRlciBmb3IgcGVyZm9y
bWFuY2UuCi0gICAgaWYgSlNWQUxVRTY0IGFuZCBub3QgKENfTE9PUCBvciBDX0xPT1BfV0lOKQot
ICAgICAgICByZXN0b3JlU3RhY2tQb2ludGVyQWZ0ZXJDYWxsKCkKLQotICAgICAgICBtb3ZlIGNm
ciwgYTAKLSAgICAgICAgIyBXZSBkb24ndCBjYWxsIHNhdmVTdGF0ZUZvckNDYWxsKCkgYmVjYXVz
ZSB3ZSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBieXRlY29kZUluZGV4IGZyb20gb3VyIHNpZGUgc3Rh
dGUuCi0gICAgICAgIGNDYWxsMihfc2xvd19wYXRoX2NoZWNrcG9pbnRfb3NyX2V4aXQpCi0gICAg
ICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ0NhbGwoKQotICAgICAgICBicmFuY2hJZkV4Y2VwdGlvbihf
bGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZSkKLSAgICAgICAgam1wIHIxLCBK
U0VudHJ5UHRyVGFnCi0gICAgZWxzZQotICAgICAgICBub3RTdXBwb3J0ZWQoKQotICAgIGVuZAot
ZW5kKQotCiAjIExhc3RseSwgbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGxpbmsgZXZlbiB0aG91Z2gg
d2UgZG9uJ3Qgc3VwcG9ydCBhbGwgb3Bjb2Rlcy4KICMgVGhlc2Ugb3Bjb2RlcyBzaG91bGQgbmV2
ZXIgYXJpc2Ugd2hlbiB1c2luZyBMTEludCBvciBlaXRoZXIgSklULiBXZSBhc3NlcnQKICMgYXMg
bXVjaC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyMzJfNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIzMl82NC5hc20KaW5kZXggNDNjNTIwMjg4OWZiYjAxNGUzZGFhMGVkNmM4NDE5
NmM1ZDkwNGUyOC4uMDVhNjhjOWI4NjJiODIyMTcwYWE3MTZjMGFjNmZjMTg4MWMzNTgxNiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIz
Ml82NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIzMl82NC5hc20KQEAgLTE0MywxOSArMTQzLDExIEBAIG1hY3JvIGNDYWxsNChmdW5jdGlv
bikKICAgICBlbmQKIGVuZAogCi1tYWNybyBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCi0gICAgbW92
ZSBQQywgYTEKLWVuZAotCi1tYWNybyByZXN0b3JlU3RhdGVBZnRlckNDYWxsKCkKLSAgICBtb3Zl
IHIwLCBQQwotZW5kCi0KIG1hY3JvIGNhbGxTbG93UGF0aChzbG93UGF0aCkKICAgICBtb3ZlIGNm
ciwgYTAKLSAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCisgICAgbW92ZSBQQywgYTEKICAgICBj
Q2FsbDIoc2xvd1BhdGgpCi0gICAgcmVzdG9yZVN0YXRlQWZ0ZXJDQ2FsbCgpCisgICAgbW92ZSBy
MCwgUEMKIGVuZAogCiBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCmluZGV4IGZl
YjMzZjNiMzY5NzMxNGNkMzNiMDA3MjdjM2UwYjRjZDhkNDFiOGEuLjcyY2RhZmU5ZGE1ZWUzYzli
ZmNjYzVkNjE0N2Q5MGMxNDkzYzcwZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCkBAIC00MiwxNCArNDIsNiBAQCBt
YWNybyBuZXh0SW5zdHJ1Y3Rpb25XaWRlMzIoKQogICAgIGptcCBbdDEsIHQwLCBQdHJTaXplXSwg
Qnl0ZWNvZGVQdHJUYWcKIGVuZAogCi1tYWNybyBzdG9yZVBDKCkKLSAgICBzdG9yZWkgUEMsIExM
SW50UmV0dXJuUENbY2ZyXQotZW5kCi0KLW1hY3JvIGxvYWRQQygpCi0gICAgbG9hZGkgTExJbnRS
ZXR1cm5QQ1tjZnJdLCBQQwotZW5kCi0KIG1hY3JvIGdldHVPcGVyYW5kTmFycm93KG9wY29kZVN0
cnVjdCwgZmllbGROYW1lLCBkc3QpCiAgICAgbG9hZGIgY29uc3RleHByICVvcGNvZGVTdHJ1Y3Ql
XyVmaWVsZE5hbWUlX2luZGV4ICsgT3Bjb2RlSUROYXJyb3dTaXplW1BCLCBQQywgMV0sIGRzdAog
ZW5kCkBAIC0xMDAsNyArOTIsNyBAQCBlbmQKIAogIyBBZnRlciBjYWxsaW5nLCBjYWxsaW5nIGJ5
dGVjb2RlIGlzIGNsYWltaW5nIGlucHV0IHJlZ2lzdGVycyBhcmUgbm90IHVzZWQuCiBtYWNybyBk
aXNwYXRjaEFmdGVyQ2FsbChzaXplLCBvcGNvZGVTdHJ1Y3QsIGRpc3BhdGNoKQotICAgIGxvYWRQ
QygpCisgICAgbG9hZGkgQXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBUYWdPZmZzZXRbY2Zy
XSwgUEMKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgUEIKICAgICBsb2FkcCBDb2RlQmxvY2s6
Om1faW5zdHJ1Y3Rpb25zUmF3UG9pbnRlcltQQl0sIFBCCiAgICAgZ2V0KHNpemUsIG9wY29kZVN0
cnVjdCwgbV9kc3QsIHQxKQpAQCAtMzk4LDcgKzM5MCw3IEBAIGVuZAogCiAjIENhbGwgYSBzbG93
IHBhdGggZm9yIGNhbGwgb3Bjb2Rlcy4KIG1hY3JvIGNhbGxDYWxsU2xvd1BhdGgoc2xvd1BhdGgs
IGFjdGlvbikKLSAgICBzdG9yZVBDKCkKKyAgICBzdG9yZWkgUEMsIEFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0KICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAg
ICAgbW92ZSBjZnIsIGEwCiAgICAgbW92ZSBQQywgYTEKQEAgLTQwNywyMCArMzk5LDIwIEBAIG1h
Y3JvIGNhbGxDYWxsU2xvd1BhdGgoc2xvd1BhdGgsIGFjdGlvbikKIGVuZAogCiBtYWNybyBjYWxs
VHJhcEhhbmRsZXIodGhyb3dIYW5kbGVyKQotICAgIHN0b3JlUEMoKQorICAgIHN0b3JlaSBQQywg
QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgKyBUYWdPZmZzZXRbY2ZyXQogICAgIHByZXBhcmVT
dGF0ZUZvckNDYWxsKCkKICAgICBtb3ZlIGNmciwgYTAKICAgICBtb3ZlIFBDLCBhMQogICAgIGND
YWxsMihfbGxpbnRfc2xvd19wYXRoX2hhbmRsZV90cmFwcykKICAgICBidHBueiByMCwgdGhyb3dI
YW5kbGVyCi0gICAgbG9hZGkgTExJbnRSZXR1cm5QQ1tjZnJdLCBQQworICAgIGxvYWRpIEFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCiBlbmQKIAogbWFjcm8g
Y2hlY2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgIGNoZWNrU3dpdGNoVG9KSVQoCiAgICAgICAg
IDEsCiAgICAgICAgIG1hY3JvKCkKLSAgICAgICAgICAgIHN0b3JlUEMoKQorICAgICAgICAgICAg
c3RvcmVpIFBDLCBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyArIFRhZ09mZnNldFtjZnJdCiAg
ICAgICAgICAgICBwcmVwYXJlU3RhdGVGb3JDQ2FsbCgpCiAgICAgICAgICAgICBtb3ZlIGNmciwg
YTAKICAgICAgICAgICAgIG1vdmUgUEMsIGExCkBAIC00MjksNyArNDIxLDcgQEAgbWFjcm8gY2hl
Y2tTd2l0Y2hUb0pJVEZvckxvb3AoKQogICAgICAgICAgICAgbW92ZSByMSwgc3AKICAgICAgICAg
ICAgIGptcCByMCwgSlNFbnRyeVB0clRhZwogICAgICAgICAucmVjb3ZlcjoKLSAgICAgICAgICAg
IGxvYWRQQygpCisgICAgICAgICAgICBsb2FkaSBBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAr
IFRhZ09mZnNldFtjZnJdLCBQQwogICAgICAgICBlbmQpCiBlbmQKIApAQCAtMjA3Myw3ICsyMDY1
LDcgQEAgbWFjcm8gY29tbW9uQ2FsbE9wKG9wY29kZU5hbWUsIHNsb3dQYXRoLCBvcGNvZGVTdHJ1
Y3QsIHByZXBhcmVDYWxsLCBwcm9sb2d1ZSkKICAgICAgICAgYWRkcCBjZnIsIHQzCiAgICAgICAg
IHN0b3JlcSB0MiwgQ2FsbGVlW3QzXQogICAgICAgICBnZXR1KHNpemUsIG9wY29kZVN0cnVjdCwg
bV9hcmdjLCB0MikKLSAgICAgICAgc3RvcmVQQygpCisgICAgICAgIHN0b3JlaSBQQywgQXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgKyBUYWdPZmZzZXRbY2ZyXQogICAgICAgICBzdG9yZWkgdDIs
IEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICsgUGF5bG9hZE9mZnNldFt0M10KICAgICAgICAg
bW92ZSB0Mywgc3AKICAgICAgICAgcHJlcGFyZUNhbGwoJW9wY29kZVN0cnVjdCU6Ok1ldGFkYXRh
OjptX2NhbGxMaW5rSW5mby5tX21hY2hpbmVDb2RlVGFyZ2V0W3Q1XSwgdDIsIHQzLCB0NCwgSlNF
bnRyeVB0clRhZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
Z0xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ0xpc3QuaAppbmRleCA5
NDliOWIwOTFhOWY1YTM1Y2YwNWNlNGNhZmUyNzQyODQzMGYyYTZlLi5mYWRhM2Q2OWRhNTg5Zjk3
YjczNjNlMzJhOTE5NDVkN2JhZTgwZGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcmdMaXN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJnTGlzdC5oCkBAIC0xMzMsMTcgKzEzMyw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgb3ZlcmZs
b3dDaGVja05vdE5lZWRlZCgpIHsgY2xlYXJOZWVkc092ZXJmbG93Q2hlY2soKTsgfQogCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZpbGwoc2l6ZV90IGNvdW50LCBj
b25zdCBGdW5jdG9yJiBmdW5jKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX3NpemUpOwotICAg
ICAgICBlbnN1cmVDYXBhY2l0eShjb3VudCk7Ci0gICAgICAgIGlmIChCYXNlOjpoYXNPdmVyZmxv
d2VkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc2l6ZSA9IGNvdW50OwotICAg
ICAgICBmdW5jKHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KCZzbG90Rm9yKDApKSk7Ci0gICAg
fQotCiBwcml2YXRlOgogICAgIHZvaWQgZXhwYW5kQ2FwYWNpdHkoKTsKICAgICB2b2lkIGV4cGFu
ZENhcGFjaXR5KGludCBuZXdDYXBhY2l0eSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWRUeXBlcy5jcHAKaW5kZXggOWFkNzVlZGMxNjRhZjUyNWM0ZjY2YjNiMzBmY2Vk
MTljZTY3YWNhNy4uNGUxYjgwMWJiYmUyMTZlMzNmMGVmNzg3NzIxMzRhMjk1MGZjNzRhMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcApAQCAtMTc4
OCw3ICsxNzg4LDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGRlcml2ZWRDb250ZXh0VHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGVyaXZlZENvbnRleHRUeXBlOyB9CiAgICAgdW5zaWduZWQgZXZh
bENvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9ldmFsQ29udGV4dFR5cGU7IH0KICAgICB1
bnNpZ25lZCBoYXNUYWlsQ2FsbHMoKSBjb25zdCB7IHJldHVybiBtX2hhc1RhaWxDYWxsczsgfQot
ICAgIHVuc2lnbmVkIGhhc0NoZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDaGVja3Bv
aW50czsgfQogICAgIHVuc2lnbmVkIGxpbmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUNv
dW50OyB9CiAgICAgdW5zaWduZWQgZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1
bW47IH0KIApAQCAtMTgyMSw3ICsxODIwLDYgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2V2
YWxDb250ZXh0VHlwZSA6IDI7CiAgICAgdW5zaWduZWQgbV9oYXNUYWlsQ2FsbHMgOiAxOwogICAg
IHVuc2lnbmVkIG1fY29kZVR5cGUgOiAyOwotICAgIHVuc2lnbmVkIG1faGFzQ2hlY2twb2ludHMg
OiAxOwogCiAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7CiAgICAgU291cmNlUGFyc2VNb2Rl
IG1fcGFyc2VNb2RlOwpAQCAtMjAyMCw3ICsyMDE4LDYgQEAgQUxXQVlTX0lOTElORSBVbmxpbmtl
ZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2soRGVjb2RlciYgZGVjb2RlciwgU3RydWN0dXJl
KgogCiAgICAgLCBtX2RpZE9wdGltaXplKHN0YXRpY19jYXN0PHVuc2lnbmVkPihNaXhlZFRyaVN0
YXRlKSkKICAgICAsIG1fYWdlKDApCi0gICAgLCBtX2hhc0NoZWNrcG9pbnRzKGNhY2hlZENvZGVC
bG9jay5oYXNDaGVja3BvaW50cygpKQogCiAgICAgLCBtX2ZlYXR1cmVzKGNhY2hlZENvZGVCbG9j
ay5mZWF0dXJlcygpKQogICAgICwgbV9wYXJzZU1vZGUoY2FjaGVkQ29kZUJsb2NrLnBhcnNlTW9k
ZSgpKQpAQCAtMjIwOSw3ICsyMjA2LDYgQEAgQUxXQVlTX0lOTElORSB2b2lkIENhY2hlZENvZGVC
bG9jazxDb2RlQmxvY2tUeXBlPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnMKICAgICBt
X3BhcnNlTW9kZSA9IGNvZGVCbG9jay5tX3BhcnNlTW9kZTsKICAgICBtX2NvZGVHZW5lcmF0aW9u
TW9kZSA9IGNvZGVCbG9jay5tX2NvZGVHZW5lcmF0aW9uTW9kZTsKICAgICBtX2NvZGVUeXBlID0g
Y29kZUJsb2NrLm1fY29kZVR5cGU7Ci0gICAgbV9oYXNDaGVja3BvaW50cyA9IGNvZGVCbG9jay5t
X2hhc0NoZWNrcG9pbnRzOwogCiAgICAgbV9tZXRhZGF0YS5lbmNvZGUoZW5jb2RlciwgY29kZUJs
b2NrLm1fbWV0YWRhdGEuZ2V0KCkpOwogICAgIG1fcmFyZURhdGEuZW5jb2RlKGVuY29kZXIsIGNv
ZGVCbG9jay5tX3JhcmVEYXRhLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCmluZGV4IDgxNmJiMmYzMmI1N2JlNmY0ODZkZGVi
OGY1ZTczMTEwZDU5Y2YwZjIuLjg3NzE2ZDI3N2EwZWJjMmRiNGUxNTljZjY5ZjliMmUyYjVjYTlm
NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcApAQCAtOTgsOCArOTgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBCRUdJTl9OT19T
RVRfUEMoKTsgICAgICAgICAgICAgICAgICAgIFwKICAgICBTRVRfUENfRk9SX1NUVUJTKCkKIAot
I2RlZmluZSBHRVQob3BlcmFuZCkgKGNhbGxGcmFtZS0+dW5jaGVja2VkUihvcGVyYW5kKSkKLSNk
ZWZpbmUgR0VUX0Mob3BlcmFuZCkgKGNhbGxGcmFtZS0+cihvcGVyYW5kKSkKKyNkZWZpbmUgR0VU
KG9wZXJhbmQpIChjYWxsRnJhbWUtPnVuY2hlY2tlZFIob3BlcmFuZC5vZmZzZXQoKSkpCisjZGVm
aW5lIEdFVF9DKG9wZXJhbmQpIChjYWxsRnJhbWUtPnIob3BlcmFuZC5vZmZzZXQoKSkpCiAKICNk
ZWZpbmUgUkVUVVJOX1RXTyhmaXJzdCwgc2Vjb25kKSBkbyB7ICAgICAgIFwKICAgICAgICAgcmV0
dXJuIGVuY29kZVJlc3VsdChmaXJzdCwgc2Vjb25kKTsgICAgICAgIFwKQEAgLTExNTIsNyArMTE1
Miw4IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVu
dCkKIHsKICAgICBCRUdJTigpOwogICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BDcmVhdGVM
ZXhpY2FsRW52aXJvbm1lbnQ+KCk7Ci0gICAgSlNTY29wZSogY3VycmVudFNjb3BlID0gY2FsbEZy
YW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fc2NvcGUpLlJlZ2lzdGVyOjpzY29wZSgpOworICAg
IGludCBzY29wZVJlZyA9IGJ5dGVjb2RlLm1fc2NvcGUub2Zmc2V0KCk7CisgICAgSlNTY29wZSog
Y3VycmVudFNjb3BlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNjb3BlUmVnKS5SZWdpc3Rlcjo6
c2NvcGUoKTsKICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFi
bGUqPihHRVRfQyhieXRlY29kZS5tX3N5bWJvbFRhYmxlKS5qc1ZhbHVlKCkpOwogICAgIEpTVmFs
dWUgaW5pdGlhbFZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9pbml0aWFsVmFsdWUpLmpzVmFsdWUo
KTsKICAgICBBU1NFUlQoaW5pdGlhbFZhbHVlID09IGpzVW5kZWZpbmVkKCkgfHwgaW5pdGlhbFZh
bHVlID09IGpzVERaVmFsdWUoKSk7CkBAIC0xMTY3LDcgKzExNjgsOCBAQCBTTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfcHVzaF93aXRoX3Njb3BlKQogICAgIEpTT2JqZWN0KiBuZXdTY29wZSA9IEdF
VF9DKGJ5dGVjb2RlLm1fbmV3U2NvcGUpLmpzVmFsdWUoKS50b09iamVjdChnbG9iYWxPYmplY3Qp
OwogICAgIENIRUNLX0VYQ0VQVElPTigpOwogCi0gICAgSlNTY29wZSogY3VycmVudFNjb3BlID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRSKGJ5dGVjb2RlLm1fY3VycmVudFNjb3BlKS5SZWdpc3Rlcjo6
c2NvcGUoKTsKKyAgICBpbnQgc2NvcGVSZWcgPSBieXRlY29kZS5tX2N1cnJlbnRTY29wZS5vZmZz
ZXQoKTsKKyAgICBKU1Njb3BlKiBjdXJyZW50U2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIo
c2NvcGVSZWcpLlJlZ2lzdGVyOjpzY29wZSgpOwogICAgIFJFVFVSTihKU1dpdGhTY29wZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIGN1cnJlbnRTY29wZSwgbmV3U2NvcGUpKTsKIH0KIApAQCAt
MTE3Niw3ICsxMTc4LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfc2NvcGVf
Zm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsKQogICAgIEJFR0lOKCk7CiAgICAgYXV0byBi
eXRlY29kZSA9IHBjLT5hczxPcFJlc29sdmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw+
KCk7CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSk7Ci0gICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZSkuUmVnaXN0ZXI6OnNjb3BlKCk7CisgICAgSlNTY29w
ZSogc2NvcGUgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoYnl0ZWNvZGUubV9zY29wZS5vZmZzZXQo
KSkuUmVnaXN0ZXI6OnNjb3BlKCk7CiAgICAgSlNWYWx1ZSByZXNvbHZlZFNjb3BlID0gSlNTY29w
ZTo6cmVzb2x2ZVNjb3BlRm9ySG9pc3RpbmdGdW5jRGVjbEluRXZhbChnbG9iYWxPYmplY3QsIHNj
b3BlLCBpZGVudCk7CiAKICAgICBDSEVDS19FWENFUFRJT04oKTsKQEAgLTExOTAsNyArMTE5Miw3
IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3Njb3BlKQogICAgIGF1dG8gYnl0
ZWNvZGUgPSBwYy0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLm1fdmFyKTsKLSAgICBKU1Njb3BlKiBz
Y29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRlY29kZS5tX3Njb3BlKS5SZWdpc3Rlcjo6
c2NvcGUoKTsKKyAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+dW5jaGVja2VkUihieXRl
Y29kZS5tX3Njb3BlLm9mZnNldCgpKS5SZWdpc3Rlcjo6c2NvcGUoKTsKICAgICBKU09iamVjdCog
cmVzb2x2ZWRTY29wZSA9IEpTU2NvcGU6OnJlc29sdmUoZ2xvYmFsT2JqZWN0LCBzY29wZSwgaWRl
bnQpOwogICAgIC8vIFByb3h5IGNhbiB0aHJvdyBhbiBlcnJvciBoZXJlLCBlLmcuIFByb3h5IGlu
IHdpdGggc3RhdGVtZW50J3MgQHVuc2NvcGFibGVzLgogICAgIENIRUNLX0VYQ0VQVElPTigpOwpA
QCAtMTQzNSw3ICsxNDM3LDcgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19hcnJheV9i
dWZmZXIpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wTmV3
QXJyYXlCdWZmZXI+KCk7Ci0gICAgQVNTRVJUKGJ5dGVjb2RlLm1faW1tdXRhYmxlQnV0dGVyZmx5
LmlzQ29uc3RhbnQoKSk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkub2Zmc2V0KCkpKTsKICAgICBKU0lt
bXV0YWJsZUJ1dHRlcmZseSogaW1tdXRhYmxlQnV0dGVyZmx5ID0gYml0d2lzZV9jYXN0PEpTSW1t
dXRhYmxlQnV0dGVyZmx5Kj4oR0VUX0MoYnl0ZWNvZGUubV9pbW11dGFibGVCdXR0ZXJmbHkpLmpz
VmFsdWUoKS5hc0NlbGwoKSk7CiAgICAgYXV0byYgcHJvZmlsZSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KGNvZGVCbG9jaykubV9hcnJheUFsbG9jYXRpb25Qcm9maWxlOwogCkBAIC0xNDU0LDcgKzE0NTYs
NyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2FycmF5X2J1ZmZlcikKICAgICAgICAg
Ly8gV2UgYWxzbyBjYW5ub3QgYWxsb2NhdGUgYSBuZXcgYnV0dGVyZmx5IGZyb20gY29tcGlsYXRp
b24gdGhyZWFkcyBzaW5jZSBpdCdzIGludmFsaWQgdG8gYWxsb2NhdGUgY2VsbHMgZnJvbQogICAg
ICAgICAvLyBhIGNvbXBpbGF0aW9uIHRocmVhZC4KICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVu
Y2UoKTsKLSAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGJ5dGVjb2RlLm1faW1t
dXRhYmxlQnV0dGVyZmx5KS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5KTsK
KyAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKGJ5dGVjb2RlLm1faW1tdXRhYmxl
QnV0dGVyZmx5Lm9mZnNldCgpKS5zZXQodm0sIGNvZGVCbG9jaywgaW1tdXRhYmxlQnV0dGVyZmx5
KTsKICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0RGF0YS5jcHAKaW5kZXggNDdiMjQ3NDE4
Y2E4OGVmZDFiNzhlNjMxMWI2NzVkMWVmYTVhNWZmMC4uNGJkMTkyYTZjNzdlZmMwMjZlN2E5NWE1
YjdiZWM3MTI0MzY3N2U3OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29uc3RydWN0RGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29uc3RydWN0RGF0YS5jcHAKQEAgLTM1LDExICszNSw2IEBACiBuYW1lc3BhY2UgSlNDIHsKIAog
SlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IGNvbnN0cnVjdG9yT2JqZWN0LCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25zdCBjaGFyKiBlcnJv
ck1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIGNvbnN0cnVjdChnbG9iYWxPYmplY3QsIGNvbnN0cnVj
dG9yT2JqZWN0LCBjb25zdHJ1Y3Rvck9iamVjdCwgYXJncywgZXJyb3JNZXNzYWdlKTsKLX0KLQot
SlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVl
IGNvbnN0cnVjdG9yT2JqZWN0LCBKU1ZhbHVlIG5ld1RhcmdldCwgY29uc3QgQXJnTGlzdCYgYXJn
cywgY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC01
MSw5ICs0NiwxMCBAQCBKU09iamVjdCogY29uc3RydWN0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgY29uc3RydWN0b3JPYmplY3QsIEpTVgogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNvbnN0cnVjdChn
bG9iYWxPYmplY3QsIGNvbnN0cnVjdG9yT2JqZWN0LCBjb25zdHJ1Y3RUeXBlLCBjb25zdHJ1Y3RE
YXRhLCBhcmdzLCBuZXdUYXJnZXQpKTsgIAorICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
Y29uc3RydWN0KGdsb2JhbE9iamVjdCwgY29uc3RydWN0b3JPYmplY3QsIGNvbnN0cnVjdFR5cGUs
IGNvbnN0cnVjdERhdGEsIGFyZ3MsIGNvbnN0cnVjdG9yT2JqZWN0KSk7CiB9CiAKKwogSlNPYmpl
Y3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGNvbnN0
cnVjdG9yT2JqZWN0LCBDb25zdHJ1Y3RUeXBlIGNvbnN0cnVjdFR5cGUsIGNvbnN0IENvbnN0cnVj
dERhdGEmIGNvbnN0cnVjdERhdGEsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIEpTVmFsdWUgbmV3VGFy
Z2V0KQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0cnVjdERhdGEuaAppbmRleCBmYjYxOTc0YTdkYjM5YzQ5
MWY5ZjkzYmFlYjZjYWMxMjYyMWYzYmEyLi5kMGFlMDBiYTExZDdjZWUyNGRmZmFlOTE5MTE5Njdl
MDJhYTZlZGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25z
dHJ1Y3REYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RydWN0
RGF0YS5oCkBAIC02MCw4ICs2MCw2IEBAIHN0cnVjdCBDb25zdHJ1Y3REYXRhIHsKIAogLy8gQ29u
dmVuaWVuY2Ugd3JhcHBlciBzbyB5b3UgZG9uJ3QgbmVlZCB0byBkZWFsIHdpdGggQ2FsbERhdGEg
YW5kIENhbGxUeXBlIHVubGVzcyB5b3UgYXJlIGdvaW5nIHRvIHVzZSB0aGVtLgogSlNfRVhQT1JU
X1BSSVZBVEUgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgZnVu
Y3Rpb25PYmplY3QsIGNvbnN0IEFyZ0xpc3QmLCBjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpOwot
SlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUgZnVuY3Rpb25PYmplY3QsIEpTVmFsdWUgbmV3VGFyZ2V0LCBjb25zdCBBcmdMaXN0Jiwg
Y29uc3QgY2hhciogZXJyb3JNZXNzYWdlKTsKLQogSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3Qq
IGNvbnN0cnVjdChKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgY29uc3RydWN0b3IsIENvbnN0cnVj
dFR5cGUsIGNvbnN0IENvbnN0cnVjdERhdGEmLCBjb25zdCBBcmdMaXN0JiwgSlNWYWx1ZSBuZXdU
YXJnZXQpOwogCiBBTFdBWVNfSU5MSU5FIEpTT2JqZWN0KiBjb25zdHJ1Y3QoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBjb25zdHJ1Y3Rvck9iamVjdCwgQ29uc3RydWN0VHlw
ZSBjb25zdHJ1Y3RUeXBlLCBjb25zdCBDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGlyZWN0QXJndW1lbnRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rp
cmVjdEFyZ3VtZW50cy5jcHAKaW5kZXggNGIzNDYxZGUyMmU3NmY3ZGJlMzE4Mzk0MjQ1YTkzYzU3
NTA5ZjM4Ny4uYTY3OTVkYTFlZGNjZjMxMDIyYWMyZGQ5YWVmYWZkNDNhMDFhNWM4NSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCkBA
IC0xMzcsMTkgKzEzNywyMCBAQCB2b2lkIERpcmVjdEFyZ3VtZW50czo6dW5tYXBBcmd1bWVudChW
TSYgdm0sIHVuc2lnbmVkIGluZGV4KQogICAgIG1fbWFwcGVkQXJndW1lbnRzLmF0KGluZGV4LCBp
bnRlcm5hbExlbmd0aCgpKSA9IHRydWU7CiB9CiAKLXZvaWQgRGlyZWN0QXJndW1lbnRzOjpjb3B5
VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmlyc3RF
bGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIERpcmVj
dEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVzdCwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFtX21hcHBlZEFy
Z3VtZW50cykgewogICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IHN0ZDo6bWluKGxlbmd0aCArIG9m
ZnNldCwgbV9sZW5ndGgpOwogICAgICAgICB1bnNpZ25lZCBpOworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgc3RhcnQgPSBmaXJzdEVsZW1lbnREZXN0IC0gb2Zmc2V0OwogICAgICAgICBmb3IgKGkg
PSBvZmZzZXQ7IGkgPCBsaW1pdDsgKytpKQotICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtp
IC0gb2Zmc2V0XSA9IHN0b3JhZ2UoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+
cihzdGFydCArIGkpID0gc3RvcmFnZSgpW2ldLmdldCgpOwogICAgICAgICBmb3IgKDsgaSA8IGxl
bmd0aDsgKytpKQotICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpIC0gb2Zmc2V0XSA9IGdl
dChnbG9iYWxPYmplY3QsIGkpOworICAgICAgICAgICAgY2FsbEZyYW1lLT5yKHN0YXJ0ICsgaSkg
PSBnZXQoZ2xvYmFsT2JqZWN0LCBpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEdl
bmVyaWNBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGZpcnN0RWxlbWVu
dERlc3QsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBHZW5lcmljQXJndW1lbnRzOjpjb3B5VG9Bcmd1
bWVudHMoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGZpcnN0RWxlbWVudERlc3QsIG9mZnNldCwg
bGVuZ3RoKTsKIH0KIAogdW5zaWduZWQgRGlyZWN0QXJndW1lbnRzOjptYXBwZWRBcmd1bWVudHNT
aXplKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFy
Z3VtZW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRz
LmgKaW5kZXggOGQ5NjQyYTJjOTQwNDA4MGI5MTNhYzI3MGNkMDEzYzM5ZWNkYTgxNy4uMGE2YjFh
MDY2MDkwZTJjYTVmNTZmNTBhOWM1M2EyY2ZjZTc3MmUwYSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmgKQEAgLTE0NCw3ICsxNDQsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBHZW5lcmljQXJndW1lbnRzPERpcmVjdEFyZ3VtZW50cz46
OmlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IoaW5kZXgsIG1fbGVuZ3RoKTsKICAgICB9CiAK
LSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0
RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lk
IGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdp
c3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7
CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9HZW5lcmljQXJndW1lbnRzLmgKaW5kZXggMDc0YzIxNjJkOGRhMTY0NzA2ZjQwMDRi
ZGFiM2RhZWViMjcyY2JiYy4uYjMxYjcwYWJkMDBjZWVhZjVlYmI3ZWUxZDQ2N2RhNDg4NzBkNTFj
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3Vt
ZW50cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVu
dHMuaApAQCAtNTksNyArNTksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRNb2RpZmllZEFy
Z3VtZW50RGVzY3JpcHRvcihWTSYsIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBsZW5ndGgpOwog
ICAgIGJvb2wgaXNNb2RpZmllZEFyZ3VtZW50RGVzY3JpcHRvcih1bnNpZ25lZCBpbmRleCwgdW5z
aWduZWQgbGVuZ3RoKTsKIAotICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0
KiwgSlNWYWx1ZSogZmlyc3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgIHZvaWQgY29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZy
YW1lKiwgVmlydHVhbFJlZ2lzdGVyIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKTsKIAogICAgIHVzaW5nIE1vZGlmaWVkQXJndW1lbnRzUHRyID0gQ2Fn
ZWRCYXJyaWVyUHRyPEdpZ2FjYWdlOjpQcmltaXRpdmUsIGJvb2w+OwogICAgIE1vZGlmaWVkQXJn
dW1lbnRzUHRyIG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKaW5k
ZXggZTBhYWJmNWYyZWUxODViN2QxMzMxNjAzN2Q4YzFkODg4NDI0Njg1MC4uMjE4MmE2MmIxMzAz
NDNhZjU2NzIxNzM2M2EzZjVjMWI4ODYxODFmZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5oCkBAIC0yOTcsNyAr
Mjk3LDcgQEAgYm9vbCBHZW5lcmljQXJndW1lbnRzPFR5cGU+Ojppc01vZGlmaWVkQXJndW1lbnRE
ZXNjcmlwdG9yKHVuc2lnbmVkIGluZGV4LCB1bnNpZ24KIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
VHlwZT4KLXZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29weVRvQXJndW1lbnRzKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBHZW5lcmljQXJndW1lbnRzPFR5cGU+
Ojpjb3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtMzA1LDkg
KzMwNSw5IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6Y29weVRvQXJndW1lbnRzKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsCiAgICAgVHlwZSogdGhpc09iamVjdCA9
IHN0YXRpY19jYXN0PFR5cGUqPih0aGlzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKICAgICAgICAgaWYgKHRoaXNPYmplY3QtPmlzTWFwcGVkQXJndW1lbnQo
aSArIG9mZnNldCkpCi0gICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ldID0gdGhpc09iamVj
dC0+Z2V0SW5kZXhRdWlja2x5KGkgKyBvZmZzZXQpOworICAgICAgICAgICAgY2FsbEZyYW1lLT5y
KGZpcnN0RWxlbWVudERlc3QgKyBpKSA9IHRoaXNPYmplY3QtPmdldEluZGV4UXVpY2tseShpICsg
b2Zmc2V0KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBmaXJzdEVsZW1lbnREZXN0W2ld
ID0gZ2V0KGdsb2JhbE9iamVjdCwgaSArIG9mZnNldCk7CisgICAgICAgICAgICBjYWxsRnJhbWUt
PnIoZmlyc3RFbGVtZW50RGVzdCArIGkpID0gZ2V0KGdsb2JhbE9iamVjdCwgaSArIG9mZnNldCk7
CiAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB2b2lkKCkpOwogICAgICAg
ICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAppbmRl
eCA2ZDA3NTkxNzExZWVkYmMyOGUwZTRkYTc4NDk4MjJhYjhkNjZmNWQxLi40NGM3ZTUyMGYxYzBh
MjQwYThiNjY2NWEyNzRhNTE0NDU5Mzg3NjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5LmNwcApAQCAtMTIzMCw3ICsxMjMwLDcgQEAgdm9pZCBKU0FycmF5OjpmaWxs
QXJnTGlzdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciYgYXIKICAgICAgICAgYXJncy5hcHBlbmQoZ2V0KGdsb2JhbE9iamVjdCwgaSkpOwogfQogCi12
b2lkIEpTQXJyYXk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlKiBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKK3ZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVt
ZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKQEAgLTEyNjksNyArMTI2OSw3IEBAIHZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1l
bnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVuCiAg
ICAgICAgICAgICBkb3VibGUgdiA9IGJ1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmF0KHRo
aXMsIGkpOwogICAgICAgICAgICAgaWYgKHYgIT0gdikKICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0gPSBKU1ZhbHVlKEpTVmFs
dWU6OkVuY29kZUFzRG91YmxlLCB2KTsKKyAgICAgICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVs
ZW1lbnREZXN0ICsgaSAtIG9mZnNldCkgPSBKU1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91Ymxl
LCB2KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xMjk0LDExICsxMjk0
LDExIEBAIHZvaWQgSlNBcnJheTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUqIGZpcnN0RWxlbWVuCiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgdiA9IHZlY3RvcltpXTsKICAgICAgICAgaWYgKCF2KQogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGZpcnN0RWxlbWVudERlc3RbaSAtIG9mZnNldF0gPSB2LmdldCgpOworICAgICAg
ICBjYWxsRnJhbWUtPnIoZmlyc3RFbGVtZW50RGVzdCArIGkgLSBvZmZzZXQpID0gdi5nZXQoKTsK
ICAgICB9CiAgICAgCiAgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBmaXJz
dEVsZW1lbnREZXN0W2kgLSBvZmZzZXRdID0gZ2V0KGdsb2JhbE9iamVjdCwgaSk7CisgICAgICAg
IGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSAtIG9mZnNldCkgPSBnZXQoZ2xvYmFs
T2JqZWN0LCBpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgdm9pZCgpKTsK
ICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKaW5kZXggMzEx
NjViNWZmNDkyNTRjYzFhNmM0NzkwMmI3OTEwYWM0YTdkOWJmZi4uMzE3OTQ5YzU3MmExMWI3NWFk
YzE4M2FjOWU0MTQ0ZjY2Y2Y2YWI1MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXkuaApAQCAtMTYzLDcgKzE2Myw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGZpbGxBcmdMaXN0KEpTR2xvYmFsT2JqZWN0KiwgTWFya2VkQXJndW1l
bnRCdWZmZXImKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvcHlUb0FyZ3VtZW50cyhK
U0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvcHlUb0Fy
Z3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBmaXJz
dEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICBK
U19FWFBPUlRfUFJJVkFURSBib29sIGlzSXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZh
YmxlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1t
dXRhYmxlQnV0dGVyZmx5LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTSW1t
dXRhYmxlQnV0dGVyZmx5LmNwcAppbmRleCBlNDkwOTc1NjE2ZGFkMzkxMTQyMzgyYzk5M2U3OGQx
MmMxOTExYzJhLi5lMzJlOTQ5N2Q0NzgyOTUwMzNkYWE5OWE1OTM2ZGVhMTlhMWM0OWMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZs
eS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0
ZXJmbHkuY3BwCkBAIC00NiwxMyArNDYsMTMgQEAgdm9pZCBKU0ltbXV0YWJsZUJ1dHRlcmZseTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHZp
c2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSwg
YnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CiB9CiAKLXZvaWQgSlNJbW11dGFibGVCdXR0ZXJm
bHk6OmNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVu
dERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQordm9pZCBKU0ltbXV0YWJs
ZUJ1dHRlcmZseTo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUsIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpIHsKICAgICAgICAgaWYgKChpICsgb2Zmc2V0KSA8IHB1YmxpY0xlbmd0aCgpKQot
ICAgICAgICAgICAgZmlyc3RFbGVtZW50RGVzdFtpXSA9IGdldChpICsgb2Zmc2V0KTsKKyAgICAg
ICAgICAgIGNhbGxGcmFtZS0+cihmaXJzdEVsZW1lbnREZXN0ICsgaSkgPSBnZXQoaSArIG9mZnNl
dCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZpcnN0RWxlbWVudERlc3RbaV0gPSBqc1Vu
ZGVmaW5lZCgpOworICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGZpcnN0RWxlbWVudERlc3QgKyBp
KSA9IGpzVW5kZWZpbmVkKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0ltbXV0YWJsZUJ1dHRlcmZseS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNJbW11dGFibGVCdXR0ZXJmbHkuaAppbmRleCAwN2UxYThhMTBjM2Nk
YzcxMTdhY2EzZGM1NDNlZDdkZGIwZDQxZjNlLi5hY2I2ODQ4MTkxYTE5MDM1MjJiOWIzZTRkMDBm
OTY5ZTQwYjc4MTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0ltbXV0YWJsZUJ1dHRlcmZseS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTSW1tdXRhYmxlQnV0dGVyZmx5LmgKQEAgLTE0Nyw3ICsxNDcsNyBAQCBwdWJsaWM6CiAKICAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAg
ICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxl
bWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNv
cHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3Rl
ciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwgU3Vic3BhY2VBY2Nlc3M+CiAgICAgc3RhdGljIENvbXBs
ZXRlU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0xvY2suY3BwCmluZGV4IDE2YWEzNjlmNDg1MDcwNjFjMDYzNjE1MThhZTE1ZDJiYzY4
ZmI2ZGQuLmE2ZWIwZWE1ZjZhYWRlYjM3ZDI3Nzk0ZjdjOTEzZjY4MTY4MzQ5N2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcApAQCAtMjA0LDcgKzIwNCw2IEBAIHZv
aWQgSlNMb2NrOjp3aWxsUmVsZWFzZUxvY2soKQogeyAgIAogICAgIFJlZlB0cjxWTT4gdm0gPSBt
X3ZtOwogICAgIGlmICh2bSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0Uo
IXZtLT5oYXNDaGVja3BvaW50T1NSU2lkZVN0YXRlKCksICJSZWxlYXNpbmcgSlNMb2NrIGJ1dCBw
ZW5kaW5nIGNoZWNrcG9pbnQgc2lkZSBzdGF0ZSBzdGlsbCBhdmFpbGFibGUiKTsKICAgICAgICAg
dm0tPmRyYWluTWljcm90YXNrcygpOwogCiAgICAgICAgIGlmICghdm0tPnRvcENhbGxGcmFtZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dyYW1F
eGVjdXRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01vZHVsZVByb2dy
YW1FeGVjdXRhYmxlLmNwcAppbmRleCA1OTY4MDhjYWZjMGIwZjRjODQ3MGJkNzU5ZWQ5ZjQ5MTZj
NjY0NDg1Li5kYjA1MjU0ODgyNTMzOWE2YjEzMmJhNGU0NDJiMjExZDZkZTM3YmEwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Nb2R1bGVQcm9ncmFtRXhlY3V0YWJs
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGUuY3BwCkBAIC03NCw3ICs3NCw3IEBAIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBN
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6Y3JlYXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPCiAK
ICAgICBleGVjdXRhYmxlLT5tX3VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5zZXQoZ2xv
YmFsT2JqZWN0LT52bSgpLCBleGVjdXRhYmxlLCB1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlKTsK
IAotICAgIGV4ZWN1dGFibGUtPm1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZS5zZXQoZ2xv
YmFsT2JqZWN0LT52bSgpLCBleGVjdXRhYmxlLCBqc0Nhc3Q8U3ltYm9sVGFibGUqPih1bmxpbmtl
ZE1vZHVsZVByb2dyYW1Db2RlLT5jb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3Rlcih1bmxp
bmtlZE1vZHVsZVByb2dyYW1Db2RlLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3Rh
bnRSZWdpc3Rlck9mZnNldCgpKSkuZ2V0KCkpLT5jbG9uZVNjb3BlUGFydChnbG9iYWxPYmplY3Qt
PnZtKCkpKTsKKyAgICBleGVjdXRhYmxlLT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUu
c2V0KGdsb2JhbE9iamVjdC0+dm0oKSwgZXhlY3V0YWJsZSwganNDYXN0PFN5bWJvbFRhYmxlKj4o
dW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZS0+Y29uc3RhbnRSZWdpc3Rlcih1bmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlLT5tb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlQ29uc3RhbnRSZWdpc3Rl
ck9mZnNldCgpKS5nZXQoKSktPmNsb25lU2NvcGVQYXJ0KGdsb2JhbE9iamVjdC0+dm0oKSkpOwog
CiAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuY3BwCmluZGV4IDc0Y2NkZWIyNzk0Y2U1ZjRiYWE3NzE0MTAyMzg4MTVmODc2MzMw
MGUuLjE3NmY5OWQ0OWU5ODAxZmI3MzgxZDJhYWUxN2ExY2MwZDU2YWJhYmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCkBAIC01MDksOSArNTA5LDExIEBAIHN0
YXRpYyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQogICAgIGlmIChPcHRpb25zOjpz
b2Z0UmVzZXJ2ZWRab25lU2l6ZSgpIDwgT3B0aW9uczo6cmVzZXJ2ZWRab25lU2l6ZSgpICsgbWlu
aW11bVJlc2VydmVkWm9uZVNpemUpCiAgICAgICAgIE9wdGlvbnM6OnNvZnRSZXNlcnZlZFpvbmVT
aXplKCkgPSBPcHRpb25zOjpyZXNlcnZlZFpvbmVTaXplKCkgKyBtaW5pbXVtUmVzZXJ2ZWRab25l
U2l6ZTsKIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgLy8gRklYTUU6IE1ha2UgcHJvYmUg
T1NSIGV4aXQgd29yayBvbiAzMi1iaXQ6CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3Nzk1NgogICAgIE9wdGlvbnM6OnVzZVByb2JlT1NSRXhpdCgpID0g
ZmFsc2U7CisjZW5kaWYKIAogICAgIGlmICghT3B0aW9uczo6dXNlQ29kZUNhY2hlKCkpCiAgICAg
ICAgIE9wdGlvbnM6OmRpc2tDYWNoZVBhdGgoKSA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAppbmRleCAzYzc0MGQ0OGY2
MjQxYjAyNjA1ZmJmNTI1YmRkZjIzMTkyZDA5ZGIwLi4wODFkOTc4YTdiMmE2MjY2YWM1NTJjMzc5
ZDM4NDUwMDVkYzExZjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TY29wZWRBcmd1bWVudHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Njb3BlZEFyZ3VtZW50cy5jcHAKQEAgLTE0OCw5ICsxNDgsOSBAQCB2b2lkIFNjb3BlZEFyZ3Vt
ZW50czo6dW5tYXBBcmd1bWVudChWTSYgdm0sIHVpbnQzMl90IGkpCiAgICAgICAgIHN0b3JhZ2Uo
KVtpIC0gbmFtZWRMZW5ndGhdLmNsZWFyKCk7CiB9CiAKLXZvaWQgU2NvcGVkQXJndW1lbnRzOjpj
b3B5VG9Bcmd1bWVudHMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSogZmly
c3RFbGVtZW50RGVzdCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCit2b2lkIFNj
b3BlZEFyZ3VtZW50czo6Y29weVRvQXJndW1lbnRzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RFbGVtZW50RGVz
dCwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgR2VuZXJpY0FyZ3Vt
ZW50czo6Y29weVRvQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZmlyc3RFbGVtZW50RGVzdCwgb2Zm
c2V0LCBsZW5ndGgpOworICAgIEdlbmVyaWNBcmd1bWVudHM6OmNvcHlUb0FyZ3VtZW50cyhnbG9i
YWxPYmplY3QsIGNhbGxGcmFtZSwgZmlyc3RFbGVtZW50RGVzdCwgb2Zmc2V0LCBsZW5ndGgpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NvcGVkQXJndW1lbnRzLmgKaW5kZXggZTU4Y2IyMmVmZDQ4YzY3NGJmNWIxYjExMjgwYjUx
YWJjMGRlMDg0Yi4uZjg1ZTQ3ZGZiZWU4Y2E3YzM3MDRmMjllZDRjYjFiNGU5NzIwNDQ1NyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKQEAg
LTE0Miw3ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBHZW5lcmljQXJndW1lbnRz
PFNjb3BlZEFyZ3VtZW50cz46OmlzTW9kaWZpZWRBcmd1bWVudERlc2NyaXB0b3IoaW5kZXgsIG1f
dGFibGUtPmxlbmd0aCgpKTsKICAgICB9CiAKLSAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUqIGZpcnN0RWxlbWVudERlc3QsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhKU0dsb2JhbE9iamVj
dCosIENhbGxGcmFtZSosIFZpcnR1YWxSZWdpc3RlciBmaXJzdEVsZW1lbnREZXN0LCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICBERUNMQVJFX0lORk87CiAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggNTdjMmE3ODI5Mzg5OTI2YWRmOThm
YTdjZWEzMmIxYzZhZTQyZTJjMS4uYTlmZTc0YTRiN2Y0NDI5NTljYjBlODdhNmUwZjU4OTk3YTYy
NjZmNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMzQsNyArMzQsNiBA
QAogI2luY2x1ZGUgIkJvb2xlYW5PYmplY3QuaCIKICNpbmNsdWRlICJCdWlsdGluRXhlY3V0YWJs
ZXMuaCIKICNpbmNsdWRlICJCeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAi
Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGUuaCIKICNpbmNsdWRlICJDbG9uZWRBcmd1bWVudHMu
aCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKQEAgLTEw
NjMsMzEgKzEwNjIsOCBAQCB2b2lkIFZNOjpnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29uc2Vy
dmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQogICAgICAgICB9CiAgICAgfQogfQotCi12
b2lkIFZNOjpzY2FuU2lkZVN0YXRlKENvbnNlcnZhdGl2ZVJvb3RzJiByb290cykgY29uc3QKLXsK
LSAgICBBU1NFUlQoaGVhcC53b3JsZElzU3RvcHBlZCgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8m
IGl0ZXIgOiBtX2NoZWNrcG9pbnRTaWRlU3RhdGUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChz
aXplb2YoaXRlci52YWx1ZS0+dG1wcykgLyBzaXplb2YoSlNWYWx1ZSkgPT0gbWF4TnVtQ2hlY2tw
b2ludFRtcHMpOwotICAgICAgICByb290cy5hZGQoaXRlci52YWx1ZS0+dG1wcywgaXRlci52YWx1
ZS0+dG1wcyArIG1heE51bUNoZWNrcG9pbnRUbXBzKTsKLSAgICB9Ci19CiAjZW5kaWYKIAotdm9p
ZCBWTTo6YWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgc3Rk
Ojp1bmlxdWVfcHRyPENoZWNrcG9pbnRPU1JFeGl0U2lkZVN0YXRlPiYmIHBheWxvYWQpCi17Ci0g
ICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwotICAgIGF1dG8gYWRk
UmVzdWx0ID0gbV9jaGVja3BvaW50U2lkZVN0YXRlLmFkZChjYWxsRnJhbWUsIFdURk1vdmUocGF5
bG9hZCkpOwotICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gVk06
OmZpbmRDaGVja3BvaW50T1NSU2lkZVN0YXRlKENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAg
IEFTU0VSVChjdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBhdXRvIHNpZGVT
dGF0ZSA9IG1fY2hlY2twb2ludFNpZGVTdGF0ZS50YWtlKGNhbGxGcmFtZSk7Ci0gICAgcmV0dXJu
IHNpZGVTdGF0ZTsKLX0KLQogdm9pZCBsb2dTYW5pdGl6ZVN0YWNrKFZNJiB2bSkKIHsKICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZVNhbml0aXplU3RhY2soKSAmJiB2bS50b3BDYWxsRnJhbWUpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDdkYTMyYTcyNjI0ZjBiZmFhZjRlNTlh
NWY3ZGE0NGMyNzIzZGM1NzguLmY3NzFkMDkyNTZhZjkxNTAzMGRhNTllZTMxODI4MGYzNGRmNzEw
YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMTAzLDEyICsxMDMsMTAgQEAg
bmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBCdWlsdGluRXhlY3V0YWJsZXM7CiBjbGFzcyBCeXRlY29k
ZUludHJpbnNpY1JlZ2lzdHJ5OwogY2xhc3MgQ2FsbEZyYW1lOwotc3RydWN0IENoZWNrcG9pbnRP
U1JFeGl0U2lkZVN0YXRlOwogY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgQ29kZUNhY2hlOwogY2xh
c3MgQ29tbW9uSWRlbnRpZmllcnM7CiBjbGFzcyBDb21wYWN0VmFyaWFibGVNYXA7Ci1jbGFzcyBD
b25zZXJ2YXRpdmVSb290czsKIGNsYXNzIEN1c3RvbUdldHRlclNldHRlcjsKIGNsYXNzIERPTUF0
dHJpYnV0ZUdldHRlclNldHRlcjsKIGNsYXNzIERhdGVJbnN0YW5jZTsKQEAgLTk2MCwxMSArOTU4
LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoQ29uc2Vy
dmF0aXZlUm9vdHMmKTsKIAotICAgIHZvaWQgYWRkQ2hlY2twb2ludE9TUlNpZGVTdGF0ZShDYWxs
RnJhbWUqLCBzdGQ6OnVuaXF1ZV9wdHI8Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+JiYpOwot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDaGVja3BvaW50T1NSRXhpdFNpZGVTdGF0ZT4gZmluZENoZWNr
cG9pbnRPU1JTaWRlU3RhdGUoQ2FsbEZyYW1lKik7Ci0gICAgYm9vbCBoYXNDaGVja3BvaW50T1NS
U2lkZVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9jaGVja3BvaW50U2lkZVN0YXRlLnNpemUoKTsg
fQotICAgIHZvaWQgc2NhblNpZGVTdGF0ZShDb25zZXJ2YXRpdmVSb290cyYpIGNvbnN0OwotCiAg
ICAgVk1FbnRyeVNjb3BlKiBlbnRyeVNjb3BlOwogCiAgICAgSlNPYmplY3QqIHN0cmluZ1JlY3Vy
c2lvbkNoZWNrRmlyc3RPYmplY3QgeyBudWxscHRyIH07CkBAIC0xMjE1LDcgKzEyMDgsNiBAQCBw
cml2YXRlOgogICAgIExvY2sgbV9zY3JhdGNoQnVmZmVyTG9jazsKICAgICBWZWN0b3I8U2NyYXRj
aEJ1ZmZlcio+IG1fc2NyYXRjaEJ1ZmZlcnM7CiAgICAgc2l6ZV90IG1fc2l6ZU9mTGFzdFNjcmF0
Y2hCdWZmZXIgeyAwIH07Ci0gICAgSGFzaE1hcDxDYWxsRnJhbWUqLCBzdGQ6OnVuaXF1ZV9wdHI8
Q2hlY2twb2ludE9TUkV4aXRTaWRlU3RhdGU+PiBtX2NoZWNrcG9pbnRTaWRlU3RhdGU7CiAgICAg
SW5saW5lV2F0Y2hwb2ludFNldCBtX3ByaW1pdGl2ZUdpZ2FjYWdlRW5hYmxlZDsKICAgICBGdW5j
dGlvbkhhc0V4ZWN1dGVkQ2FjaGUgbV9mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPENvbnRyb2xGbG93UHJvZmlsZXI+IG1fY29udHJvbEZsb3dQcm9maWxlcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwCmluZGV4IGUxNDg0
MDBkNDg3ZGZjNjRlNDQwNTRkZGFkYjA4NTg5NzJlMzlhMjYuLjgxYzlmMWY2NzQ3MDc5ZWQ4MzEy
NjYyYzA4MzAwYzZjYzM2MjhlMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9WTUluc3BlY3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZN
SW5zcGVjdG9yLmNwcApAQCAtMzk3LDggKzM5Nyw4IEBAIHZvaWQgVk1JbnNwZWN0b3I6OmR1bXBS
ZWdpc3RlcnMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgY29uc3QgUmVnaXN0ZXIqIGl0Owog
ICAgIGNvbnN0IFJlZ2lzdGVyKiBlbmQ7CiAKLSAgICBpdCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJz
KCkgKyAoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkpOwotICAgIGVuZCA9IGNhbGxGcmFtZS0+cmVnaXN0ZXJzKCkgKyAoQ2FsbEZyYW1lU2xv
dDo6dGhpc0FyZ3VtZW50IC0gMSk7CisgICAgaXQgPSBjYWxsRnJhbWUtPnJlZ2lzdGVycygpICsg
Q2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCk7
CisgICAgZW5kID0gY2FsbEZyYW1lLT5yZWdpc3RlcnMoKSArIENhbGxGcmFtZVNsb3Q6OnRoaXNB
cmd1bWVudCAtIDE7CiAgICAgd2hpbGUgKGl0ID4gZW5kKSB7CiAgICAgICAgIEpTVmFsdWUgdiA9
IGl0LT5qc1ZhbHVlKCk7CiAgICAgICAgIGludCByZWdpc3Rlck51bWJlciA9IGl0IC0gY2FsbEZy
YW1lLT5yZWdpc3RlcnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21GdW5jdGlvbkNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUZ1bmN0aW9uQ29kZUJsb2NrLmgKaW5kZXggMmY0YjFjN2RlNmE4N2M3NDExZTg2ZTg3ZTdmMTky
NDczNTJjMGY4Yi4uZjY4OGE3YzllOTQyNmQ5ZTBiZWEzYWYwY2ZmYWYyYzI3ZGQ1YTU2NyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2Nr
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2Nr
LmgKQEAgLTcyLDExICs3MiwxMSBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPHVpbnQ2NF90
PiYgY29uc3RhbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudHM7IH0KICAgICBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gKm1faW5zdHJ1
Y3Rpb25zOyB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IGdldENvbnN0YW50KFZpcnR1
YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzW3JlZy50b0NvbnN0YW50
SW5kZXgoKV07IH0KLSAgICBBTFdBWVNfSU5MSU5FIFR5cGUgZ2V0Q29uc3RhbnRUeXBlKFZpcnR1
YWxSZWdpc3RlciByZWcpIGNvbnN0CisgICAgQUxXQVlTX0lOTElORSB1aW50NjRfdCBnZXRDb25z
dGFudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzW2luZGV4IC0gRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXhdOyB9CisgICAgQUxXQVlTX0lOTElORSBUeXBlIGdldENvbnN0
YW50VHlwZShpbnQgaW5kZXgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoT3B0aW9uczo6
ZHVtcEdlbmVyYXRlZFdhc21CeXRlY29kZXMoKSk7Ci0gICAgICAgIHJldHVybiBtX2NvbnN0YW50
VHlwZXNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsKKyAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRU
eXBlc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsKICAgICB9CiAKICAgICB2
b2lkIHNldEluc3RydWN0aW9ucyhzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRv
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTExJbnRHZW5lcmF0b3IuY3Bw
CmluZGV4IDU3OWQyN2JiN2QxMjE5ZTcyYzAzZWMzZjVjZDgyNjA0NmZiNTA3NzEuLmRkMWEwZjc5
OTY1NmE2ZDk0MGUwNjliMGU2ZWRjYjZmZWJmMmQ3YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21MTEludEdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUxMSW50R2VuZXJhdG9yLmNwcApAQCAtMjQyLDkgKzI0Miw2IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgc2V0UGFyc2VyKEZ1bmN0aW9uUGFyc2VyPExMSW50R2VuZXJh
dG9yPiogcGFyc2VyKSB7IG1fcGFyc2VyID0gcGFyc2VyOyB9OwogCi0gICAgLy8gV2UgbmVlZCB0
aGlzIGZvciBhdXRvZ2VuZXJhdGVkIHRlbXBsYXRlcyB1c2VkIGJ5IEpTIGJ5dGVjb2Rlcy4KLSAg
ICB2b2lkIHNldFVzZXNDaGVja3BvaW50cygpIGNvbnN0IHsgVU5SRUFDSEFCTEVfRk9SX1BMQVRG
T1JNKCk7IH0KLQogICAgIHZvaWQgZHVtcChjb25zdCBDb250cm9sU3RhY2smLCBjb25zdCBTdGFj
ayopIHsgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9w
ZXJhdGlvbnMuY3BwCmluZGV4IDU2Y2E1NDdhNzRhMzdlOWEwMTA2NTFhNmI2MTM0NzJlZjNmYzM2
YWEuLmRiZmI1MDBjZTU1OGYyOWViMjZlMWRkZDEwZWI5NTE2ZTAwMmY1OTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGVyYXRpb25zLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3BlcmF0aW9ucy5jcHAKQEAgLTc0NCw3ICs3NDQs
NyBAQCB2b2lkKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbldhc21Ub0pTRXhjZXB0aW9uKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBXYXNtOjpFeGNlcAogICAgIC8vIGZvciBleGNlcHRpb25zIGZpcnN0
IGxvYWQgY2FsbEZyYW1lRm9yQ2F0Y2ggaW5mbyBjYWxsIGZyYW1lIHJlZ2lzdGVyIGJlZm9yZSBq
dW1waW5nCiAgICAgLy8gdG8gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLiBJZiB3ZSBkaWQgdGhpcywg
d2UgY291bGQgcmVtb3ZlIHRoaXMgdGVycmlibGUgaGFjay4KICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwNDQwCi0gICAgYml0d2lzZV9jYXN0PHVpbnQ2
NF90Kj4oY2FsbEZyYW1lKVtzdGF0aWNfY2FzdDxpbnQ+KENhbGxGcmFtZVNsb3Q6OmNhbGxlZSld
ID0gYml0d2lzZV9jYXN0PHVpbnQ2NF90PihpbnN0YW5jZS0+bW9kdWxlKCkpOworICAgIGJpdHdp
c2VfY2FzdDx1aW50NjRfdCo+KGNhbGxGcmFtZSlbQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlXSA9IGJp
dHdpc2VfY2FzdDx1aW50NjRfdD4oaW5zdGFuY2UtPm1vZHVsZSgpKTsKICAgICByZXR1cm4gdm0u
dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3c7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21TbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbVNsb3dQYXRocy5jcHAKaW5kZXggNTRmNjM2YWMxYjUwNzVkMWM2NjdiMzhhOTAzMTMy
OTBkNWYzMzNjZS4uOTI3YTY5ODRhM2JlMDE0Y2YzZWE3ZDY3ZjAzNDU4NGVlYmViNjBjZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVNsb3dQYXRocy5jcHAKQEAgLTc2LDcg
Kzc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAKICNkZWZpbmUgUkVB
RCh2aXJ0dWFsUmVnaXN0ZXIpIFwKICAgICAodmlydHVhbFJlZ2lzdGVyLmlzQ29uc3RhbnQoKSBc
Ci0gICAgICAgID8gSlNWYWx1ZTo6ZGVjb2RlKENPREVfQkxPQ0soKS0+Z2V0Q29uc3RhbnQodmly
dHVhbFJlZ2lzdGVyKSkgXAorICAgICAgICA/IEpTVmFsdWU6OmRlY29kZShDT0RFX0JMT0NLKCkt
PmdldENvbnN0YW50KHZpcnR1YWxSZWdpc3Rlci5vZmZzZXQoKSkpIFwKICAgICAgICAgOiBjYWxs
RnJhbWUtPnIodmlydHVhbFJlZ2lzdGVyKSkKIAogaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNl
dEhldXJpc3RpY3MoV2FzbTo6TExJbnRDYWxsZWUqIGNhbGxlZSwgV2FzbTo6RnVuY3Rpb25Db2Rl
QmxvY2sqIGNvZGVCbG9jaywgV2FzbTo6SW5zdGFuY2UqIGluc3RhbmNlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTgyZjFhZWNjYjZjZjA2NzNmNjA3ZWE1
MzkwZDQ3ZDk0YzFlZmUxNS4uNzZlYzZmZWUwNTc0YjFjNjg0ZDIwOTcxOGRiYmZkOTU0ZGZhZjFk
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zOTMsNyAr
MzkzLDYgQEAKIAkJNTMxMUJENTcxRUE3RTFBMTAwNTI1MjgxIC8qIFNpZ25hbHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2lnbmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MzExQkQ1OTFFQTgxQTk2MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRNZXNzYWdlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTFCRDVCMUVBODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRN
ZXNzYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRocmVhZE1l
c3NhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MzM4RUJBNDIzQUIwNEQx
MDAzODI2NjIgLyogRW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM1MzRGMjkxRUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNl
cHRpb25zLmRlZnMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLm1pZzsgcGF0aCA9IE1hY2hFeGNlcHRp
b25zLmRlZnM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOUVCMDYyMUQ1NTI4NDIw
MEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExFQkRlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFQzI1M0MxRTk1
QUQzMDAwMDgzMUI5IC8qIFByaW9yaXR5UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUHJpb3JpdHlRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
OTg2LDcgKzk4NSw2IEBACiAJCQkJQThBNDcyOTgxNTFBODI1QTAwNDEyM0ZGIC8qIGR0b2EuaCAq
LywKIAkJCQlGRTA1RkFFNjFGREIyMTQzMDAwOTMyMzAgLyogRHVtYlB0clRyYWl0cy5oICovLAog
CQkJCUFENjUzREE4MjAwNkI2QzIwMEQ4MjBENyAvKiBEdW1iVmFsdWVUcmFpdHMuaCAqLywKLQkJ
CQk1MzM4RUJBNDIzQUIwNEQxMDAzODI2NjIgLyogRW51bUNsYXNzT3BlcmF0b3JPdmVybG9hZHMu
aCAqLywKIAkJCQkxQUVBODhFMTFENkJCQ0Y0MDBFNUFENjQgLyogRW51bVRyYWl0cy5oICovLAog
CQkJCUFEN0M0MzRBMUREMkE0QTcwMDI2ODg4QiAvKiBFeHBlY3RlZC5oICovLAogCQkJCUE4QTQ3
MjlGMTUxQTgyNUEwMDQxMjNGRiAvKiBFeHBvcnRNYWNyb3MuaCAqLywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL0JpdG1hcC5oIGIvU291cmNlL1dURi93dGYvQml0bWFwLmgKaW5kZXggYjQ2
ZGE5ZTg1YWI5YjY4NjI0MzhhNjkyZTM2NmE3NTA1NGRjYzZjMS4uNGM2ZjVkNDQyNjMyYzNlZmMw
MDBiZDE4ZTllMzY5NDUyZmFmMWMxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQml0bWFw
LmgKKysrIGIvU291cmNlL1dURi93dGYvQml0bWFwLmgKQEAgLTUxLDcgKzUxLDYgQEAgcHVibGlj
OgogICAgIHNpemVfdCBuZXh0UG9zc2libHlVbnNldChzaXplX3QpIGNvbnN0OwogICAgIHZvaWQg
Y2xlYXIoc2l6ZV90KTsKICAgICB2b2lkIGNsZWFyQWxsKCk7Ci0gICAgdm9pZCBpbnZlcnQoKTsK
ICAgICBpbnQ2NF90IGZpbmRSdW5PZlplcm9zKHNpemVfdCBydW5MZW5ndGgpIGNvbnN0OwogICAg
IHNpemVfdCBjb3VudChzaXplX3Qgc3RhcnQgPSAwKSBjb25zdDsKICAgICBzaXplX3QgaXNFbXB0
eSgpIGNvbnN0OwpAQCAtMTAzLDEyICsxMDIsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7CiAgICAgICAgIH0KIAotICAgICAgICBpdGVyYXRvciYgb3Bl
cmF0b3I9KGJvb2wgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fYml0bWFwLT5zZXQo
bV9pbmRleCwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9Ci0K
ICAgICBwcml2YXRlOgogICAgICAgICBjb25zdCBCaXRtYXAqIG1fYml0bWFwOwogICAgICAgICBz
aXplX3QgbV9pbmRleDsKQEAgLTExOCw5ICsxMTEsNiBAQCBwdWJsaWM6CiAgICAgaXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgZmluZEJpdCgwLCB0cnVlKSk7
IH0KICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgYml0
bWFwU2l6ZSk7IH0KICAgICAKLSAgICBpdGVyYXRvciBvcGVyYXRvcltdKHNpemVfdCk7Ci0gICAg
Y29uc3QgaXRlcmF0b3Igb3BlcmF0b3JbXShzaXplX3QpIGNvbnN0OwotCiAgICAgdm9pZCBtZXJn
ZUFuZENsZWFyKEJpdG1hcCYpOwogICAgIHZvaWQgc2V0QW5kQ2xlYXIoQml0bWFwJik7CiAgICAg
CkBAIC0yMzQsMTMgKzIyNCw2IEBAIGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3Jk
VHlwZT46OmNsZWFyQWxsKCkKICAgICBtZW1zZXQoYml0cy5kYXRhKCksIDAsIHNpemVvZihiaXRz
KSk7CiB9CiAKLXRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4K
LWlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT46OmludmVydCgpCi17Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKQotICAgICAgICBiaXRzW2ldID0g
fmJpdHNbaV07Ci19Ci0KIHRlbXBsYXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3Jk
VHlwZT4KIGlubGluZSBzaXplX3QgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBlPjo6bmV4dFBv
c3NpYmx5VW5zZXQoc2l6ZV90IHN0YXJ0KSBjb25zdAogewpAQCAtNDI2LDE5ICs0MDksNiBAQCBp
bmxpbmUgYm9vbCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpvcGVyYXRvciE9KGNvbnN0
IEJpdG1hcCYgb3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwogfQog
Ci10ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+Ci1pbmxpbmUg
YXV0byBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+OjpvcGVyYXRvcltdKHNpemVfdCBpbmRl
eCkgLT4gaXRlcmF0b3IKLXsKLSAgICBBU1NFUlQoaW5kZXggPCBzaXplKCkpOwotICAgIHJldHVy
biBpdGVyYXRvcigqdGhpcywgaW5kZXgpOwotfQotCi10ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6
ZSwgdHlwZW5hbWUgV29yZFR5cGU+Ci1pbmxpbmUgYXV0byBCaXRtYXA8Yml0bWFwU2l6ZSwgV29y
ZFR5cGU+OjpvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgLT4gY29uc3QgaXRlcmF0b3IK
LXsKLSAgICByZXR1cm4gKCpjb25zdF9jYXN0PEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT4q
Pih0aGlzKSlbaW5kZXhdOwotfQotCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5h
bWUgV29yZFR5cGU+CiBpbmxpbmUgdW5zaWduZWQgQml0bWFwPGJpdG1hcFNpemUsIFdvcmRUeXBl
Pjo6aGFzaCgpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3Rz
LnR4dCBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IDAyMGQ2Yzg1MDBkMjNl
ZDcxZjk0YWFmOWM5YmYxZmU3YWZjOTI4OGIuLjU3MmZhM2M1YzBjZGQ5MDNmOGQ4ZWFjZmI0MDkz
NzU1NWU0ZDJhZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cisr
KyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC01Niw3ICs1Niw2IEBAIHNldChX
VEZfUFVCTElDX0hFQURFUlMKICAgICBEb3VibHlMaW5rZWRMaXN0LmgKICAgICBEdW1iUHRyVHJh
aXRzLmgKICAgICBEdW1iVmFsdWVUcmFpdHMuaAotICAgIEVudW1DbGFzc09wZXJhdG9yT3Zlcmxv
YWRzLmgKICAgICBFbnVtVHJhaXRzLmgKICAgICBFeHBlY3RlZC5oCiAgICAgRXhwb3J0TWFjcm9z
LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0VudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRz
LmggYi9Tb3VyY2UvV1RGL3d0Zi9FbnVtQ2xhc3NPcGVyYXRvck92ZXJsb2Fkcy5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTdiYTJmYTJmNzkyOWE2YTk5OGE5YTRlZjE0ZDJiZTU3
NTQ2MzcxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XVEYvd3RmL0VudW1DbGFzc09wZXJhdG9yT3ZlcmxvYWRzLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8dHlwZV90cmFpdHM+Ci0KLSNkZWZpbmUg
T1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgb3AsIGVuYWJs
ZUV4cHJlc3Npb24pIFwKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBcCi0gICAgY29uc3RleHBy
IGF1dG8gb3BlcmF0b3Igb3AoZW51bU5hbWUgZW51bUVudHJ5LCBUIHZhbHVlKSAtPiBzdGQ6OmVu
YWJsZV9pZl90PChlbmFibGVFeHByZXNzaW9uKSwgVD4gXAotICAgIHsgXAotICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VD4oZW51bUVudHJ5KSBvcCB2YWx1ZTsgXAotICAgIH0gXAotICAgIFwK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBcCi0gICAgY29uc3RleHByIGF1dG8gb3BlcmF0b3Ig
b3AoVCB2YWx1ZSwgZW51bU5hbWUgZW51bUVudHJ5KSAtPiBzdGQ6OmVuYWJsZV9pZl90PChlbmFi
bGVFeHByZXNzaW9uKSwgVD4gXAotICAgIHsgXAotICAgICAgICByZXR1cm4gdmFsdWUgb3Agc3Rh
dGljX2Nhc3Q8VD4oZW51bUVudHJ5KTsgXAotICAgIH0gXAotCi0jZGVmaW5lIE9WRVJMT0FEX01B
VEhfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsIGVuYWJsZUV4cHJlc3Np
b24pIFwKLSAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1l
LCArLCBlbmFibGVFeHByZXNzaW9uKSBcCi0gICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1f
Q0xBU1NfV0hFTihlbnVtTmFtZSwgLSwgZW5hYmxlRXhwcmVzc2lvbikgXAotICAgIE9WRVJMT0FE
X09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsICosIGVuYWJsZUV4cHJlc3Np
b24pIFwKLSAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1l
LCAvLCBlbmFibGVFeHByZXNzaW9uKSBcCi0gICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1f
Q0xBU1NfV0hFTihlbnVtTmFtZSwgJSwgZW5hYmxlRXhwcmVzc2lvbikgXAotCi0jZGVmaW5lIE9W
RVJMT0FEX01BVEhfT1BFUkFUT1JTX0ZPUl9FTlVNX0NMQVNTX1dJVEhfSU5URUdSQUxTKGVudW1O
YW1lKSBPVkVSTE9BRF9NQVRIX09QRVJBVE9SU19GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1l
LCBzdGQ6OmlzX2ludGVncmFsX3Y8VD4pCi0KLSNkZWZpbmUgT1ZFUkxPQURfUkVMQVRJT05BTF9P
UEVSQVRPUlNfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgZW5hYmxlRXhwcmVzc2lvbikg
XAotICAgIE9WRVJMT0FEX09QRVJBVE9SX0ZPUl9FTlVNX0NMQVNTX1dIRU4oZW51bU5hbWUsID09
LCBlbmFibGVFeHByZXNzaW9uKSBcCi0gICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xB
U1NfV0hFTihlbnVtTmFtZSwgIT0sIGVuYWJsZUV4cHJlc3Npb24pIFwKLSAgICBPVkVSTE9BRF9P
UEVSQVRPUl9GT1JfRU5VTV9DTEFTU19XSEVOKGVudW1OYW1lLCA8LCBlbmFibGVFeHByZXNzaW9u
KSBcCi0gICAgT1ZFUkxPQURfT1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwg
PD0sIGVuYWJsZUV4cHJlc3Npb24pIFwKLSAgICBPVkVSTE9BRF9PUEVSQVRPUl9GT1JfRU5VTV9D
TEFTU19XSEVOKGVudW1OYW1lLCA+LCBlbmFibGVFeHByZXNzaW9uKSBcCi0gICAgT1ZFUkxPQURf
T1BFUkFUT1JfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgPj0sIGVuYWJsZUV4cHJlc3Np
b24pIFwKLQotI2RlZmluZSBPVkVSTE9BRF9SRUxBVElPTkFMX09QRVJBVE9SU19GT1JfRU5VTV9D
TEFTU19XSVRIX0lOVEVHUkFMUyhlbnVtTmFtZSkgT1ZFUkxPQURfUkVMQVRJT05BTF9PUEVSQVRP
UlNfRk9SX0VOVU1fQ0xBU1NfV0hFTihlbnVtTmFtZSwgc3RkOjppc19pbnRlZ3JhbF92PFQ+KQot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmggYi9Tb3VyY2UvV1RG
L3d0Zi9GYXN0Qml0VmVjdG9yLmgKaW5kZXggOTZkY2NlMWNkYmMzODc0ZTM2MmIzNzAwYjI4YTRm
OTQ0MzM4NGFjNC4uNzMzYzY1YzA3NjUwYmM4YzRiYzA4MWRjMDUyY2E0YzM4OWY4ZGNlZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvRmFzdEJpdFZlY3Rvci5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL0Zhc3RCaXRWZWN0b3IuaApAQCAtNDUyLDcgKzQ1Miw3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgfQogCi0gICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gISEoKm1fd29yZCAmIG1fbWFzayk7
CiAgICAgfQpAQCAtNDY2LDkgKzQ2Niw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgIH0KIAotICAgIEZhc3RCaXRSZWZlcmVuY2UmIG9wZXJhdG9yfD0oYm9vbCB2YWx1ZSkg
eyByZXR1cm4gdmFsdWUgPyAqdGhpcyA9IHZhbHVlIDogKnRoaXM7IH0KLSAgICBGYXN0Qml0UmVm
ZXJlbmNlJiBvcGVyYXRvciY9KGJvb2wgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID8gKnRoaXMgOiAq
dGhpcyA9IHZhbHVlOyB9Ci0KIHByaXZhdGU6CiAgICAgdWludDMyX3QqIG1fd29yZCB7IG51bGxw
dHIgfTsKICAgICB1aW50MzJfdCBtX21hc2sgeyAwIH07CkBAIC01MTQsMTEgKzUxMSw3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIG1fd29yZHMuY2xlYXJBbGwoKTsKICAgICB9Ci0KLSAgICAv
LyBGb3IgdGVtcGxhdGluZyBhcyBWZWN0b3I8Ym9vbD4KLSAgICB2b2lkIGZpbGwoYm9vbCB2YWx1
ZSkgeyB2YWx1ZSA/IHNldEFsbCgpIDogY2xlYXJBbGwoKTsgfQotICAgIHZvaWQgZ3JvdyhzaXpl
X3QgbmV3U2l6ZSkgeyByZXNpemUobmV3U2l6ZSk7IH0KLQorICAgIAogICAgIFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGNsZWFyUmFuZ2Uoc2l6ZV90IGJlZ2luLCBzaXplX3QgZW5kKTsKIAogICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29udGVudHMgb2YgdGhpcyBiaXR2ZWN0b3IgY2hhbmdl
ZC4KQEAgLTU5OCw1ICs1OTEsNCBAQCBwdWJsaWM6CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCi11
c2luZyBXVEY6OkZhc3RCaXRSZWZlcmVuY2U7CiB1c2luZyBXVEY6OkZhc3RCaXRWZWN0b3I7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9VbmFsaWduZWRBY2Nlc3MuaCBiL1NvdXJjZS9XVEYv
d3RmL1VuYWxpZ25lZEFjY2Vzcy5oCmluZGV4IDNhMzViMzhmNGMwMjM2NzlhYzdjZmM5YzQ2NTYw
ODRhMzkxNDgzYjIuLjVhNGU5ZWY0NDk0ZWY0NmNhOWU0ZWVmNzdmZGNjMGQ2MGZhYTRhMTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1VuYWxpZ25lZEFjY2Vzcy5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL1VuYWxpZ25lZEFjY2Vzcy5oCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXVEYg
ewogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KIGlubGluZSBUeXBlIHVuYWxpZ25lZExvYWQoY29u
c3Qgdm9pZCogcG9pbnRlcikKIHsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5
X2NvcHlhYmxlPFR5cGU+Ojp2YWx1ZSwgIiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190
cml2aWFsPFR5cGU+Ojp2YWx1ZSwgIiIpOwogICAgIFR5cGUgcmVzdWx0IHsgfTsKICAgICBtZW1j
cHkoJnJlc3VsdCwgcG9pbnRlciwgc2l6ZW9mKFR5cGUpKTsKICAgICByZXR1cm4gcmVzdWx0OwpA
QCAtNDMsNyArNDMsNyBAQCBpbmxpbmUgVHlwZSB1bmFsaWduZWRMb2FkKGNvbnN0IHZvaWQqIHBv
aW50ZXIpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgogaW5saW5lIHZvaWQgdW5hbGlnbmVkU3Rv
cmUodm9pZCogcG9pbnRlciwgVHlwZSB2YWx1ZSkKIHsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2NvcHlhYmxlPFR5cGU+Ojp2YWx1ZSwgIiIpOworICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc190cml2aWFsPFR5cGU+Ojp2YWx1ZSwgIiIpOwogICAgIG1lbWNweShwb2ludGVy
LCAmdmFsdWUsIHNpemVvZihUeXBlKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwODljZDE4ZjIwYjQwOGUzNWRiYWViYWNhODZlZGMy
NzZlYzM5NDAwLi42MjdmNDkzM2QzNmRlODVkNWYwMjI5MGYyNTdhMDFlOGYzMjRmYjIyIDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTAgQEAKKzIwMjAtMDEtMTUgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+
CisKKyAgICAgICAgUmV2ZXJ0IGJ5dGVjb2RlIGNoZWNrcG9pbnRzIHNpbmNlIGl0IGJyZWFrcyB3
YXRjaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2
MzAxCisKKyAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0LgorCiAyMDIwLTAxLTE1ICBBbGljaWEg
Qm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbV1RGXSBSZW1vdmUg
TWVkaWFUaW1lLmNwcCB0ZXN0IHdhcm5pbmcgaW4gR0NDCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10
ZXN0cwppbmRleCAwOWU0ZjE3YzI4YjAzZDczMWJjMDMyMjg4MjMwMDhhNGZiMjc3ZjExLi4xMjg5
NjA3YjQxYWY5NGU0YTg2ZjI5YWRmYzIxNzlhMzY2ZmM4Y2MyIDEwMDc1NQotLS0gYS9Ub29scy9T
Y3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1z
dHJlc3MtdGVzdHMKQEAgLTQ5OCw2ICs0OTgsNyBAQCBOT19DSklUX09QVElPTlMgPSBbIi0tdXNl
Q29uY3VycmVudEpJVD1mYWxzZSIsICItLXRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwPTEwMAog
QjNPMV9PUFRJT05TID0gWyItLWRlZmF1bHRCM09wdExldmVsPTEiXQogQjNPMF9PUFRJT05TID0g
WyItLW1heERGR05vZGVzSW5CYXNpY0Jsb2NrRm9yUHJlY2lzZUFuYWx5c2lzPTEwMCIsICItLWRl
ZmF1bHRCM09wdExldmVsPTAiXQogRlRMX09QVElPTlMgPSBbIi0tdXNlRlRMSklUPXRydWUiXQor
UFJPQkVfT1NSX0VYSVRfT1BUSU9OID0gWyItLXVzZVByb2JlT1NSRXhpdD10cnVlIl0KIEZPUkNF
X0xMSU5UX0VYSVRfT1BUSU9OUyA9IFsiLS1mb3JjZU9TUkV4aXRUb0xMSW50PXRydWUiXQogCiBy
ZXF1aXJlX3JlbGF0aXZlICJ3ZWJraXRydWJ5L2pzYy1zdHJlc3MtdGVzdC13cml0ZXItI3skdGVz
dFdyaXRlcn0iCkBAIC03MTIsNyArNzEzLDcgQEAgZGVmIHJ1bkZUTE5vQ0pJVEIzTzAoKm9wdGlv
bmFsVGVzdFNwZWNpZmljT3B0aW9ucykKIGVuZAogCiBkZWYgcnVuRlRMTm9DSklUVmFsaWRhdGUo
Km9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKLSAgICBydW4oImZ0bC1uby1jaml0LXZhbGlk
YXRlLXNhbXBsaW5nLXByb2ZpbGVyIiwgIi0tdmFsaWRhdGVHcmFwaD10cnVlIiwgIi0tdXNlU2Ft
cGxpbmdQcm9maWxlcj10cnVlIiwgIi0tYWlyRm9yY2VJUkNBbGxvY2F0b3I9dHJ1ZSIsICooRlRM
X09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMp
KQorICAgIHJ1bigiZnRsLW5vLWNqaXQtdmFsaWRhdGUtc2FtcGxpbmctcHJvZmlsZXIiLCAiLS12
YWxpZGF0ZUdyYXBoPXRydWUiLCAiLS11c2VTYW1wbGluZ1Byb2ZpbGVyPXRydWUiLCAiLS1haXJG
b3JjZUlSQ0FsbG9jYXRvcj10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUyAr
IFBST0JFX09TUl9FWElUX09QVElPTiArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBl
bmQKIAogZGVmIHJ1bkZUTE5vQ0pJVE5vUHV0U3RhY2tWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3Bl
Y2lmaWNPcHRpb25zKQpAQCAtNzI4LDcgKzcyOSw3IEBAIGRlZiBydW5GVExOb0NKSVRPU1JWYWxp
ZGF0aW9uKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiBlbmQKIAogZGVmIHJ1bkRGR0Vh
Z2VyKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJkZmctZWFnZXIiLCAq
KEVBR0VSX09QVElPTlMgKyBDT0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJT05TICsgRk9SQ0VfTExJ
TlRfRVhJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBydW4o
ImRmZy1lYWdlciIsICooRUFHRVJfT1BUSU9OUyArIENPTExFQ1RfQ09OVElOVU9VU0xZX09QVElP
TlMgKyBQUk9CRV9PU1JfRVhJVF9PUFRJT04gKyBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgKyBv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5ERkdFYWdlck5vQ0pJ
VFZhbGlkYXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCmRpZmYgLS1naXQgYS9KU1Rl
c3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGIyYTRlMTQ2MGI4ODIxOWM4
Y2YwNzBhMDU3OGFkNGExYzliNjFlYWQuLmJlYzllZGQxMWJjNmM5ZWZjOGM0ZTEwMmUyNDFmMDZk
MGU3N2IxZGYgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTAgQEAKKzIwMjAtMDEtMTUgIEtlaXRoIE1pbGxlciAgPGtlaXRo
X21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2ZXJ0IGJ5dGVjb2RlIGNoZWNrcG9pbnRz
IHNpbmNlIGl0IGJyZWFrcyB3YXRjaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjA2MzAxCisKKyAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0LgorCiAy
MDIwLTAxLTE0ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjU0NDgwLCByMjU0NDk2LCBhbmQgcjI1NDUx
Ny4KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQt
bGVuZ3RoLW9uY2UtZXhjZXB0aW9ucy1vY2Nhc2lvbmFsbHkuanMgYi9KU1Rlc3RzL3N0cmVzcy9h
cHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNlLWV4Y2VwdGlvbnMtb2NjYXNpb25h
bGx5LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2YxNWE2ZWI4YzI3Y2MwYWQy
ZTlmNTk1NDFmZmUyYzUwYWMwYTIzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL0pTVGVzdHMvc3RyZXNzL2FwcGx5LW9zci1leGl0LXNob3VsZC1nZXQtbGVu
Z3RoLW9uY2UtZXhjZXB0aW9ucy1vY2Nhc2lvbmFsbHkuanMKKysrIC9kZXYvbnVsbApAQCAtMSwz
NiArMCwwIEBACi0KLWxldCBjdXJyZW50QXJnQ291bnQ7Ci1mdW5jdGlvbiBleHBlY3RlZEFyZ0Nv
dW50KCkgewotICAgIHJldHVybiBjdXJyZW50QXJnQ291bnQ7Ci19Ci1ub0lubGluZShleHBlY3Rl
ZEFyZ0NvdW50KTsKLQotZnVuY3Rpb24gY2FsbGVlKCkgewotICAgIGlmIChhcmd1bWVudHMubGVu
Z3RoICE9IGV4cGVjdGVkQXJnQ291bnQoKSkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7Ci19
Ci0KLWZ1bmN0aW9uIHRlc3QoYXJyYXkpIHsKLSAgICBjYWxsZWUuYXBwbHkodW5kZWZpbmVkLCBh
cnJheSk7Ci19Ci1ub0lubGluZSh0ZXN0KTsKLQotbGV0IGxlbmd0aENhbGxzID0gMDsKLWN1cnJl
bnRBcmdDb3VudCA9IDI7Ci1sZXQgYXJyYXkgPSB7IDA6IDEsIDE6IDIsIGdldCBsZW5ndGgoKSB7
Ci0gICAgaWYgKGxlbmd0aENhbGxzKysgJSAxMCA9PSAxKQotICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoInRocm93aW5nIGFuIGV4Y2VwdGlvbiBpbiBsZW5ndGgiKTsKLSAgICByZXR1cm4gY3VycmVu
dEFyZ0NvdW50Ci19IH0KLWZvciAobGV0IGkgPSAwOyBpIDwgMWU2OyBpKyspIHsKLSAgICB0cnkg
ewotICAgICAgICB0ZXN0KGFycmF5KTsKLSAgICB9IGNhdGNoIHsgfQotfQotCi1jdXJyZW50QXJn
Q291bnQgPSAxMDA7Ci1sZW5ndGhDYWxscyA9IDA7Ci10ZXN0KGFycmF5KTsKLQotaWYgKGxlbmd0
aENhbGxzICE9PSAxKQotICAgIHRocm93IG5ldyBFcnJvcihsZW5ndGhDYWxscyk7CmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0aC1vbmNl
LmpzIGIvSlNUZXN0cy9zdHJlc3MvYXBwbHktb3NyLWV4aXQtc2hvdWxkLWdldC1sZW5ndGgtb25j
ZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJlZTQ1Y2UxYzcyODM2NTM4Mjcw
NWQ5OWQzMDFhZTZiY2I4ZDg3YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9hcHBseS1vc3ItZXhpdC1zaG91bGQtZ2V0LWxlbmd0
aC1vbmNlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotCi1sZXQgY3VycmVudEFy
Z0NvdW50OwotZnVuY3Rpb24gZXhwZWN0ZWRBcmdDb3VudCgpIHsKLSAgICByZXR1cm4gY3VycmVu
dEFyZ0NvdW50OwotfQotbm9JbmxpbmUoZXhwZWN0ZWRBcmdDb3VudCk7Ci0KLWZ1bmN0aW9uIGNh
bGxlZSgpIHsKLSAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSBleHBlY3RlZEFyZ0NvdW50KCkp
Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigpOwotfQotCi1mdW5jdGlvbiB0ZXN0KGFycmF5KSB7
Ci0gICAgY2FsbGVlLmFwcGx5KHVuZGVmaW5lZCwgYXJyYXkpOwotfQotbm9JbmxpbmUodGVzdCk7
Ci0KLWxldCBsZW5ndGhDYWxscyA9IDA7Ci1jdXJyZW50QXJnQ291bnQgPSAyOwotbGV0IGFycmF5
ID0geyAwOiAxLCAxOiAyLCBnZXQgbGVuZ3RoKCkgeyBsZW5ndGhDYWxscysrOyByZXR1cm4gY3Vy
cmVudEFyZ0NvdW50IH0gfQotZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7IGkrKykKLSAgICB0ZXN0
KGFycmF5KTsKLQotCi10ZXN0KGFycmF5KTsKLWN1cnJlbnRBcmdDb3VudCA9IDEwMDsKLWxlbmd0
aENhbGxzID0gMDsKLXRlc3QoYXJyYXkpOwotCi1pZiAobGVuZ3RoQ2FsbHMgIT09IDEpCi0gICAg
dGhyb3cgbmV3IEVycm9yKGxlbmd0aENhbGxzKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNz
L2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3QuanMgYi9KU1Rl
c3RzL3N0cmVzcy9sb2FkLXZhcmFyZ3MtdGhlbi1pbmxpbmVkLWNhbGwtYW5kLWV4aXQtc3RyaWN0
LmpzCmluZGV4IGFhNzMyMzE5MGNmNDlkODhlM2ZmZTkxMmIxZTE2YWE0N2Q1MGY5NGIuLjM2MThm
OGNiYjNkMzIxMTM0MGU2YTA3MjA3MmYxNDNlNWM0NmMyNDIgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMv
c3RyZXNzL2xvYWQtdmFyYXJncy10aGVuLWlubGluZWQtY2FsbC1hbmQtZXhpdC1zdHJpY3QuanMK
KysrIGIvSlNUZXN0cy9zdHJlc3MvbG9hZC12YXJhcmdzLXRoZW4taW5saW5lZC1jYWxsLWFuZC1l
eGl0LXN0cmljdC5qcwpAQCAtMTgsOCArMTgsOCBAQCBmdW5jdGlvbiBjaGVja0VxdWFsKGEsIGIp
IHsKICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2YgYTogIiArIGEuYSArICIgdmVy
c3VzICIgKyBiLmE7CiAgICAgaWYgKGEuYiAhPSBiLmIpCiAgICAgICAgIHRocm93ICJFcnJvcjog
YmFkIHZhbHVlIG9mIGI6ICIgKyBhLmIgKyAiIHZlcnN1cyAiICsgYi5iOwotICAgIGlmIChhLmMu
bGVuZ3RoICE9PSBiLmMubGVuZ3RoKQotICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBv
ZiBjLCBsZW5ndGggbWlzbWF0Y2g6ICIgKyBhLmMubGVuZ3RoICsgIiB2ZXJzdXMgIiArIGIuYy5s
ZW5ndGg7CisgICAgaWYgKGEuYy5sZW5ndGggIT0gYi5jLmxlbmd0aCkKKyAgICAgICAgdGhyb3cg
IkVycm9yOiBiYWQgdmFsdWUgb2YgYywgbGVuZ3RoIG1pc21hdGNoOiAiICsgYS5jICsgIiB2ZXJz
dXMgIiArIGIuYzsKICAgICBmb3IgKHZhciBpID0gYS5jLmxlbmd0aDsgaS0tOykgewogICAgICAg
ICBpZiAoYS5jW2ldICE9IGIuY1tpXSkKICAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZh
bHVlIG9mIGMsIG1pc21hdGNoIGF0IGkgPSAiICsgaSArICI6ICIgKyBhLmMgKyAiIHZlcnN1cyAi
ICsgYi5jOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvcmVjdXJzaXZlLXRhaWwtY2FsbC13
aXRoLWRpZmZlcmVudC1hcmd1bWVudC1jb3VudC5qcyBiL0pTVGVzdHMvc3RyZXNzL3JlY3Vyc2l2
ZS10YWlsLWNhbGwtd2l0aC1kaWZmZXJlbnQtYXJndW1lbnQtY291bnQuanMKaW5kZXggNTNkNzUy
ZGVjZDdkMGYzMWJjMmYxZDc4OTkxYzY5MTAxZjA4YmZmMy4uMDQ3ZmIwMWY4ODMxNDVjYzc1NTRm
NWNmNzAxYTcwNzRmMjY3ZGVlZSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvcmVjdXJzaXZl
LXRhaWwtY2FsbC13aXRoLWRpZmZlcmVudC1hcmd1bWVudC1jb3VudC5qcworKysgYi9KU1Rlc3Rz
L3N0cmVzcy9yZWN1cnNpdmUtdGFpbC1jYWxsLXdpdGgtZGlmZmVyZW50LWFyZ3VtZW50LWNvdW50
LmpzCkBAIC0xOCw4ICsxOCw4IEBAIG5vSW5saW5lKGJhcik7CiBmb3IgKHZhciBpID0gMDsgaSA8
IDEwMDAwOyArK2kpIHsKICAgICB2YXIgcmVzdWx0ID0gZm9vKDQwLCAyKTsKICAgICBpZiAocmVz
dWx0ICE9PSA0MikKLSAgICAgICAgdGhyb3cgRXJyb3IoIldyb25nIHJlc3VsdCBmb3IgZm9vLCBl
eHBlY3RlZCA0MiwgZ290ICIgKyByZXN1bHQpOworICAgICAgICB0aHJvdyAiV3JvbmcgcmVzdWx0
IGZvciBmb28sIGV4cGVjdGVkIDQyLCBnb3QgIiArIHJlc3VsdDsKICAgICByZXN1bHQgPSBiYXIo
NDAsIDIpOwogICAgIGlmIChyZXN1bHQgIT09IDQyKQotICAgICAgICB0aHJvdyBFcnJvcigiV3Jv
bmcgcmVzdWx0IGZvciBiYXIsIGV4cGVjdGVkIDQyLCBnb3QgIiArIHJlc3VsdCk7CisgICAgICAg
IHRocm93ICJXcm9uZyByZXN1bHQgZm9yIGJhciwgZXhwZWN0ZWQgNDIsIGdvdCAiICsgcmVzdWx0
OwogfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvcmVzdC12YXJhcmdzLW9zci1leGl0LXRv
LWNoZWNrcG9pbnQuanMgYi9KU1Rlc3RzL3N0cmVzcy9yZXN0LXZhcmFyZ3Mtb3NyLWV4aXQtdG8t
Y2hlY2twb2ludC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdiYTA1NTFkM2Vl
OTQ4ZjA5NGNmMzgwZjhjZWJmYzY3OTkwNDJkYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9yZXN0LXZhcmFyZ3Mtb3NyLWV4aXQt
dG8tY2hlY2twb2ludC5qcworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSJ1c2Ugc3Ry
aWN0IjsKLQotZnVuY3Rpb24gZm9vKGEsIGIsIC4uLnJlc3QpIHsKLSAgICByZXR1cm4gcmVzdC5s
ZW5ndGg7Ci19Ci0KLWZ1bmN0aW9uIGJhcihhLCBiLCAuLi5yZXN0KSB7Ci0gICAgcmV0dXJuIGZv
by5jYWxsKC4uLnJlc3QpOwotfQotbm9JbmxpbmUoYmFyKTsKLQotbGV0IGFycmF5ID0gbmV3IEFy
cmF5KDEwKTsKLWZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kpIHsKLSAgICBsZXQgcmVzdWx0
ID0gYmFyKC4uLmFycmF5KTsKLSAgICBpZiAocmVzdWx0ICE9PSBhcnJheS5sZW5ndGggLSBiYXIu
bGVuZ3RoIC0gZm9vLmxlbmd0aCAtIDEpCi0gICAgICAgIHRocm93IG5ldyBFcnJvcihpICsgIiAi
ICsgcmVzdWx0KTsKLX0KLQotYXJyYXkubGVuZ3RoID0gMTAwMDA7Ci1pZiAoYmFyKC4uLmFycmF5
KSAhPT0gYXJyYXkubGVuZ3RoIC0gYmFyLmxlbmd0aCAtIGZvby5sZW5ndGggLSAxKQotICAgIHRo
cm93IG5ldyBFcnJvcigpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>