<?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>182110</bug_id>
          
          <creation_ts>2018-01-25 09:17:56 -0800</creation_ts>
          <short_desc>REGRESSION(r227592): it made ARM64 (Linux and iOS) crash (Requested by pizlo-mbp on #webkit).</short_desc>
          <delta_ts>2018-01-25 09:24:11 -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>
          
          <blocked>181559</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>mark.lam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1393070</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-25 09:17:56 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/227592 broke the build:
it made ARM64 (Linux and iOS) crash (Requested by pizlo-mbp on #webkit).

This is an automatic bug report generated by webkitbot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393072</commentid>
    <comment_count>1</comment_count>
      <attachid>332273</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-25 09:18:21 -0800</bug_when>
    <thetext>Created attachment 332273
ROLLOUT of r227592

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393073</commentid>
    <comment_count>2</comment_count>
      <attachid>332273</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-25 09:21:15 -0800</bug_when>
    <thetext>Comment on attachment 332273
ROLLOUT of r227592

Clearing flags on attachment: 332273

Committed r227609: &lt;https://trac.webkit.org/changeset/227609&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393074</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-25 09:21:17 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393075</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-01-25 09:24:11 -0800</bug_when>
    <thetext>&lt;rdar://problem/36871360&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332273</attachid>
            <date>2018-01-25 09:18:21 -0800</date>
            <delta_ts>2018-01-25 09:21:15 -0800</delta_ts>
            <desc>ROLLOUT of r227592</desc>
            <filename>bug-182110-20180125121820.patch</filename>
            <type>text/plain</type>
            <size>175662</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI3NjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
ODMyZmMwZjAxZWFiNjJiMTJiZGI3YWNkOWIzNjk5YzBjNTg0ZDRkLi4zYjk2MGQzZmE5NTQ5ZTY2
Yjk1ODJiYWVlY2NlZGY0Y2VkMjM2OTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxOC0wMS0yNSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIyNzU5Mi4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjExMAorCisgICAg
ICAgIGl0IG1hZGUgQVJNNjQgKExpbnV4IGFuZCBpT1MpIGNyYXNoIChSZXF1ZXN0ZWQgYnkgcGl6
bG8tbWJwIG9uCisgICAgICAgICN3ZWJraXQpLgorCisgICAgICAgIFJldmVydGVkIGNoYW5nZXNl
dDoKKworICAgICAgICAiSlNDIEdDIHNob3VsZCBzdXBwb3J0IFRMQ3MgKHRocmVhZCBsb2NhbCBj
YWNoZXMpIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTgxNTU5CisgICAgICAgIGh0dHBzOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8yMjc1OTIK
KwogMjAxOC0wMS0yNSAgQWxlamFuZHJvIEcuIENhc3RybyAgPGFsZXhAaWdhbGlhLmNvbT4KIAog
ICAgICAgICB1bmRlZmluZWQgcmVmZXJlbmNlIHRvICdKU0M6OkIzOjpCYXNpY0Jsb2NrOjpmYWxs
VGhyb3VnaCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDFlOWZmM2JiZWFjMmZmZmMyYjVhZWM5OGRlZjRjMTZjM2Ji
Yjc1Y2QuLmFmMjI5MWQxYmY4NGI2NjhlODIyZWExY2Q1ODU0NjIzOThiNThiOGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTcgQEAKKzIwMTgtMDEtMjUgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMjc1OTIuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODIxMTAKKworICAg
ICAgICBpdCBtYWRlIEFSTTY0IChMaW51eCBhbmQgaU9TKSBjcmFzaCAoUmVxdWVzdGVkIGJ5IHBp
emxvLW1icCBvbgorICAgICAgICAjd2Via2l0KS4KKworICAgICAgICBSZXZlcnRlZCBjaGFuZ2Vz
ZXQ6CisKKyAgICAgICAgIkpTQyBHQyBzaG91bGQgc3VwcG9ydCBUTENzICh0aHJlYWQgbG9jYWwg
Y2FjaGVzKSIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE4MTU1OQorICAgICAgICBodHRwczovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjI3NTky
CisKIDIwMTgtMDEtMjAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBKU0MgR0Mgc2hvdWxkIHN1cHBvcnQgVExDcyAodGhyZWFkIGxvY2FsIGNhY2hlcykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZGUzZTI5MDY0YmY5ZDVkNmVlNzQyZDkwNTVhMThj
MDRjMGJhNWEyZS4uOWNjOWVmNDAyYzkzOTA2MTYzNjM4YWFlNjYyY2FhZDZjNzAyMDRjMSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM4OSwxMyArMzg5LDYgQEAKIAkJMEY3MjVD
QUExQzUwM0RFRDAwQUQ5NDNBIC8qIEIzUHVyZUNTRS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MjVDQTYxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzUHVy
ZUNTRS5oICovOyB9OwogCQkwRjcyNUNCMDFDNTA2RDNCMDBBRDk0M0EgLyogQjNGb2xkUGF0aENv
bnN0YW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY3MjVDQUUxQzUwNkQzQjAwQUQ5NDNBIC8qIEIzRm9sZFBhdGhDb25zdGFudHMuaCAqLzsgfTsK
IAkJMEY3NEI5M0IxRjg5NjE0ODAwQjkzNUQzIC8qIFByb3RvdHlwZUtleS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NEI5M0ExRjg5NjE0NTAwQjkz
NUQzIC8qIFByb3RvdHlwZUtleS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTBGNzVBMDVFMjAwRDI1RjYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENh
Y2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1
QTA1NTIwMEQyNUVGMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxDYWNoZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGNzVBMDYwMjAwRDI2MEIwMDM4
RTJDRiAvKiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzVBMDVBMjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFs
bG9jYXRvcklubGluZXMuaCAqLzsgfTsKLQkJMEY3NUEwNjEyMDBEMjYxODAwMzhFMkNGIC8qIExv
Y2FsQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjc1QTA1NzIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjc1QTA2MjIwMEQy
NjFEMDAzOEUyQ0YgLyogQWxsb2NhdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NUEwNUQyMDBEMjVGMTAwMzhFMkNGIC8qIEFsbG9j
YXRvcklubGluZXMuaCAqLzsgfTsKLQkJMEY3NUEwNjMyMDBEMjYxRjAwMzhFMkNGIC8qIEFsbG9j
YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3
NUEwNTQyMDBEMjVFRjAwMzhFMkNGIC8qIEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGNzVBMDY0MjAwRDI2MjgwMDM4RTJDRiAv
KiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjc1QTA1QzIwMEQyNUYxMDAzOEUyQ0YgLyogVGhyZWFkTG9jYWxD
YWNoZUxheW91dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTBGNzVBMDY2MjAxM0U0RjEwMDM4RTJDRiAvKiBKSVRBbGxvY2F0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzVBMDY1MjAxM0U0RUYw
MDM4RTJDRiAvKiBKSVRBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjc2NkQyQzE1QThDQzNBMDA4RjM2M0UgLyogSklUU3R1YlJv
dXRpbmVTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNzY2RDJBMTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzY2RDMwMTVBOERD
RTIwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2RDJFMTVBOERDREQwMDhGMzYzRSAvKiBH
Q0F3YXJlSklUU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjc2NkQzMTE1QUE4MTEyMDA4RjM2M0UgLyogSklUU3R1YlJvdXRp
bmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzY2
RDFDMTVBNTAyOEQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yNDI2LDE3ICsyNDE5LDYgQEAKIAkJ
MEY3MjVDQUQxQzUwNkQzQjAwQUQ5NDNBIC8qIEIzRm9sZFBhdGhDb25zdGFudHMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNGb2xkUGF0aENvbnN0YW50cy5jcHA7
IHBhdGggPSBiMy9CM0ZvbGRQYXRoQ29uc3RhbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY3MjVDQUUxQzUwNkQzQjAwQUQ5NDNBIC8qIEIzRm9sZFBhdGhDb25zdGFudHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNGb2xkUGF0aENvbnN0YW50cy5o
OyBwYXRoID0gYjMvQjNGb2xkUGF0aENvbnN0YW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjc0QjkzQTFGODk2MTQ1MDBCOTM1RDMgLyogUHJvdG90eXBlS2V5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3RvdHlwZUtleS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwRjc1QTA1NDIwMEQyNUVGMDAzOEUyQ0YgLyogQWxsb2NhdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFsbG9jYXRvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRjc1QTA1NTIwMEQyNUVGMDAzOEUyQ0YgLyogVGhyZWFkTG9j
YWxDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRMb2NhbENh
Y2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNzVBMDU2MjAwRDI1RUYwMDM4
RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBUaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkwRjc1QTA1NzIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9jYWxBbGxvY2F0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3NUEwNTgyMDBEMjVGMDAwMzhFMkNGIC8qIFRocmVh
ZExvY2FsQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhy
ZWFkTG9jYWxDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNzVBMDU5
MjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBMb2NhbEFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGNzVBMDVBMjAwRDI1RjAwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvcklu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9jYWxBbGxvY2F0b3JJ
bmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNzVBMDVCMjAwRDI1RjEw
MDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFRocmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRjc1QTA1QzIwMEQyNUYxMDAzOEUyQ0YgLyogVGhyZWFkTG9j
YWxDYWNoZUxheW91dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRM
b2NhbENhY2hlTGF5b3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNzVBMDVE
MjAwRDI1RjEwMDM4RTJDRiAvKiBBbGxvY2F0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEFsbG9jYXRvcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMEY3NUEwNjUyMDEzRTRFRjAwMzhFMkNGIC8qIEpJVEFsbG9jYXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMUMxNUE1MDI4RDAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0
aW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN0dWJSb3V0aW5lLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzY2RDI2MTVBOENDMUIwMDhGMzYzRSAv
KiBKSVRTdHViUm91dGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKSVRTdHViUm91dGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzY2
RDI5MTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRTdHViUm91dGluZVNldC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NDY1LDcgKzU0NDcsNiBAQAogCQkJCTE0MjlEOTJFMEVE
MjJENzAwMEI4OTYxOSAvKiBKSVQuaCAqLywKIAkJCQlGRTEyMjAyNTFCRTdGNTY0MDAzOUU2RjIg
LyogSklUQWRkR2VuZXJhdG9yLmNwcCAqLywKIAkJCQlGRTEyMjAyNjFCRTdGNTY0MDAzOUU2RjIg
LyogSklUQWRkR2VuZXJhdG9yLmggKi8sCi0JCQkJMEY3NUEwNjUyMDEzRTRFRjAwMzhFMkNGIC8q
IEpJVEFsbG9jYXRvci5oICovLAogCQkJCTg2QTkwRUNGMEVFN0Q1MUYwMEFCMzUwRCAvKiBKSVRB
cml0aG1ldGljLmNwcCAqLywKIAkJCQlBNzU3MDZERDExOEEyQkNGMDA1N0Y4OEYgLyogSklUQXJp
dGhtZXRpYzMyXzY0LmNwcCAqLywKIAkJCQlGRTNBMDZBRDFDMTBDQjZGMDAzOTBGREQgLyogSklU
Qml0QW5kR2VuZXJhdG9yLmNwcCAqLywKQEAgLTU1NTksMTYgKzU1NDAsNiBAQAogCQkxNDJFMzEy
QTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCi0JCQkJMEY3NUEwNTQyMDBEMjVFRjAwMzhFMkNGIC8qIEFsbG9jYXRvci5o
ICovLAotCQkJCTBGNzVBMDVEMjAwRDI1RjEwMDM4RTJDRiAvKiBBbGxvY2F0b3JJbmxpbmVzLmgg
Ki8sCi0JCQkJMEY3NUEwNTkyMDBEMjVGMDAwMzhFMkNGIC8qIExvY2FsQWxsb2NhdG9yLmNwcCAq
LywKLQkJCQkwRjc1QTA1NzIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3IuaCAqLywK
LQkJCQkwRjc1QTA1QTIwMEQyNUYwMDAzOEUyQ0YgLyogTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmgg
Ki8sCi0JCQkJMEY3NUEwNTgyMDBEMjVGMDAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGUuY3Bw
ICovLAotCQkJCTBGNzVBMDU1MjAwRDI1RUYwMDM4RTJDRiAvKiBUaHJlYWRMb2NhbENhY2hlLmgg
Ki8sCi0JCQkJMEY3NUEwNTYyMDBEMjVFRjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGVJbmxp
bmVzLmggKi8sCi0JCQkJMEY3NUEwNUIyMDBEMjVGMTAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2Fj
aGVMYXlvdXQuY3BwICovLAotCQkJCTBGNzVBMDVDMjAwRDI1RjEwMDM4RTJDRiAvKiBUaHJlYWRM
b2NhbENhY2hlTGF5b3V0LmggKi8sCiAJCQkJMEZFQzNDNTAxRjMzQTQxNjAwRjU5QjZDIC8qIEFs
aWduZWRNZW1vcnlBbGxvY2F0b3IuY3BwICovLAogCQkJCTBGRUMzQzUxMUYzM0E0MTYwMEY1OUI2
QyAvKiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yLmggKi8sCiAJCQkJMEZBNzYyMEExREI5NTlGNjAw
QjdBMkZEIC8qIEFsbG9jYXRpbmdTY29wZS5oICovLApAQCAtODA3Nyw3ICs4MDQ4LDYgQEAKIAkJ
CQkwRjJBQzU3MTFFOEVFNDU0MDAwMUVFM0YgLyogQWlyRm9ybVRhYmxlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkVDODU3NzFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3OTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJh
dGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNzVBMDYxMjAwRDI2MTgwMDM4RTJDRiAvKiBMb2Nh
bEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1N0ExQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3QzFC
REFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRUM4NTdFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCBpbiBIZWFk
ZXJzICovLApAQCAtODI0Myw3ICs4MjEzLDYgQEAKIAkJCQkwRjZCOEFERDFDNEVGQUMzMDA5Njkw
NTIgLyogQjNTU0FDYWxjdWxhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzRkNGODFDMTM2
RTI1MDAzMjNGNjcgLyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRUM4NTMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMEY3NUEwNjQyMDBEMjYyODAwMzhFMkNGIC8qIFRocmVhZExvY2Fs
Q2FjaGVMYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4REYyMUJFOTNBRDEwMDEzQzg4
RiAvKiBCM1N0YWNrbWFwVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTQ5NTg4MUM1N0Y0
NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MzYx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8s
CkBAIC04NDEzLDcgKzgzODIsNiBAQAogCQkJCTBGMUUzQTQ2MTUzNENCQUYwMDBGOTQ1NiAvKiBE
RkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxMjFBQjNEOEJF
MDBCQkI4RTggLyogREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyREQ4MTQxQUIzRDhCRTAwQkJCOEU4IC8qIERGR0FyZ3VtZW50c1V0aWxpdGllcy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMEY3NUEwNjMyMDBEMjYxRjAwMzhFMkNGIC8qIEFsbG9jYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0ODUzMjIxODc3NTA1NjAwODNCNjg3IC8qIERGR0Fy
aXRoTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwNUMzQjQxNjgzQ0Y5MjAwQkFGNDVCIC8q
IERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5
NDg1MTVFNDgxMUIwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCBpbiBIZWFkZXJzICovLApAQCAt
ODY5NCw3ICs4NjYyLDYgQEAKIAkJCQlGRUEwQzQwMzFDREQ3RDFEMDA0ODE5OTEgLyogRnVuY3Rp
b25XaGl0ZWxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBQUNFNjNEMThDQTVBMDMwMEVEMDE5
MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQkUyQ0FFMTRF
OTg1QUEwMDA1OTNBRCAvKiBHQ0Fzc2VydGlvbnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNzVB
MDYwMjAwRDI2MEIwMDM4RTJDRiAvKiBMb2NhbEFsbG9jYXRvcklubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNzY2RDMwMTVBOERDRTIwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRp
bmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDBFNUVBMUU0M0QzNEQwMDA2QUIwOCAvKiBHQ0Nv
bmR1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNDc2N0UxRDk5QUVBOTAwOEVBNkNCIC8q
IEdDRGVmZXJyYWxDb250ZXh0LmggaW4gSGVhZGVycyAqLywKQEAgLTg3NzksNyArODc0Niw2IEBA
CiAJCQkJMEZCN0YzOUExNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUIxNUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5n
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQzODZBNzkxREQ2OTg5QzAwODY1MkM0IC8qIElu
ZGlyZWN0RXZhbEV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNzVBMDYyMjAwRDI2
MUQwMDM4RTJDRiAvKiBBbGxvY2F0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJG
OTJCOTFGRDc2RkZGMDBBQzI4QTggLyogSW5mZXJyZWRTdHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQkY5MkJBMUZENzcwMDQwMEFDMjhBOCAvKiBJbmZlcnJlZFN0cnVjdHVyZVdhdGNo
cG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEE3NTIzMUI5NEJGQTkwMDExMDY2MCAvKiBJ
bmZlcnJlZFR5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtODk2NSw3ICs4OTMxLDYgQEAKIAkJCQlF
MzNGNTA3OTFCODQyMjU3MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRjUwODcxQjg0NDlFRjAwNDEzODU2IC8qIEpTSW50ZXJu
YWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNGNTA4NTFC
ODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMEY3NUEwNUUyMDBEMjVGNjAwMzhFMkNGIC8qIFRocmVhZExvY2FsQ2FjaGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUUzM0Y1MDc1MUI4NDIxQzAwMDQxMzg1NiAvKiBKU0ludGVybmFs
UHJvbWlzZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwM0ZBMUUxODhFMEZCMDAw
MTEwRjE0IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNzAxM0NBOEMxQjQ5MUE5NDAwQ0FFNjEzIC8qIEpTSm9iLmggaW4gSGVhZGVycyAqLywK
QEAgLTk0NjUsNyArOTQzMCw2IEBACiAJCQkJMTRFODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdl
YWtJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEJFN0QzMzE3MTM1Q0Y0MDBEMTgwN0EgLyog
V2Vha0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0EzQUU0MTdEQTQxQUUwMDY1MzhB
RiAvKiBXZWFrTWFwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNzVBMDY2MjAx
M0U0RjEwMDM4RTJDRiAvKiBKSVRBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzQTMy
QkM3MUZDODMxNDcwMDdEN0U3NiAvKiBXZWFrTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTM5M0FERDgxRkU3MDJEMDAwMjJENjgxIC8qIFdlYWtNYXBJbXBsSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdDQTNBRTYxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBQcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IDg2ZjU2YzEz
NTY5OTg1YTE5MTRkYzkxZDA3NjBlNzdiNDRlZWU0ZmMuLjNjZDlhODg0YTk5ZGQ1ZmExZWRkM2U3
OTNkZGIxOWJhOTNkNzI0NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTQ2Niw3
ICs0NjYsNiBAQCBmdGwvRlRMVGh1bmtzLmNwcAogZnRsL0ZUTFZhbHVlUmFuZ2UuY3BwCiAKIGhl
YXAvQWxpZ25lZE1lbW9yeUFsbG9jYXRvci5jcHAKLWhlYXAvQWxsb2NhdG9yLmNwcAogaGVhcC9C
bG9ja0RpcmVjdG9yeS5jcHAKIGhlYXAvQ2VsbEF0dHJpYnV0ZXMuY3BwCiBoZWFwL0NlbGxDb250
YWluZXIuY3BwCkBAIC01MDEsNyArNTAwLDYgQEAgaGVhcC9Jc29DZWxsU2V0LmNwcAogaGVhcC9J
c29TdWJzcGFjZS5jcHAKIGhlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCiBoZWFwL0xhcmdlQWxs
b2NhdGlvbi5jcHAKLWhlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCiBoZWFwL01hY2hpbmVTdGFja01h
cmtlci5jcHAKIGhlYXAvTWFya1N0YWNrLmNwcAogaGVhcC9NYXJrU3RhY2tNZXJnaW5nQ29uc3Ry
YWludC5jcHAKQEAgLTUyMCw4ICs1MTgsNiBAQCBoZWFwL1N0b3BJZk5lY2Vzc2FyeVRpbWVyLmNw
cAogaGVhcC9TdWJzcGFjZS5jcHAKIGhlYXAvU3luY2hyb25vdXNTdG9wVGhlV29ybGRNdXRhdG9y
U2NoZWR1bGVyLmNwcAogaGVhcC9TeW5jaHJvbm91c25lc3MuY3BwCi1oZWFwL1RocmVhZExvY2Fs
Q2FjaGUuY3BwCi1oZWFwL1RocmVhZExvY2FsQ2FjaGVMYXlvdXQuY3BwCiBoZWFwL1Zpc2l0UmFj
ZUtleS5jcHAKIGhlYXAvV2Vhay5jcHAKIGhlYXAvV2Vha0Jsb2NrLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAppbmRleCBhMDhlMWI0OTgwYTYyNThjZjNjZjhi
YmViY2NkNTNkNDBlNjkwMTY0Li44NTBkNjQxOGZlNjlmOTQ3ZjEwOTJkZjU2OTUzZDc0YTM3NGY5
MDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcApAQCAtMTI3
NywxMiArMTI3Nyw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXI6CiAgICAgICAgICAgICAgICAgYXJnID0gdG1wKHZhbHVlLnZhbHVlKCkpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyV2l0aENsb2JiZXI6IHsKLSAgICAgICAgICAgICAgICBUbXAgZHN0VG1wID0gbV9jb2RlLm5l
d1RtcCh2YWx1ZS52YWx1ZSgpLT5yZXN1bHRCYW5rKCkpOwotICAgICAgICAgICAgICAgIGFwcGVu
ZChyZWxheGVkTW92ZUZvclR5cGUodmFsdWUudmFsdWUoKS0+dHlwZSgpKSwgaW1tT3JUbXAodmFs
dWUudmFsdWUoKSksIGRzdFRtcCk7Ci0gICAgICAgICAgICAgICAgYXJnID0gZHN0VG1wOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6TGF0ZVJlZ2lzdGVyOgogICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6
CiAgICAgICAgICAgICAgICAgc3RhY2ttYXAtPmVhcmx5Q2xvYmJlcmVkKCkuY2xlYXIodmFsdWUu
cmVwKCkucmVnKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0
Y2hwb2ludFNwZWNpYWwuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2lu
dFNwZWNpYWwuY3BwCmluZGV4IDUxNjkxN2JiMTU5OThiOGRmZWE2NjkxN2EzY2Q5MDFjZDdkZjgw
YzQuLmIzNzVjZGQwZTBmYjBiZjA4NjIwNGQxMjc2M2FhMGQ1MmIxODEyYTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAKQEAgLTExOCw3
ICsxMTgsNiBAQCBib29sIFBhdGNocG9pbnRTcGVjaWFsOjphZG1pdHNTdGFjayhJbnN0JiBpbnN0
LCB1bnNpZ25lZCBhcmdJbmRleCkKICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVu
dDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXI6Ci0gICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcldpdGhDbG9iYmVy
OgogICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lRWFybHlSZWdpc3RlcjoKICAgICAgICAgY2Fz
ZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OkxhdGVSZWdpc3Rl
cjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lh
bC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCmlu
ZGV4IDYyMGQ2ZjgzYzNiYTgyNDUyZTMwMzMyN2RmMzQ5ZTExY2YyMzQ0YWYuLjVlYjViOWIwZTY3
ZDM3M2MzOWJjN2Q5NmQ5M2VkOWY2YWM1ZDE4NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExMCw5ICsxMTAsNiBAQCB2b2lkIFN0
YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwoCiAgICAgICAgICAgICBjYXNlIFZhbHVlUmVw
OjpDb25zdGFudDoKICAgICAgICAgICAgICAgICByb2xlID0gQXJnOjpVc2U7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXJXaXRo
Q2xvYmJlcjoKLSAgICAgICAgICAgICAgICByb2xlID0gQXJnOjpVc2VEZWY7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpMYXRlUmVnaXN0ZXI6CiAg
ICAgICAgICAgICAgICAgcm9sZSA9IEFyZzo6TGF0ZVVzZTsKICAgICAgICAgICAgICAgICBicmVh
azsKQEAgLTEzMSwxMCArMTI4LDYgQEAgdm9pZCBTdGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmdJ
bXBsKAogICAgICAgICAgICAgLy8gYmUgYWJsZSB0byByZWNvdmVyIHRoZSBzdGFja21hcCB2YWx1
ZS4gU28sIGZvcmNlIExhdGVDb2xkVXNlIHRvIHByZXNlcnZlIHRoZQogICAgICAgICAgICAgLy8g
b3JpZ2luYWwgc3RhY2ttYXAgdmFsdWUgYWNyb3NzIHRoZSBTcGVjaWFsIG9wZXJhdGlvbi4KICAg
ICAgICAgICAgIGlmICghQXJnOjppc0xhdGVVc2Uocm9sZSkgJiYgb3B0aW9uYWxEZWZBcmdXaWR0
aCAmJiAqb3B0aW9uYWxEZWZBcmdXaWR0aCA8IGNoaWxkLnZhbHVlKCktPnJlc3VsdFdpZHRoKCkp
IHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgcm9sZSBjYW4gb25seSBiZSBzb21lIGtpbmQgb2Yg
ZGVmIGlmIHdlIGRpZCBTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlciwgd2hpY2ggaXMKLSAgICAgICAg
ICAgICAgICAvLyBvbmx5IGFsbG93ZWQgZm9yIHBhdGNocG9pbnRzLiBQYXRjaHBvaW50cyBkb24n
dCB1c2UgdGhlIGRlZkFyZ1dpZHRoIGZlYXR1cmUuCi0gICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIUFyZzo6aXNBbnlEZWYocm9sZSkpOwotICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGlmIChBcmc6OmlzV2FybVVzZShyb2xlKSkKICAgICAgICAgICAgICAgICAgICAgcm9s
ZSA9IEFyZzo6TGF0ZVVzZTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC0yNTIsNyArMjQ1LDYg
QEAgYm9vbCBTdGFja21hcFNwZWNpYWw6OmlzQXJnVmFsaWRGb3JSZXAoQWlyOjpDb2RlJiBjb2Rl
LCBjb25zdCBBaXI6OkFyZyYgYXJnLCBjb24KICAgICAgICAgLy8gV2UgYWxyZWFkeSB2ZXJpZmll
ZCBieSBpc0FyZ1ZhbGlkRm9yVmFsdWUoKS4KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2Fz
ZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgotICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cldpdGhDbG9iYmVyOgogICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVFYXJseVJlZ2lzdGVyOgogICAg
ICAgICByZXR1cm4gYXJnLmlzVG1wKCk7CiAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZVJlZ2lzdGVy
OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmNwcAppbmRleCAw
ZWJhZjhhNTMxNTUyNzY3NjQ5OWNmMTdjYTA4NTAyY2EyZGQ5ODg5Li45YjBkYjJmNDYwZWRmZmFi
YTgzN2VkNGQxNTQzYTljMzNmMzY2MjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja21hcFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcFZhbHVlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01MywxMSArNTMsNiBAQCB2b2lkIFN0YWNrbWFwVmFsdWU6OmFw
cGVuZFNvbWVSZWdpc3RlcihWYWx1ZSogdmFsdWUpCiAgICAgYXBwZW5kKENvbnN0cmFpbmVkVmFs
dWUodmFsdWUsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKIH0KIAotdm9pZCBTdGFja21hcFZh
bHVlOjphcHBlbmRTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlcihWYWx1ZSogdmFsdWUpCi17Ci0gICAg
YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUodmFsdWUsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXJXaXRo
Q2xvYmJlcikpOwotfQotCiB2b2lkIFN0YWNrbWFwVmFsdWU6OnNldENvbnN0cmFpbmVkQ2hpbGQo
dW5zaWduZWQgaW5kZXgsIGNvbnN0IENvbnN0cmFpbmVkVmFsdWUmIGNvbnN0cmFpbmVkVmFsdWUp
CiB7CiAgICAgY2hpbGQoaW5kZXgpID0gY29uc3RyYWluZWRWYWx1ZS52YWx1ZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCmluZGV4IDUyYjIxMDFlOGNlM2Zh
NWEzOTJjNWJiOGJkMjUwZWU3OWRmYzM4NjkuLjY2ZmM2NDRiMTM1NWEzOWY2NTczYWVhMGUzZGVh
YmRjZTFkZTk1MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
bWFwVmFsdWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVl
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC05OSw4ICs5OSw3IEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIGlzIGEgaGVscGVyIGZv
ciBzb21ldGhpbmcgeW91IG1pZ2h0IGRvIGEgbG90IG9mOiBhcHBlbmQgYSB2YWx1ZSB0aGF0IHNo
b3VsZCBiZSBjb25zdHJhaW5lZAogICAgIC8vIHRvIFNvbWVSZWdpc3Rlci4KICAgICB2b2lkIGFw
cGVuZFNvbWVSZWdpc3RlcihWYWx1ZSopOwotICAgIHZvaWQgYXBwZW5kU29tZVJlZ2lzdGVyV2l0
aENsb2JiZXIoVmFsdWUqKTsKLSAgICAKKwogICAgIGNvbnN0IFZlY3RvcjxWYWx1ZVJlcD4mIHJl
cHMoKSBjb25zdCB7IHJldHVybiBtX3JlcHM7IH0KIAogICAgIC8vIFN0YWNrbWFwcyBhbGxvdyB5
b3UgdG8gc3BlY2lmeSB0aGF0IHRoZSBvcGVyYXRpb24gbWF5IGNsb2JiZXIgc29tZSByZWdpc3Rl
cnMuIENsb2JiZXJpbmcgYSByZWdpc3RlcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsaWRhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRh
dGUuY3BwCmluZGV4IGJiOWRlOWQ2YTQ3ZTAxMmIwOGY3NmJlYTFkNTc2NmM2OTAyNTM0OWYuLjgy
MjBlYjk0ZTEwMDdhZmJjNjBkZGU4OWQ5M2M5MWIxNTAzYmE5YmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKQEAgLTQzMiw4ICs0MzIsMjEgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2luZCgpLmhhc0V4dHJhQml0cygpLCAoIkF0
ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+dHlwZSgpID09IFZvaWQp
CiAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5hczxQYXRjaHBvaW50VmFsdWU+
KCktPnJlc3VsdENvbnN0cmFpbnQgPT0gVmFsdWVSZXA6Oldhcm1BbnksICgiQXQgIiwgKnZhbHVl
KSk7Ci0gICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT5hczxQYXRjaHBvaW50VmFsdWU+KCktPnJlc3Vs
dENvbnN0cmFpbnQua2luZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6
Oldhcm1Bbnk6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZUVhcmx5UmVnaXN0ZXI6
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICAg
ICAgICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0FyZ3VtZW50OgorICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURShmYWxzZSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrbWFwQ29uc3RyYWlu
dCh2YWx1ZSwgQ29uc3RyYWluZWRWYWx1ZSh2YWx1ZSwgdmFsdWUtPmFzPFBhdGNocG9pbnRWYWx1
ZT4oKS0+cmVzdWx0Q29uc3RyYWludCksIENvbnN0cmFpbnRSb2xlOjpEZWYpOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrbWFwKHZhbHVlKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ2hlY2tBZGQ6CkBAIC01NTgsMjQg
KzU3MSwxNiBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZXAoKS5r
aW5kKCkpIHsKICAgICAgICAgY2FzZSBWYWx1ZVJlcDo6V2FybUFueToKKyAgICAgICAgY2FzZSBW
YWx1ZVJlcDo6Q29sZEFueToKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnk6CiAg
ICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKICAgICAgICAgY2FzZSBWYWx1ZVJl
cDo6U3RhY2tBcmd1bWVudDoKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFZhbHVl
UmVwOjpMYXRlQ29sZEFueToKLSAgICAgICAgY2FzZSBWYWx1ZVJlcDo6Q29sZEFueToKLSAgICAg
ICAgICAgIFZBTElEQVRFKHJvbGUgPT0gQ29uc3RyYWludFJvbGU6OlVzZSwgKCJBdCAiLCAqY29u
dGV4dCwgIjogIiwgdmFsdWUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFZh
bHVlUmVwOjpTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlcjoKLSAgICAgICAgICAgIFZBTElEQVRFKHJv
bGUgPT0gQ29uc3RyYWludFJvbGU6OlVzZSwgKCJBdCAiLCAqY29udGV4dCwgIjogIiwgdmFsdWUp
KTsKLSAgICAgICAgICAgIFZBTElEQVRFKGNvbnRleHQtPmFzPFBhdGNocG9pbnRWYWx1ZT4oKSwg
KCJBdCAiLCAqY29udGV4dCkpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVmFs
dWVSZXA6OlNvbWVFYXJseVJlZ2lzdGVyOgogICAgICAgICAgICAgVkFMSURBVEUocm9sZSA9PSBD
b25zdHJhaW50Um9sZTo6RGVmLCAoIkF0ICIsICpjb250ZXh0LCAiOiAiLCB2YWx1ZSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgogICAgICAg
ICBjYXNlIFZhbHVlUmVwOjpMYXRlUmVnaXN0ZXI6Ci0gICAgICAgICAgICBpZiAodmFsdWUucmVw
KCkua2luZCgpID09IFZhbHVlUmVwOjpMYXRlUmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgVkFM
SURBVEUocm9sZSA9PSBDb25zdHJhaW50Um9sZTo6VXNlLCAoIkF0ICIsICpjb250ZXh0LCAiOiAi
LCB2YWx1ZSkpOwogICAgICAgICAgICAgaWYgKHZhbHVlLnJlcCgpLnJlZygpLmlzR1BSKCkpCiAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUudmFsdWUoKS0+dHlwZSgpKSwgKCJB
dCAiLCAqY29udGV4dCwgIjogIiwgdmFsdWUpKTsKICAgICAgICAgICAgIGVsc2UKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAppbmRleCA0NWExMTEzZTBkZTQzNTQ2OWQ5MzAy
OWJhNDg5MTNiMWU3MWQ1ZGEzLi45ODg4ZDIyOGY1YjczOWEzMDE2YTI2ZDRjMWJlN2Y0YTAwYzdk
ZTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNyAr
NDAsNiBAQCB2b2lkIFZhbHVlUmVwOjphZGRVc2VkUmVnaXN0ZXJzVG8oUmVnaXN0ZXJTZXQmIHNl
dCkgY29uc3QKICAgICBjYXNlIENvbGRBbnk6CiAgICAgY2FzZSBMYXRlQ29sZEFueToKICAgICBj
YXNlIFNvbWVSZWdpc3RlcjoKLSAgICBjYXNlIFNvbWVSZWdpc3RlcldpdGhDbG9iYmVyOgogICAg
IGNhc2UgU29tZUVhcmx5UmVnaXN0ZXI6CiAgICAgY2FzZSBDb25zdGFudDoKICAgICAgICAgcmV0
dXJuOwpAQCAtNzIsNyArNzEsNiBAQCB2b2lkIFZhbHVlUmVwOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CiAgICAgY2FzZSBDb2xkQW55OgogICAgIGNhc2UgTGF0ZUNvbGRBbnk6CiAgICAg
Y2FzZSBTb21lUmVnaXN0ZXI6Ci0gICAgY2FzZSBTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlcjoKICAg
ICBjYXNlIFNvbWVFYXJseVJlZ2lzdGVyOgogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBMYXRl
UmVnaXN0ZXI6CkBAIC0xNzcsOSArMTc1LDYgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIFZhbHVlUmVwOjpLaW5kIGtpbmQpCiAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJl
Z2lzdGVyOgogICAgICAgICBvdXQucHJpbnQoIlNvbWVSZWdpc3RlciIpOwogICAgICAgICByZXR1
cm47Ci0gICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyV2l0aENsb2JiZXI6Ci0gICAgICAg
IG91dC5wcmludCgiU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIiKTsKLSAgICAgICAgcmV0dXJuOwog
ICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVFYXJseVJlZ2lzdGVyOgogICAgICAgICBvdXQucHJpbnQo
IlNvbWVFYXJseVJlZ2lzdGVyIik7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZVJlcC5oCmluZGV4IGNlZDYwNGVjZDEyNjYzMDUyOWFkN2M5NjdhNTkwYjhiYzE1
OTdmNGMuLmNiZjQwMGE4YmE3NGNlZDI4YTBiODAzMjgxMjU4YjI5YmRmMTlkYTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY1LDEwICs2NSw2IEBAIHB1YmxpYzoK
ICAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBC
MyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVyLiBJdCBjb3VsZCBiZSBhCiAgICAgICAgIC8vIHJl
Z2lzdGVyIHRoYXQgdGhpcyBjbGFpbXMgdG8gY2xvYmJlciEKICAgICAgICAgU29tZVJlZ2lzdGVy
LAotICAgICAgICAKLSAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMg
bWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVyIGJ1dCB0aGF0IHRoaXMKLSAg
ICAgICAgLy8gcmVnaXN0ZXIgaXMgdGhlbiBjb2JiZXJlZCB3aXRoIGdhcmJhZ2UuIFRoaXMgb25s
eSB3b3JrcyBmb3IgcGF0Y2hwb2ludHMuCi0gICAgICAgIFNvbWVSZWdpc3RlcldpdGhDbG9iYmVy
LAogCiAgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVz
IHRoYXQgQjMgc2hvdWxkIHBpY2sgc29tZSByZWdpc3RlciwgYnV0IGltcGxpZXMKICAgICAgICAg
Ly8gdGhhdCB0aGUgZGVmIGhhcHBlbnMgYmVmb3JlIGFueSBvZiB0aGUgZWZmZWN0cyBvZiB0aGUg
c3RhY2ttYXAuIFRoaXMgaXMgb25seSB2YWxpZCBmb3IKQEAgLTExMSw3ICsxMDcsNyBAQCBwdWJs
aWM6CiAgICAgVmFsdWVSZXAoS2luZCBraW5kKQogICAgICAgICA6IG1fa2luZChraW5kKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKGtpbmQgPT0gV2FybUFueSB8fCBraW5kID09IENvbGRBbnkgfHwg
a2luZCA9PSBMYXRlQ29sZEFueSB8fCBraW5kID09IFNvbWVSZWdpc3RlciB8fCBraW5kID09IFNv
bWVSZWdpc3RlcldpdGhDbG9iYmVyIHx8IGtpbmQgPT0gU29tZUVhcmx5UmVnaXN0ZXIpOworICAg
ICAgICBBU1NFUlQoa2luZCA9PSBXYXJtQW55IHx8IGtpbmQgPT0gQ29sZEFueSB8fCBraW5kID09
IExhdGVDb2xkQW55IHx8IGtpbmQgPT0gU29tZVJlZ2lzdGVyIHx8IGtpbmQgPT0gU29tZUVhcmx5
UmVnaXN0ZXIpOwogICAgIH0KIAogICAgIHN0YXRpYyBWYWx1ZVJlcCByZWcoUmVnIHJlZykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAppbmRleCAwY2U4
Njc5YzhmMjU2MTczYjliYWU1ZjBhODk5ZDU0MDJlNzMzYzU2Li5jOGY0YTQ5NDE5ZTZjMTA3MzYx
ZmIxNjYzOTAxMDBkY2VjZDg0ZGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0FjY2Vzc0Nhc2UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTk1NSw5ICs5NTUsMTUgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5l
cmF0ZUltcGwoQWNjZXNzR2VuZXJhdGlvblN0YXRlJiBzdGF0ZSkKICAgICAgICAgICAgIHNpemVf
dCBuZXdTaXplID0gbmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2Yo
SlNWYWx1ZSk7CiAKICAgICAgICAgICAgIGlmIChhbGxvY2F0aW5nSW5saW5lKSB7Ci0gICAgICAg
ICAgICAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFy
eVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJ
ZkV4aXN0cyk7CisgICAgICAgICAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHZt
LmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvcihuZXdTaXplLCBBbGxv
Y2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICAgICAgICAgICAgICBqaXQu
ZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9y
KSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIzLCBzbG93UGF0aCk7CisgICAgICAgICAgICAgICAg
aWYgKCFhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gWXVjaywgdGhpcyBjYXNl
IHdvdWxkIHN1Y2shCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuanVt
cCgpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjIpOworICAgICAg
ICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUiwgYWxsb2NhdG9yLCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKICAgICAgICAgICAgICAgICBqaXQuYWRkUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG5ld1NpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFk
ZXIpKSwgc2NyYXRjaEdQUik7CiAKICAgICAgICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9m
aWxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUuaAppbmRleCA2MTc3MTkxNDk4OGM5OTU2MjA2YTYxOWM4OTYzZDhhMTIzNmQwYTFhLi40
MWU1NTg1MTA5NWNhYmU3YzA2MzRjNmJkNjI1ZWFhOTRmOTIxZGYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUu
aApAQCAtNDMsNyArNDMsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZklubGluZUNhcGFjaXR5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlLCBtX2lubGluZUNhcGFjaXR5KTsgfQogCiAgICAgT2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUoKQotICAgICAgICA6IG1faW5saW5lQ2FwYWNpdHkoMCkKKyAgICAgICAgOiBtX2FsbG9j
YXRvcigwKQorICAgICAgICAsIG1faW5saW5lQ2FwYWNpdHkoMCkKICAgICB7CiAgICAgfQogCkBA
IC02Miw3ICs2Myw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAgICAg
ICAgbV9hbGxvY2F0b3IgPSBBbGxvY2F0b3IoKTsKKyAgICAgICAgbV9hbGxvY2F0b3IgPSBudWxs
cHRyOwogICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOwogICAgICAgICBtX2lubGluZUNhcGFj
aXR5ID0gMDsKICAgICAgICAgQVNTRVJUKGlzTnVsbCgpKTsKQEAgLTc2LDcgKzc3LDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBwb3NzaWJsZURlZmF1bHRQcm9wZXJ0eUNvdW50
KFZNJiwgSlNPYmplY3QqIHByb3RvdHlwZSk7CiAKLSAgICBBbGxvY2F0b3IgbV9hbGxvY2F0b3I7
IC8vIFByZWNvbXB1dGVkIHRvIG1ha2UgdGhpbmdzIGVhc2llciBmb3IgZ2VuZXJhdGVkIGNvZGUu
CisgICAgQmxvY2tEaXJlY3RvcnkqIG1fYWxsb2NhdG9yOyAvLyBQcmVjb21wdXRlZCB0byBtYWtl
IHRoaW5ncyBlYXNpZXIgZm9yIGdlbmVyYXRlZCBjb2RlLgogICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+IG1fc3RydWN0dXJlOwogICAgIHVuc2lnbmVkIG1faW5saW5lQ2FwYWNpdHk7CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRp
b25Qcm9maWxlSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVj
dEFsbG9jYXRpb25Qcm9maWxlSW5saW5lcy5oCmluZGV4IDU4MDlkOWQxNTAyNzQ3NTFlOWJhNTRj
ZWZiZWMxNGQyN2RlNDExN2UuLjllMjE5MTM5Y2VkZmQ2ZDkxZmQ5Y2UyOTA5NTUzYTg0MGFiNmQz
ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGVJbmxpbmVzLmgKQEAgLTUzLDcgKzUzLDcgQEAgQUxX
QVlTX0lOTElORSB2b2lkIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjppbml0aWFsaXplUHJvZmls
ZShWTSYgdm0sIEpTR2xvYmFsT2IKIAogICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBleGVjdXRhYmxlLT5jYWNoZWRQb2x5UHJvdG9TdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBGaW5hbE9iamVj
dFR5cGUpOwotICAgICAgICAgICAgbV9hbGxvY2F0b3IgPSBBbGxvY2F0b3IoKTsKKyAgICAgICAg
ICAgIG1fYWxsb2NhdG9yID0gbnVsbHB0cjsKICAgICAgICAgICAgIG1fc3RydWN0dXJlLnNldCh2
bSwgb3duZXIsIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICBtX2lubGluZUNhcGFjaXR5ID0gc3Ry
dWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtOTksMTEg
Kzk5LDExIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6aW5p
dGlhbGl6ZVByb2ZpbGUoVk0mIHZtLCBKU0dsb2JhbE9iCiAgICAgQVNTRVJUKGlubGluZUNhcGFj
aXR5IDw9IEpTRmluYWxPYmplY3Q6Om1heElubGluZUNhcGFjaXR5KCkpOwogCiAgICAgc2l6ZV90
IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoaW5saW5lQ2Fw
YWNpdHkpOwotICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSB2bS5jZWxsU3BhY2UuYWxsb2NhdG9y
Rm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6RW5zdXJlQWxs
b2NhdG9yKTsKKyAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gdm0uY2VsbFNwYWNlLmFs
bG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkVu
c3VyZUFsbG9jYXRvcik7CiAKICAgICAvLyBUYWtlIGFkdmFudGFnZSBvZiBleHRyYSBpbmxpbmUg
Y2FwYWNpdHkgYXZhaWxhYmxlIGluIHRoZSBzaXplIGNsYXNzLgogICAgIGlmIChhbGxvY2F0b3Ip
IHsKLSAgICAgICAgc2l6ZV90IHNsb3AgPSAoYWxsb2NhdG9yLmNlbGxTaXplKHZtLmhlYXApIC0g
YWxsb2NhdGlvblNpemUpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7CisgICAgICAg
IHNpemVfdCBzbG9wID0gKGFsbG9jYXRvci0+Y2VsbFNpemUoKSAtIGFsbG9jYXRpb25TaXplKSAv
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOwogICAgICAgICBpbmxpbmVDYXBhY2l0eSAr
PSBzbG9wOwogICAgICAgICBpZiAoaW5saW5lQ2FwYWNpdHkgPiBKU0ZpbmFsT2JqZWN0OjptYXhJ
bmxpbmVDYXBhY2l0eSgpKQogICAgICAgICAgICAgaW5saW5lQ2FwYWNpdHkgPSBKU0ZpbmFsT2Jq
ZWN0OjptYXhJbmxpbmVDYXBhY2l0eSgpOwpAQCAtMTEzLDcgKzExMyw3IEBAIEFMV0FZU19JTkxJ
TkUgdm9pZCBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6aW5pdGlhbGl6ZVByb2ZpbGUoVk0mIHZt
LCBKU0dsb2JhbE9iCiAKICAgICBpZiAoaXNQb2x5UHJvdG8pIHsKICAgICAgICAgQVNTRVJUKHN0
cnVjdHVyZS0+aGFzUG9seVByb3RvKCkpOwotICAgICAgICBtX2FsbG9jYXRvciA9IEFsbG9jYXRv
cigpOworICAgICAgICBtX2FsbG9jYXRvciA9IG51bGxwdHI7CiAgICAgICAgIGV4ZWN1dGFibGUt
PnNldENhY2hlZFBvbHlQcm90b1N0cnVjdHVyZSh2bSwgc3RydWN0dXJlKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBpZiAoZXhlY3V0YWJsZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCBkMmQzZTM2NDc3M2JiNDE1NDYyN2Y1MGE0
MDFlYzExZjEzZTY5NGNiLi44NDE1MzJmMTExNWQzMzgyOWEwNmRjZjE2NDkxM2JiMjU5ZmQzZTlj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cApAQCAtMTEzLDggKzExMyw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRBbGxvY2F0ZVJh
d09iamVjdChHUFJSZWcgcmVzdWx0R1BSLCBSZWdpc3RlcmVkU3RydWN0dXJlCiAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tUHRyKDApLCBzdG9yYWdlR1BSKTsKIAogICAgIGlmIChzaXplKSB7Ci0g
ICAgICAgIGlmIChBbGxvY2F0b3IgYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdpZ2Fj
YWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0b3JG
b3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cykpIHsKLSAgICAgICAgICAgIG1faml0LmVtaXRBbGxv
Y2F0ZShzdG9yYWdlR1BSLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIHNjcmF0
Y2hHUFIsIHNjcmF0Y2gyR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBpZiAoQmxvY2tEaXJlY3Rv
cnkqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNl
LmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9y
SWZFeGlzdHMpKSB7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2Nh
dG9yKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBtX2ppdC5lbWl0QWxsb2NhdGUoc3RvcmFn
ZUdQUiwgYWxsb2NhdG9yLCBzY3JhdGNoR1BSLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuYWRkUHRyKAogICAgICAgICAgICAgICAgIFRy
dXN0ZWRJbW0zMihvdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZihJ
bmRleGluZ0hlYWRlcikpLApAQCAtMTI3LDEwICsxMjgsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEFsbG9jYXRlUmF3T2JqZWN0KEdQUlJlZyByZXN1bHRHUFIsIFJlZ2lzdGVyZWRTdHJ1
Y3R1cmUKICAgICB9CiAKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0
OjphbGxvY2F0aW9uU2l6ZShpbmxpbmVDYXBhY2l0eSk7Ci0gICAgQWxsb2NhdG9yIGFsbG9jYXRv
ciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX2ppdC52bSgpKS0+YWxsb2NhdG9yRm9y
Tm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZF
eGlzdHMpOwotICAgIGlmIChhbGxvY2F0b3IpIHsKKyAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2Nh
dG9yUHRyID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1faml0LnZtKCkpLT5hbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0
b3JJZkV4aXN0cyk7CisgICAgaWYgKGFsbG9jYXRvclB0cikgeworICAgICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yUHRyKSwgc2NyYXRjaEdQUik7CiAgICAgICAgIHVpbnQz
Ml90IG1hc2sgPSBXVEY6OmNvbXB1dGVJbmRleGluZ01hc2sodmVjdG9yTGVuZ3RoKTsKLSAgICAg
ICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50
KGFsbG9jYXRvciksIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFn
ZUdQUiwgVHJ1c3RlZEltbTMyKG1hc2spLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAg
ICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBhbGxvY2F0b3JQdHIsIHNjcmF0Y2hH
UFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgc3RvcmFnZUdQUiwgVHJ1c3RlZEltbTMyKG1h
c2spLCBzY3JhdGNoMkdQUiwgc2xvd0Nhc2VzKTsKICAgICAgICAgbV9qaXQuZW1pdEluaXRpYWxp
emVJbmxpbmVTdG9yYWdlKHJlc3VsdEdQUiwgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsK
ICAgICB9IGVsc2UKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwpAQCAt
NDIwNiw4ICs0MjA4LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1ha2VSb3BlKE5v
ZGUqIG5vZGUpCiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgIAog
ICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKLSAgICBBbGxvY2F0b3IgYWxsb2Nh
dG9yVmFsdWUgPSBzdWJzcGFjZUZvcjxKU1JvcGVTdHJpbmc+KCptX2ppdC52bSgpKS0+YWxsb2Nh
dG9yRm9yTm9uVmlydHVhbChzaXplb2YoSlNSb3BlU3RyaW5nKSwgQWxsb2NhdG9yRm9yTW9kZTo6
QWxsb2NhdG9ySWZFeGlzdHMpOwotICAgIGVtaXRBbGxvY2F0ZUpTQ2VsbChyZXN1bHRHUFIsIEpJ
VEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yVmFsdWUpLCBhbGxvY2F0b3JHUFIsIFRydXN0
ZWRJbW1QdHIobV9qaXQuZ3JhcGgoKS5yZWdpc3RlclN0cnVjdHVyZShtX2ppdC52bSgpLT5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpKSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOworICAgIEJsb2NrRGly
ZWN0b3J5KiBibG9ja0RpcmVjdG9yeSA9IHN1YnNwYWNlRm9yPEpTUm9wZVN0cmluZz4oKm1faml0
LnZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVvZihKU1JvcGVTdHJpbmcpLCBBbGxv
Y2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tUHRyKGJsb2NrRGlyZWN0b3J5KSwgYWxsb2NhdG9yR1BSKTsKKyAgICBlbWl0QWxsb2NhdGVK
U0NlbGwocmVzdWx0R1BSLCBibG9ja0RpcmVjdG9yeSwgYWxsb2NhdG9yR1BSLCBUcnVzdGVkSW1t
UHRyKG1faml0LmdyYXBoKCkucmVnaXN0ZXJTdHJ1Y3R1cmUobV9qaXQudm0oKS0+c3RyaW5nU3Ry
dWN0dXJlLmdldCgpKSksIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKICAgICAgICAgCiAgICAgbV9q
aXQuc3RvcmVQdHIoVHJ1c3RlZEltbVB0cigwKSwgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0
R1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bU9wR1BSczsgKytpKQpAQCAtODM4MSw3ICs4Mzg0LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUqIG5vZGUpCiAgICAg
CiAgICAgc2l6ZV90IHNpemUgPSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNW
YWx1ZSk7CiAKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNWYWx1ZUdp
Z2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBBbGxvY2F0
b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9j
YXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRv
ckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMp
OwogCiAgICAgaWYgKCFhbGxvY2F0b3IgfHwgbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+
Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTg0MDYsOCArODQwOSw5IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlKiBub2Rl
KQogICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IHNjcmF0Y2gyLmdwcigpOwogICAgIEdQUlJlZyBz
Y3JhdGNoR1BSMyA9IHNjcmF0Y2gzLmdwcigpOwogICAgICAgICAKKyAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjIpOwogICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBzbG93UGF0aDsKLSAgICBtX2ppdC5lbWl0QWxsb2NhdGUoc2NyYXRjaEdQUjEsIEpJ
VEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIz
LCBzbG93UGF0aCk7CisgICAgbV9qaXQuZW1pdEFsbG9jYXRlKHNjcmF0Y2hHUFIxLCBhbGxvY2F0
b3IsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMywgc2xvd1BhdGgpOwogICAgIG1faml0LmFkZFB0
cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemUgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIp
KSwgc2NyYXRjaEdQUjEpOwogICAgIAogICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IDA7IG9m
ZnNldCA8IHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZSk7IG9mZnNldCArPSBzaXplb2Yodm9p
ZCopKQpAQCAtODQyNSw3ICs4NDI5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJl
YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSogbm9kZSkKICAgICBzaXplX3QgbmV3U2l6ZSA9
IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7CiAgICAgQVNTRVJUKG5ld1NpemUgPT0g
bm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpT
VmFsdWUpKTsKICAgICAKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gbV9qaXQudm0oKS0+anNW
YWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9yTm9uVmlydHVhbChuZXdTaXpl
LCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgQmxvY2tEaXJlY3Rv
cnkqIGFsbG9jYXRvciA9IG1faml0LnZtKCktPmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNl
LmFsbG9jYXRvckZvck5vblZpcnR1YWwobmV3U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2Nh
dG9ySWZFeGlzdHMpOwogCiAgICAgaWYgKCFhbGxvY2F0b3IgfHwgbm9kZS0+dHJhbnNpdGlvbigp
LT5wcmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewogICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTg0NTMsNyArODQ1
Nyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlKE5vZGUqIG5vZGUpCiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0gc2NyYXRjaDMuZ3ByKCk7
CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotICAgIG1faml0LmVt
aXRBbGxvY2F0ZShzY3JhdGNoR1BSMSwgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3Ip
LCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNsb3dQYXRoKTsKKyAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW1QdHIoYWxsb2NhdG9yKSwgc2NyYXRjaEdQUjIpOworICAgIG1faml0LmVtaXRBbGxv
Y2F0ZShzY3JhdGNoR1BSMSwgYWxsb2NhdG9yLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIHNs
b3dQYXRoKTsKICAgICAKICAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0z
MihuZXdTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIxKTsKICAgICAg
ICAgCkBAIC0xMTQ0MywxNCArMTE0NDgsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUNyZWF0ZVRoaXMoTm9kZSogbm9kZSkKICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoY2Fs
bGVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEpTRnVu
Y3Rpb25UeXBlKSkpOwogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoY2Fs
bGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCByYXJlRGF0YUdQUik7CiAg
ICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIHJhcmVEYXRhR1BSKSk7Ci0gICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNz
KHJhcmVEYXRhR1BSLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Q
cm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSks
IGFsbG9jYXRvckdQUik7CisgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhy
YXJlRGF0YUdQUiwgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBh
bGxvY2F0b3JHUFIpOwogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MocmFy
ZURhdGFHUFIsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2Zp
bGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3Ry
dWN0dXJlR1BSKTsKIAotICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIGFsbG9jYXRvckdQUiwgVHJ1c3RlZEltbTMyKEFsbG9jYXRvcigpLm9m
ZnNldCgpKSkpOworICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCBhbGxvY2F0b3JHUFIpKTsKIAogICAgIGF1dG8gYnV0dGVyZmx5ID0g
VHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7
Ci0gICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBKSVRBbGxvY2F0b3I6OnZhcmlh
YmxlKCksIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlR1BSLCBidXR0ZXJmbHksIG1hc2ssIHNjcmF0
Y2hHUFIsIHNsb3dQYXRoKTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIsIG51
bGxwdHIsIGFsbG9jYXRvckdQUiwgc3RydWN0dXJlR1BSLCBidXR0ZXJmbHksIG1hc2ssIHNjcmF0
Y2hHUFIsIHNsb3dQYXRoKTsKIAogICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJl
c3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCByYXJlRGF0YUdQ
Uik7CiAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKHJhcmVEYXRhR1BSLCBG
dW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZJbmxpbmVDYXBhY2l0eSgpKSwgaW5saW5lQ2Fw
YWNpdHlHUFIpOwpAQCAtMTE0NzYsMTcgKzExNDgxLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVOZXdPYmplY3QoTm9kZSogbm9kZSkKIAogICAgIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUg
c3RydWN0dXJlID0gbm9kZS0+c3RydWN0dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXpl
ID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0
eSgpKTsKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yVmFsdWUgPSBzdWJzcGFjZUZvcjxKU0ZpbmFs
T2JqZWN0PigqbV9qaXQudm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNp
emUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBCbG9ja0RpcmVj
dG9yeSogYWxsb2NhdG9yUHRyID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1faml0LnZt
KCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JN
b2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CiAKLSAgICBpZiAoIWFsbG9jYXRvclZhbHVlKQotICAg
ICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuanVtcCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
YXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAgICAgICBhdXRvIG1h
c2sgPSBUcnVzdGVkSW1tMzIoMCk7Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3Vs
dEdQUiwgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3JWYWx1ZSksIGFsbG9jYXRvckdQ
UiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hHUFIs
IHNsb3dQYXRoKTsKLSAgICAgICAgbV9qaXQuZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJl
c3VsdEdQUiwgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgbV9qaXQubXV0
YXRvckZlbmNlKCptX2ppdC52bSgpKTsKLSAgICB9CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
UHRyKGFsbG9jYXRvclB0ciksIGFsbG9jYXRvckdQUik7CisgICAgYXV0byBidXR0ZXJmbHkgPSBU
cnVzdGVkSW1tUHRyKG51bGxwdHIpOworICAgIGF1dG8gbWFzayA9IFRydXN0ZWRJbW0zMigwKTsK
KyAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRHUFIsIGFsbG9jYXRvclB0ciwgYWxsb2Nh
dG9yR1BSLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRj
aEdQUiwgc2xvd1BhdGgpOworICAgIG1faml0LmVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShy
ZXN1bHRHUFIsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgbV9qaXQubXV0YXRv
ckZlbmNlKCptX2ppdC52bSgpKTsKIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRo
Q2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3T2JqZWN0LCByZXN1bHRHUFIsIHN0cnVj
dHVyZSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgKaW5kZXggYjQ1Yzg5YWE2YjAwZTJkZjg0OTZhZjBiZTVkZGJmN2JiNzljZmE1Yy4uODA4Yzgz
N2MxMDdmOTE0ZDA1NDJlMzQyMzNhODdlZWZmZWRjNzhiNCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxNDIsNyArMzE0Miw3IEBAIHB1
YmxpYzoKICAgICAvLyBBbGxvY2F0b3IgZm9yIGEgY2VsbCBvZiBhIHNwZWNpZmljIHNpemUuCiAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+IC8vIFN0cnVjdHVyZVR5cGUgY2Fu
IGJlIEdQUiBvciBJbW1QdHIuCiAgICAgdm9pZCBlbWl0QWxsb2NhdGVKU0NlbGwoCi0gICAgICAg
IEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYgYWxsb2NhdG9yLCBHUFJSZWcg
YWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwg
U3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3QmIHNsb3dQYXRoKQogICAgIHsKICAgICAgICAgbV9qaXQuZW1p
dEFsbG9jYXRlSlNDZWxsKHJlc3VsdEdQUiwgYWxsb2NhdG9yLCBhbGxvY2F0b3JHUFIsIHN0cnVj
dHVyZSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwpAQCAtMzE1MSw3ICszMTUxLDcgQEAgcHVibGlj
OgogICAgIC8vIEFsbG9jYXRvciBmb3IgYW4gb2JqZWN0IG9mIGEgc3BlY2lmaWMgc2l6ZS4KICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU3RydWN0dXJlVHlwZSwgdHlwZW5hbWUgU3RvcmFnZVR5cGUs
IHR5cGVuYW1lIE1hc2tUeXBlPiAvLyBTdHJ1Y3R1cmVUeXBlLCBTdG9yYWdlVHlwZSBhbmQsIE1h
c2tUeXBlIGNhbiBiZSBHUFIgb3IgSW1tUHRyLgogICAgIHZvaWQgZW1pdEFsbG9jYXRlSlNPYmpl
Y3QoCi0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYgYWxsb2Nh
dG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiwgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciwgR1BSUmVnIGFs
bG9jYXRvckdQUiwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUsCiAgICAgICAgIFN0b3JhZ2VUeXBl
IHN0b3JhZ2UsIE1hc2tUeXBlIG1hc2ssIEdQUlJlZyBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QmIHNsb3dQYXRoKQogICAgIHsKICAgICAgICAgbV9qaXQuZW1pdEFsbG9jYXRl
SlNPYmplY3QoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3Ry
YWN0SGVhcFJlcG9zaXRvcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeS5oCmluZGV4IGFmNmVkZGY5ZTI2NDg1OGMyOTFlZDg2MDAwNGZjZmI1
MWU2MTc3NjEuLjg2MmU3MzU1NjA4ZDA5MWRhNTQ5NTE3NGZjM2RmNjk2MjdlZjYwMDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9y
eS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3Np
dG9yeS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTMxLDcgKzEzMSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKIAogI2RlZmluZSBGT1JfRUFDSF9JTkRFWEVEX0FCU1RSQUNUX0hFQVAobWFjcm8pIFwKICAg
ICBtYWNybyhBcnJheVN0b3JhZ2VfdmVjdG9yLCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
LCBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkgXAotICAgIG1hY3JvKENvbXBsZXRlU3Vi
c3BhY2VfYWxsb2NhdG9yRm9yU2l6ZVN0ZXAsIENvbXBsZXRlU3Vic3BhY2U6Om9mZnNldE9mQWxs
b2NhdG9yRm9yU2l6ZVN0ZXAoKSwgc2l6ZW9mKEFsbG9jYXRvcikpIFwKKyAgICBtYWNybyhDb21w
bGV0ZVN1YnNwYWNlX2FsbG9jYXRvckZvclNpemVTdGVwLCBDb21wbGV0ZVN1YnNwYWNlOjpvZmZz
ZXRPZkFsbG9jYXRvckZvclNpemVTdGVwKCksIHNpemVvZihCbG9ja0RpcmVjdG9yeSopKSBcCiAg
ICAgbWFjcm8oRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFn
ZU9mZnNldCgpLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oSlNMZXhpY2Fs
RW52aXJvbm1lbnRfdmFyaWFibGVzLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJp
YWJsZXMoKSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXAogICAgIG1hY3JvKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMsIDAsIHNpemVv
ZihXcml0ZUJhcnJpZXI8SlNTdHJpbmc+KSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDRiZjkzMmE1M2Y0YmE0ZmRmZTc4YjYzZWFkYWZi
YjdjY2Q1MDM1NTYuLmRlZGQ2MWM4MjBmYzczM2ZjNTcxMmU4NjljZjE0NGZhNjI1OTZiY2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTU4
NzYsMTAgKzU4NzYsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKICAgICAg
ICAgCi0gICAgICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU1JvcGVTdHJp
bmc+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKHNpemVvZihKU1JvcGVTdHJpbmcpLCBB
bGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgICAgIEJsb2NrRGlyZWN0
b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU1JvcGVTdHJpbmc+KHZtKCkpLT5hbGxvY2F0
b3JGb3JOb25WaXJ0dWFsKHNpemVvZihKU1JvcGVTdHJpbmcpLCBBbGxvY2F0b3JGb3JNb2RlOjpB
bGxvY2F0b3JJZkV4aXN0cyk7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYWxs
b2NhdGVDZWxsKAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihhbGxvY2F0b3Iub2Zmc2V0
KCkpLCB2bSgpLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSwgc2xvd1BhdGgpOworICAgICAgICAgICAg
bV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgdm0oKS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCks
IHNsb3dQYXRoKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmludFB0
clplcm8sIHJlc3VsdCwgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1LaWRzOyArK2kpCkBAIC05OTA5LDcgKzk5MDksNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpIHx8IGhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpKSB7CiAgICAgICAgICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9i
amVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAg
ICAgICAgICAgICBBbGxvY2F0b3IgY2VsbEFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxP
YmplY3Q+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxv
Y2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgICAgICAgICAgICAgQmxvY2tE
aXJlY3RvcnkqIGNlbGxBbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0Pih2bSgp
KS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgICAgICAgICAgICAgYm9vbCBoYXNJbmRleGlu
Z0hlYWRlciA9IGhhc0luZGV4ZWRQcm9wZXJ0aWVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
OwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4aW5nSGVhZGVyU2l6ZSA9IDA7CkBAIC05
OTY4LDcgKzk5NjgsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgTFZhbHVlIG1hc2sg
PSBjb21wdXRlQnV0dGVyZmx5SW5kZXhpbmdNYXNrKHZlY3Rvckxlbmd0aCk7CiAgICAgICAgICAg
ICAgICAgTFZhbHVlIGZhc3RPYmplY3RWYWx1ZSA9IGFsbG9jYXRlT2JqZWN0KAotICAgICAgICAg
ICAgICAgICAgICBtX291dC5jb25zdEludDMyKGNlbGxBbGxvY2F0b3Iub2Zmc2V0KCkpLCBzdHJ1
Y3R1cmUsIGZhc3RCdXR0ZXJmbHlWYWx1ZSwgbWFzaywgc2xvd1BhdGgpOworICAgICAgICAgICAg
ICAgICAgICBtX291dC5jb25zdEludFB0cihjZWxsQWxsb2NhdG9yKSwgc3RydWN0dXJlLCBmYXN0
QnV0dGVyZmx5VmFsdWUsIG1hc2ssIHNsb3dQYXRoKTsKIAogICAgICAgICAgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGZhc3RPYmplY3QgPSBtX291dC5hbmNob3IoZmFzdE9iamVjdFZhbHVlKTsKICAg
ICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9y
KGZhc3RCdXR0ZXJmbHlWYWx1ZSk7CkBAIC0xMDk1NSw4ICsxMDk1NSw4IEBAIHByaXZhdGU6CiAg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3Jl
KHNsb3dQYXRoKTsKIAogICAgICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBzaXplSW5WYWx1ZXMg
KiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSB2bSgpLmpz
VmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZUlu
Qnl0ZXMsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLSAgICAgICAgTFZh
bHVlIHN0YXJ0T2ZTdG9yYWdlID0gYWxsb2NhdGVIZWFwQ2VsbChtX291dC5jb25zdEludDMyKGFs
bG9jYXRvci5vZmZzZXQoKSksIHNsb3dQYXRoKTsKKyAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGFs
bG9jYXRvciA9IHZtKCkuanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdG9yRm9y
Tm9uVmlydHVhbChzaXplSW5CeXRlcywgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlz
dHMpOworICAgICAgICBMVmFsdWUgc3RhcnRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUhlYXBDZWxsKG1f
b3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHNsb3dQYXRoKTsKICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKICAgICAgICAgICAgIG1fb3V0LmFk
ZChtX291dC5jb25zdEludFB0cihzaXplSW5CeXRlcyArIHNpemVvZihJbmRleGluZ0hlYWRlcikp
LCBzdGFydE9mU3RvcmFnZSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CkBA
IC0xMTk4OCwyOCArMTE5ODgsMTYgQEAgcHJpdmF0ZToKIAogICAgIExWYWx1ZSBhbGxvY2F0ZUhl
YXBDZWxsKExWYWx1ZSBhbGxvY2F0b3IsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQogICAgIHsKLSAg
ICAgICAgSklUQWxsb2NhdG9yIGFjdHVhbEFsbG9jYXRvcjsKLSAgICAgICAgaWYgKGFsbG9jYXRv
ci0+aGFzSW50MzIoKSkKLSAgICAgICAgICAgIGFjdHVhbEFsbG9jYXRvciA9IEpJVEFsbG9jYXRv
cjo6Y29uc3RhbnQoQWxsb2NhdG9yKGFsbG9jYXRvci0+YXNJbnQzMigpKSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGFjdHVhbEFsbG9jYXRvciA9IEpJVEFsbG9jYXRvcjo6dmFyaWFibGUo
KTsKKyAgICAgICAgQmxvY2tEaXJlY3RvcnkqIGFjdHVhbEFsbG9jYXRvciA9IG51bGxwdHI7Cisg
ICAgICAgIGlmIChhbGxvY2F0b3ItPmhhc0ludFB0cigpKQorICAgICAgICAgICAgYWN0dWFsQWxs
b2NhdG9yID0gYml0d2lzZV9jYXN0PEJsb2NrRGlyZWN0b3J5Kj4oYWxsb2NhdG9yLT5hc0ludFB0
cigpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChhY3R1YWxBbGxvY2F0b3IuaXNDb25zdGFudCgp
KSB7Ci0gICAgICAgICAgICBpZiAoIWFjdHVhbEFsbG9jYXRvci5hbGxvY2F0b3IoKSkgewotICAg
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGhhdmVBbGxvY2F0b3IgPSBtX291dC5uZXdCbG9jaygp
OwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3
QmxvY2tzQmVmb3JlKGhhdmVBbGxvY2F0b3IpOwotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAo
c2xvd1BhdGgpOwotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGhhdmVBbGxvY2F0b3Is
IGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50UHRyWmVybzsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFhY3R1YWxBbGxvY2F0
b3IpIHsKICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBlaXRoZXIgd2Uga25vdyB0aGF0
IHRoZSBhbGxvY2F0b3IgaXMgbnVsbCBvciB3ZSBkb24ndCBrbm93IHdoYXQgdGhlCiAgICAgICAg
ICAgICAvLyBhbGxvY2F0b3IgaXMuIEluIGVpdGhlciBjYXNlLCB3ZSBuZWVkIHRoZSBudWxsIGNo
ZWNrLgogICAgICAgICAgICAgTEJhc2ljQmxvY2sgaGF2ZUFsbG9jYXRvciA9IG1fb3V0Lm5ld0Js
b2NrKCk7CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5l
d0Jsb2Nrc0JlZm9yZShoYXZlQWxsb2NhdG9yKTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgK
LSAgICAgICAgICAgICAgICBtX291dC5ub3RFcXVhbChhbGxvY2F0b3IsIG1fb3V0LmNvbnN0SW50
MzIoQWxsb2NhdG9yKCkub2Zmc2V0KCkpKSwKLSAgICAgICAgICAgICAgICB1c3VhbGx5KGhhdmVB
bGxvY2F0b3IpLCByYXJlbHkoc2xvd1BhdGgpKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChh
bGxvY2F0b3IsIHVzdWFsbHkoaGF2ZUFsbG9jYXRvciksIHJhcmVseShzbG93UGF0aCkpOwogICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaGF2ZUFsbG9jYXRvciwgbGFzdE5leHQpOwogICAgICAg
ICB9CiAgICAgICAgIApAQCAtMTIwMTksMTAgKzEyMDA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
CiAgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQo
cG9pbnRlclR5cGUoKSk7CiAgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMudGVybWluYWwgPSB0
cnVlOwotICAgICAgICBpZiAoYWN0dWFsQWxsb2NhdG9yLmlzQ29uc3RhbnQoKSkKLSAgICAgICAg
ICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycysrOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXJXaXRoQ2xvYmJlcihhbGxv
Y2F0b3IpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIoYWxsb2NhdG9y
KTsKICAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzKys7CiAgICAgICAg
IHBhdGNocG9pbnQtPnJlc3VsdENvbnN0cmFpbnQgPSBWYWx1ZVJlcDo6U29tZUVhcmx5UmVnaXN0
ZXI7CiAgICAgICAgIApAQCAtMTIwMzMsMTIgKzEyMDE4LDYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBqdW1w
VG9TbG93UGF0aDsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHUFJSZWcgYWxs
b2NhdG9yR1BSOwotICAgICAgICAgICAgICAgIGlmIChhY3R1YWxBbGxvY2F0b3IuaXNDb25zdGFu
dCgpKQotICAgICAgICAgICAgICAgICAgICBhbGxvY2F0b3JHUFIgPSBwYXJhbXMuZ3BTY3JhdGNo
KDEpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9y
R1BSID0gcGFyYW1zWzFdLmdwcigpOwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IC8vIFdlIHVzZSBhIHBhdGNocG9pbnQgdG8gZW1pdCB0aGUgYWxsb2NhdGlvbiBwYXRoIGJlY2F1
c2Ugd2hlbmV2ZXIgd2UgbWVzcyB3aXRoCiAgICAgICAgICAgICAgICAgLy8gYWxsb2NhdGlvbiBw
YXRocywgd2UgYWxyZWFkeSByZWFzb24gYWJvdXQgdGhlbSBhdCB0aGUgbWFjaGluZSBjb2RlIGxl
dmVsLiBXZSBrbm93CiAgICAgICAgICAgICAgICAgLy8gZXhhY3RseSB3aGF0IGluc3RydWN0aW9u
IHNlcXVlbmNlIHdlIHdhbnQuIFdlJ3JlIGNvbmZpZGVudCB0aGF0IG5vIGNvbXBpbGVyCkBAIC0x
MjA0Niw3ICsxMjAyNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gQXNzZW1ibHlI
ZWxwZXJzOjplbWl0QWxsb2NhdGUoKS4gVGhhdCB3YXksIHRoZSBzYW1lIG9wdGltaXplZCBwYXRo
IGlzIHNoYXJlZCBieQogICAgICAgICAgICAgICAgIC8vIGFsbCBvZiB0aGUgY29tcGlsZXIgdGll
cnMuCiAgICAgICAgICAgICAgICAgaml0LmVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9y
KAotICAgICAgICAgICAgICAgICAgICBwYXJhbXNbMF0uZ3ByKCksIGFjdHVhbEFsbG9jYXRvciwg
YWxsb2NhdG9yR1BSLCBwYXJhbXMuZ3BTY3JhdGNoKDApLAorICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbMF0uZ3ByKCksIGFjdHVhbEFsbG9jYXRvciwgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXMu
Z3BTY3JhdGNoKDApLAogICAgICAgICAgICAgICAgICAgICBqdW1wVG9TbG93UGF0aCk7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGp1bXBUb1N1
Y2Nlc3M7CkBAIC0xMjEzOCw4ICsxMjExNyw4IEBAIHByaXZhdGU6CiAgICAgTFZhbHVlIGFsbG9j
YXRlT2JqZWN0KAogICAgICAgICBzaXplX3Qgc2l6ZSwgU3RydWN0dXJlVHlwZSBzdHJ1Y3R1cmUs
IExWYWx1ZSBidXR0ZXJmbHksIExWYWx1ZSBpbmRleGluZ01hc2ssIExCYXNpY0Jsb2NrIHNsb3dQ
YXRoKQogICAgIHsKLSAgICAgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPENs
YXNzVHlwZT4odm0oKSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9y
TW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwotICAgICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3Qo
bV9vdXQuY29uc3RJbnQzMihhbGxvY2F0b3Iub2Zmc2V0KCkpLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZs
eSwgaW5kZXhpbmdNYXNrLCBzbG93UGF0aCk7CisgICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxv
Y2F0b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKCkpLT5hbGxvY2F0b3JGb3JOb25WaXJ0
dWFsKHNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICAgICAg
cmV0dXJuIGFsbG9jYXRlT2JqZWN0KG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVj
dHVyZSwgYnV0dGVyZmx5LCBpbmRleGluZ01hc2ssIHNsb3dQYXRoKTsKICAgICB9CiAgICAgCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlLCB0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPgpA
QCAtMTIxNTgsMTYgKzEyMTM3LDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBDb21wbGV0ZVN1
YnNwYWNlKiBhY3R1YWxTdWJzcGFjZSA9IGJpdHdpc2VfY2FzdDxDb21wbGV0ZVN1YnNwYWNlKj4o
c3Vic3BhY2UtPmFzSW50UHRyKCkpOwogICAgICAgICAgICAgc2l6ZV90IGFjdHVhbFNpemUgPSBz
aXplLT5hc0ludFB0cigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBbGxvY2F0b3IgYWN0
dWFsQWxsb2NhdG9yID0gYWN0dWFsU3Vic3BhY2UtPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWN0
dWFsU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICAg
ICAgQmxvY2tEaXJlY3RvcnkqIGFjdHVhbEFsbG9jYXRvciA9IGFjdHVhbFN1YnNwYWNlLT5hbGxv
Y2F0b3JGb3JOb25WaXJ0dWFsKGFjdHVhbFNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRv
cklmRXhpc3RzKTsKICAgICAgICAgICAgIGlmICghYWN0dWFsQWxsb2NhdG9yKSB7CiAgICAgICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKICAg
ICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nr
c0JlZm9yZShjb250aW51YXRpb24pOwogICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoc2xvd1Bh
dGgpOwogICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOwotICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5pbnQzMlplcm87CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1fb3V0LmludFB0clplcm87CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDMyKGFjdHVhbEFsbG9jYXRvci5v
ZmZzZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnRQdHIoYWN0dWFsQWxs
b2NhdG9yKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdW5zaWduZWQgc3RlcFNoaWZ0
ID0gZ2V0TFNCU2V0KE1hcmtlZFNwYWNlOjpzaXplU3RlcCk7CkBAIC0xMjE4Niw3ICsxMjE2NSw3
IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBtX291dC5sb2FkMzIoCisg
ICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKAogICAgICAgICAgICAgbV9vdXQuYmFzZUluZGV4
KAogICAgICAgICAgICAgICAgIG1faGVhcHMuQ29tcGxldGVTdWJzcGFjZV9hbGxvY2F0b3JGb3JT
aXplU3RlcCwKICAgICAgICAgICAgICAgICBzdWJzcGFjZSwgbV9vdXQuc3ViKHNpemVDbGFzc0lu
ZGV4LCBtX291dC5pbnRQdHJPbmUpKSk7CkBAIC0xMjIwMSw3ICsxMjE4MCw4IEBAIHByaXZhdGU6
CiAgICAgTFZhbHVlIGFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCgKICAgICAgICAgTFZhbHVl
IHNpemUsIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBM
VmFsdWUgYnV0dGVyZmx5SW5kZXhpbmdNYXNrLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKICAgICB7
Ci0gICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKCpzdWJzcGFjZUZv
cjxDbGFzc1R5cGU+KHZtKCkpLCBzaXplLCBzbG93UGF0aCk7CisgICAgICAgIExWYWx1ZSBhbGxv
Y2F0b3IgPSBhbGxvY2F0b3JGb3JTaXplKAorICAgICAgICAgICAgKnN1YnNwYWNlRm9yPENsYXNz
VHlwZT4odm0oKSksIHNpemUsIHNsb3dQYXRoKTsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlT2Jq
ZWN0KGFsbG9jYXRvciwgc3RydWN0dXJlLCBidXR0ZXJmbHksIGJ1dHRlcmZseUluZGV4aW5nTWFz
aywgc2xvd1BhdGgpOwogICAgIH0KIApAQCAtMTIyMDksMTQgKzEyMTg5LDE1IEBAIHByaXZhdGU6
CiAgICAgTFZhbHVlIGFsbG9jYXRlVmFyaWFibGVTaXplZENlbGwoCiAgICAgICAgIExWYWx1ZSBz
aXplLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCiAgICAgewot
ICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yU2l6ZSgqc3Vic3BhY2VGb3I8
Q2xhc3NUeXBlPih2bSgpKSwgc2l6ZSwgc2xvd1BhdGgpOworICAgICAgICBMVmFsdWUgYWxsb2Nh
dG9yID0gYWxsb2NhdG9yRm9yU2l6ZSgKKyAgICAgICAgICAgICpzdWJzcGFjZUZvcjxDbGFzc1R5
cGU+KHZtKCkpLCBzaXplLCBzbG93UGF0aCk7CiAgICAgICAgIHJldHVybiBhbGxvY2F0ZUNlbGwo
YWxsb2NhdG9yLCBzdHJ1Y3R1cmUsIHNsb3dQYXRoKTsKICAgICB9CiAgICAgCiAgICAgTFZhbHVl
IGFsbG9jYXRlT2JqZWN0KFJlZ2lzdGVyZWRTdHJ1Y3R1cmUgc3RydWN0dXJlKQogICAgIHsKICAg
ICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNp
emUoc3RydWN0dXJlLmdldCgpLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgQWxsb2NhdG9y
IGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KHZtKCkpLT5hbGxvY2F0b3JG
b3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJ
ZkV4aXN0cyk7CisgICAgICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IgPSBzdWJzcGFjZUZv
cjxKU0ZpbmFsT2JqZWN0Pih2bSgpKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9u
U2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogICAgICAgICAKICAg
ICAgICAgLy8gRklYTUU6IElmIHRoZSBhbGxvY2F0b3IgaXMgbnVsbCwgd2UgY291bGQgc2ltcGx5
IGVtaXQgYSBub3JtYWwgQyBjYWxsIHRvIHRoZSBhbGxvY2F0b3IKICAgICAgICAgLy8gaW5zdGVh
ZCBvZiBwdXR0aW5nIGl0IG9uIHRoZSBzbG93IHBhdGguCkBAIC0xMjIyOCw3ICsxMjIwOSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3
QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKICAgICAgICAgCiAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoYWxsb2NhdGVPYmplY3QoCi0gICAgICAgICAgICBt
X291dC5jb25zdEludDMyKGFsbG9jYXRvci5vZmZzZXQoKSksIHN0cnVjdHVyZSwgbV9vdXQuaW50
UHRyWmVybywgbV9vdXQuaW50MzJaZXJvLCBzbG93UGF0aCkpOworICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBtX291
dC5pbnQzMlplcm8sIHNsb3dQYXRoKSk7CiAgICAgICAgIAogICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRv
ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMjgxZTRiNzQ1N2VlOTZmM2My
YjllNWIzYWNhOTJlYzU1NmIxNjMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFsbG9jYXRv
ci5oIgotCi0jaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVMYXlv
dXQuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXVuc2lnbmVkIEFsbG9jYXRvcjo6Y2VsbFNpemUo
SGVhcCYgaGVhcCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGVhcC50aHJlYWRMb2NhbENhY2hlTGF5
b3V0KCkuZGlyZWN0b3J5KG1fb2Zmc2V0KS0+Y2VsbFNpemUoKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRv
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDdjM2RhNDg1M2UxZmUyMDJiNjRlNGJmMWI1MzVjZjZiOGMyZmQy
MWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmgiCi0jaW5jbHVk
ZSA8Y2xpbWl0cz4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEdDRGVmZXJyYWxDb250ZXh0
OwotY2xhc3MgSGVhcDsKLWNsYXNzIFZNOwotCi1jbGFzcyBBbGxvY2F0b3IgewotcHVibGljOgot
ICAgIEFsbG9jYXRvcigpIHsgfQotICAgIAotICAgIGV4cGxpY2l0IEFsbG9jYXRvcih1bnNpZ25l
ZCBvZmZzZXQpCi0gICAgICAgIDogbV9vZmZzZXQob2Zmc2V0KQotICAgIHsKLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCogYWxsb2NhdGUoVk0mLCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25G
YWlsdXJlTW9kZSkgY29uc3Q7Ci0gICAgCi0gICAgLy8gVGhpcyB2ZXJzaW9uIGNhbGxzIEZhaWx1
cmVGdW5jIGlmIHdlIGhhdmUgYSBudWxsIGFsbG9jYXRvciBvciBpZiB0aGUgVExDIGhhc24ndCBi
ZWVuIHJlc2l6ZWQKLSAgICAvLyB0byBpbmNsdWRlIHRoaXMgYWxsb2NhdG9yLgotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZhaWx1cmVGdW5jPgotICAgIHZvaWQqIHRyeUFsbG9jYXRlKFZNJiwgR0NE
ZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUsIGNvbnN0IEZhaWx1cmVGdW5j
JikgY29uc3Q7Ci0gICAgCi0gICAgdW5zaWduZWQgY2VsbFNpemUoSGVhcCYpIGNvbnN0OwotICAg
IAotICAgIHVuc2lnbmVkIG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAg
Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFsbG9jYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuIG1fb2Zmc2V0ID09IG90aGVyLm9mZnNldCgpOyB9Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEFsbG9jYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9
Ci0gICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzICE9IEFs
bG9jYXRvcigpOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIHVuc2lnbmVkIG1fb2Zmc2V0IHsgVUlO
VF9NQVggfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0b3JJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9BbGxvY2F0b3JJbmxpbmVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDVmMGM3M2VhYzNjNDk3ODMwNmEyYzYwMmZkNWM0YjVlYzE2OWFjZTAuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQWxsb2NhdG9ySW5saW5lcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIkFsbG9jYXRvci5oIgotI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGUu
aCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWlubGluZSB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRl
KFZNJiB2bSwgR0NEZWZlcnJhbENvbnRleHQqIGNvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9k
ZSBtb2RlKSBjb25zdAotewotICAgIHJldHVybiBUaHJlYWRMb2NhbENhY2hlOjphbGxvY2F0b3Io
dm0sIG1fb2Zmc2V0KS5hbGxvY2F0ZShjb250ZXh0LCBtb2RlKTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgRmFpbHVyZUZ1bmM+Ci12b2lkKiBBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKFZNJiB2bSwg
R0NEZWZlcnJhbENvbnRleHQqIGNvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBtb2RlLCBj
b25zdCBGYWlsdXJlRnVuYyYgZmFpbHVyZUZ1bmMpIGNvbnN0Ci17Ci0gICAgdm9pZCogcmVzdWx0
OwotICAgIFRocmVhZExvY2FsQ2FjaGU6OnRyeUdldEFsbG9jYXRvcigKLSAgICAgICAgdm0sIG1f
b2Zmc2V0LAotICAgICAgICBbJl0gKExvY2FsQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKLSAgICAg
ICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci5hbGxvY2F0ZShjb250ZXh0LCBtb2RlKTsKLSAgICAg
ICAgfSwKLSAgICAgICAgWyZdICgpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGZhaWx1cmVGdW5j
KCk7Ci0gICAgICAgIH0pOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IEpTQwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVj
dG9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHAK
aW5kZXggNmNkYmMwMWMyMjU5MmFlMWU4ZjU0ZjI0MDI4ODJmOGI5NjYwMWFkMy4uODExODQ2ODQx
NzVlNmZiMTU2MDlkODA3MTRmMmRlZWFhOWNmYTdlNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5LmgiCiAKKyNpbmNsdWRlICJBbGxv
Y2F0aW5nU2NvcGUuaCIKICNpbmNsdWRlICJCbG9ja0RpcmVjdG9yeUlubGluZXMuaCIKICNpbmNs
dWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJIZWFwLmgiCkBAIC0zOCwxMSAr
MzksMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCB0cmFk
ZURlc3RydWN0b3JCbG9ja3MgPSB0cnVlOworCiBCbG9ja0RpcmVjdG9yeTo6QmxvY2tEaXJlY3Rv
cnkoSGVhcCogaGVhcCwgc2l6ZV90IGNlbGxTaXplKQotICAgIDogbV9jZWxsU2l6ZShzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oY2VsbFNpemUpKQorICAgIDogbV9mcmVlTGlzdChjZWxsU2l6ZSkKKyAg
ICAsIG1fY3VycmVudEJsb2NrKDApCisgICAgLCBtX2xhc3RBY3RpdmVCbG9jaygwKQorICAgICwg
bV9jZWxsU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2VsbFNpemUpKQogICAgICwgbV9oZWFw
KGhlYXApCiB7Ci0gICAgaGVhcC0+dGhyZWFkTG9jYWxDYWNoZUxheW91dCgpLmFsbG9jYXRlT2Zm
c2V0KHRoaXMpOwogfQogCiB2b2lkIEJsb2NrRGlyZWN0b3J5OjpzZXRTdWJzcGFjZShTdWJzcGFj
ZSogc3Vic3BhY2UpCkBAIC03NiwxNCArODEsMTQzIEBAIE1hcmtlZEJsb2NrOjpIYW5kbGUqIEJs
b2NrRGlyZWN0b3J5OjpmaW5kRW1wdHlCbG9ja1RvU3RlYWwoKQogICAgIHJldHVybiBtX2Jsb2Nr
c1ttX2VtcHR5Q3Vyc29yXTsKIH0KIAotTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rv
cnk6OmZpbmRCbG9ja0ZvckFsbG9jYXRpb24oKQordm9pZCBCbG9ja0RpcmVjdG9yeTo6ZGlkQ29u
c3VtZUZyZWVMaXN0KCkKK3sKKyAgICBpZiAobV9jdXJyZW50QmxvY2spCisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5kaWRDb25zdW1lRnJlZUxpc3QoKTsKKyAgICAKKyAgICBtX2ZyZWVMaXN0LmNs
ZWFyKCk7CisgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOworfQorCit2b2lkKiBCbG9ja0Rp
cmVjdG9yeTo6dHJ5QWxsb2NhdGVXaXRob3V0Q29sbGVjdGluZygpCiB7Ci0gICAgbV9hbGxvY2F0
aW9uQ3Vyc29yID0gKG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0eSB8IG1fZW1wdHkpLmZpbmRCaXQo
bV9hbGxvY2F0aW9uQ3Vyc29yLCB0cnVlKTsKLSAgICBpZiAobV9hbGxvY2F0aW9uQ3Vyc29yID49
IG1fYmxvY2tzLnNpemUoKSkKKyAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29w
ZShmYWxzZSk7CisgICAgCisgICAgQVNTRVJUKCFtX2N1cnJlbnRCbG9jayk7CisgICAgQVNTRVJU
KG1fZnJlZUxpc3QuYWxsb2NhdGlvbldpbGxGYWlsKCkpOworICAgIAorICAgIGZvciAoOzspIHsK
KyAgICAgICAgbV9hbGxvY2F0aW9uQ3Vyc29yID0gKG1fY2FuQWxsb2NhdGVCdXROb3RFbXB0eSB8
IG1fZW1wdHkpLmZpbmRCaXQobV9hbGxvY2F0aW9uQ3Vyc29yLCB0cnVlKTsKKyAgICAgICAgaWYg
KG1fYWxsb2NhdGlvbkN1cnNvciA+PSBtX2Jsb2Nrcy5zaXplKCkpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgCisgICAgICAgIHNldElzQ2FuQWxsb2NhdGVCdXROb3RFbXB0eShOb0xvY2tp
bmdOZWNlc3NhcnksIG1fYWxsb2NhdGlvbkN1cnNvciwgZmFsc2UpOworCisgICAgICAgIGlmICh2
b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUluKG1fYmxvY2tzW21fYWxsb2NhdGlvbkN1cnNvcl0p
KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgaWYgKE9wdGlv
bnM6OnN0ZWFsRW1wdHlCbG9ja3NGcm9tT3RoZXJBbGxvY2F0b3JzKCkKKyAgICAgICAgJiYgKHRy
YWRlRGVzdHJ1Y3RvckJsb2NrcyB8fCAhbmVlZHNEZXN0cnVjdGlvbigpKSkgeworICAgICAgICBp
ZiAoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX3N1YnNwYWNlLT5maW5kRW1wdHlCbG9j
a1RvU3RlYWwoKSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYmxvY2stPmFsaWduZWRN
ZW1vcnlBbGxvY2F0b3IoKSA9PSBtX3N1YnNwYWNlLT5hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBibG9jay0+c3dlZXAobnVsbHB0cik7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIEl0J3MgZ29vZCB0aGF0IHRoaXMgY2xlYXJzIGNhbkFs
bG9jYXRlQnV0Tm90RW1wdHkgYXMgd2VsbCBhcyBhbGwgb3RoZXIgYml0cywKKyAgICAgICAgICAg
IC8vIGJlY2F1c2UgdGhlcmUgaXMgYSByZW1vdGUgY2hhbmNlIHRoYXQgYSBibG9jayBtYXkgaGF2
ZSBib3RoIGNhbkFsbG9jYXRlQnV0Tm90RW1wdHkKKyAgICAgICAgICAgIC8vIGFuZCBlbXB0eSBz
ZXQgYXQgdGhlIHNhbWUgdGltZS4KKyAgICAgICAgICAgIGJsb2NrLT5yZW1vdmVGcm9tRGlyZWN0
b3J5KCk7CisgICAgICAgICAgICBhZGRCbG9jayhibG9jayk7CisgICAgICAgICAgICByZXR1cm4g
YWxsb2NhdGVJbihibG9jayk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK3ZvaWQqIEJsb2NrRGlyZWN0b3J5OjphbGxvY2F0ZUluKE1hcmtlZEJsb2Nr
OjpIYW5kbGUqIGJsb2NrKQoreworICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlSW4oYmxv
Y2spOworICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCogQmxvY2tEaXJlY3Rvcnk6OnRyeUFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRs
ZSogYmxvY2spCit7CisgICAgQVNTRVJUKGJsb2NrKTsKKyAgICBBU1NFUlQoIWJsb2NrLT5pc0Zy
ZWVMaXN0ZWQoKSk7CisgICAgCisgICAgYmxvY2stPnN3ZWVwKCZtX2ZyZWVMaXN0KTsKKyAgICAK
KyAgICAvLyBJdCdzIHBvc3NpYmxlIHRvIHN0dW1ibGUgb24gYSBjb21wbGV0ZWx5IGZ1bGwgYmxv
Y2suIE1hcmtpbmcgdHJpZXMgdG8gcmV0aXJlIHRoZXNlLCBidXQKKyAgICAvLyB0aGF0IGFsZ29y
aXRobSBpcyByYWN5IGFuZCBtYXkgZm9yZ2V0IHRvIGRvIGl0IHNvbWV0aW1lcy4KKyAgICBpZiAo
bV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSkgeworICAgICAgICBBU1NFUlQoYmxvY2st
PmlzRnJlZUxpc3RlZCgpKTsKKyAgICAgICAgYmxvY2stPnVuc3dlZXBXaXRoTm9OZXdseUFsbG9j
YXRlZCgpOworICAgICAgICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7CisgICAgICAg
IEFTU0VSVCghaXNFbXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIGJsb2NrKSk7CisgICAgICAgIEFT
U0VSVCghaXNDYW5BbGxvY2F0ZUJ1dE5vdEVtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgYmxvY2sp
KTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIG1fY3VycmVudEJs
b2NrID0gYmxvY2s7CisgICAgCisgICAgdm9pZCogcmVzdWx0ID0gbV9mcmVlTGlzdC5hbGxvY2F0
ZSgKKyAgICAgICAgW10gKCkgLT4gSGVhcENlbGwqIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
fSk7CisgICAgc2V0SXNFZGVuKE5vTG9ja2luZ05lY2Vzc2FyeSwgbV9jdXJyZW50QmxvY2ssIHRy
dWUpOworICAgIG1hcmtlZFNwYWNlKCkuZGlkQWxsb2NhdGVJbkJsb2NrKG1fY3VycmVudEJsb2Nr
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgQmxvY2tEaXJl
Y3Rvcnk6OmRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVy
cmFsQ29udGV4dCkKK3sKKyAgICBpZiAoIU9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdD
cygpKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGF0aWMgdW5zaWduZWQgYWxsb2NhdGlvbkNv
dW50ID0gMDsKKyAgICBpZiAoIWFsbG9jYXRpb25Db3VudCkgeworICAgICAgICBpZiAoIW1faGVh
cC0+aXNEZWZlcnJlZCgpKSB7CisgICAgICAgICAgICBpZiAoZGVmZXJyYWxDb250ZXh0KQorICAg
ICAgICAgICAgICAgIGRlZmVycmFsQ29udGV4dC0+bV9zaG91bGRHQyA9IHRydWU7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9oZWFwLT5jb2xsZWN0Tm93KFN5bmMsIENvbGxl
Y3Rpb25TY29wZTo6RnVsbCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCsrYWxsb2NhdGlv
bkNvdW50ID49IE9wdGlvbnM6OnNsb3dQYXRoQWxsb2NzQmV0d2VlbkdDcygpKQorICAgICAgICBh
bGxvY2F0aW9uQ291bnQgPSAwOworfQorCit2b2lkKiBCbG9ja0RpcmVjdG9yeTo6YWxsb2NhdGVT
bG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGUgZmFpbHVyZU1vZGUpCit7CisgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1w
bGVyU2NvcGUoZmFsc2UpOworICAgIEFTU0VSVChtX2hlYXAtPnZtKCktPmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdBUElMb2NrKCkpOworICAgIGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoZGVmZXJy
YWxDb250ZXh0KTsKKworICAgIEFTU0VSVCghbWFya2VkU3BhY2UoKS5pc0l0ZXJhdGluZygpKTsK
KyAgICBtX2hlYXAtPmRpZEFsbG9jYXRlKG1fZnJlZUxpc3Qub3JpZ2luYWxTaXplKCkpOworICAg
IAorICAgIGRpZENvbnN1bWVGcmVlTGlzdCgpOworICAgIAorICAgIEFsbG9jYXRpbmdTY29wZSBo
ZWxwaW5nSGVhcCgqbV9oZWFwKTsKKworICAgIG1faGVhcC0+Y29sbGVjdElmTmVjZXNzYXJ5T3JE
ZWZlcihkZWZlcnJhbENvbnRleHQpOwogICAgIAotICAgIHNldElzQ2FuQWxsb2NhdGVCdXROb3RF
bXB0eShOb0xvY2tpbmdOZWNlc3NhcnksIG1fYWxsb2NhdGlvbkN1cnNvciwgZmFsc2UpOwotICAg
IHJldHVybiBtX2Jsb2Nrc1ttX2FsbG9jYXRpb25DdXJzb3JdOworICAgIC8vIEdvb2Z5IGNvcm5l
ciBjYXNlOiB0aGUgR0MgY2FsbGVkIGEgY2FsbGJhY2sgYW5kIG5vdyB0aGlzIGRpcmVjdG9yeSBo
YXMgYSBjdXJyZW50QmxvY2suIFRoaXMgb25seQorICAgIC8vIGhhcHBlbnMgd2hlbiBydW5uaW5n
IFdlYktpdCB0ZXN0cywgd2hpY2ggaW5qZWN0IGEgY2FsbGJhY2sgaW50byB0aGUgR0MncyBmaW5h
bGl6YXRpb24uCisgICAgaWYgKFVOTElLRUxZKG1fY3VycmVudEJsb2NrKSkKKyAgICAgICAgcmV0
dXJuIGFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworICAgIAorICAgIHZv
aWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKTsKKyAgICAKKyAgICBp
ZiAoTElLRUxZKHJlc3VsdCAhPSAwKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAKKyAg
ICBNYXJrZWRCbG9jazo6SGFuZGxlKiBibG9jayA9IHRyeUFsbG9jYXRlQmxvY2soKTsKKyAgICBp
ZiAoIWJsb2NrKSB7CisgICAgICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGU6OkFzc2VydCkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBh
ZGRCbG9jayhibG9jayk7CisgICAgcmVzdWx0ID0gYWxsb2NhdGVJbihibG9jayk7CisgICAgQVNT
RVJUKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIHNpemVfdCBibG9j
a0hlYWRlclNpemUoKQpAQCAtMTc5LDE5ICszMTMsMjQgQEAgdm9pZCBCbG9ja0RpcmVjdG9yeTo6
c3RvcEFsbG9jYXRpbmcoKQogewogICAgIGlmIChmYWxzZSkKICAgICAgICAgZGF0YUxvZyhSYXdQ
b2ludGVyKHRoaXMpLCAiOiBCbG9ja0RpcmVjdG9yeTo6c3RvcEFsbG9jYXRpbmchXG4iKTsKLSAg
ICBtX2xvY2FsQWxsb2NhdG9ycy5mb3JFYWNoKAotICAgICAgICBbJl0gKExvY2FsQWxsb2NhdG9y
KiBhbGxvY2F0b3IpIHsKLSAgICAgICAgICAgIGFsbG9jYXRvci0+c3RvcEFsbG9jYXRpbmcoKTsK
LSAgICAgICAgfSk7CisgICAgQVNTRVJUKCFtX2xhc3RBY3RpdmVCbG9jayk7CisgICAgaWYgKCFt
X2N1cnJlbnRCbG9jaykgeworICAgICAgICBBU1NFUlQobV9mcmVlTGlzdC5hbGxvY2F0aW9uV2ls
bEZhaWwoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jdXJyZW50Qmxv
Y2stPnN0b3BBbGxvY2F0aW5nKG1fZnJlZUxpc3QpOworICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0g
bV9jdXJyZW50QmxvY2s7CisgICAgbV9jdXJyZW50QmxvY2sgPSAwOworICAgIG1fZnJlZUxpc3Qu
Y2xlYXIoKTsKIH0KIAogdm9pZCBCbG9ja0RpcmVjdG9yeTo6cHJlcGFyZUZvckFsbG9jYXRpb24o
KQogewotICAgIG1fbG9jYWxBbGxvY2F0b3JzLmZvckVhY2goCi0gICAgICAgIFsmXSAoTG9jYWxB
bGxvY2F0b3IqIGFsbG9jYXRvcikgewotICAgICAgICAgICAgYWxsb2NhdG9yLT5wcmVwYXJlRm9y
QWxsb2NhdGlvbigpOwotICAgICAgICB9KTsKLSAgICAKKyAgICBtX2xhc3RBY3RpdmVCbG9jayA9
IG51bGxwdHI7CisgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOworICAgIG1fZnJlZUxpc3Qu
Y2xlYXIoKTsKKwogICAgIG1fYWxsb2NhdGlvbkN1cnNvciA9IDA7CiAgICAgbV9lbXB0eUN1cnNv
ciA9IDA7CiAgICAgbV91bnN3ZXB0Q3Vyc29yID0gMDsKQEAgLTIwNSwyMSArMzQ0LDYgQEAgdm9p
ZCBCbG9ja0RpcmVjdG9yeTo6cHJlcGFyZUZvckFsbG9jYXRpb24oKQogICAgIH0KIH0KIAotdm9p
ZCBCbG9ja0RpcmVjdG9yeTo6c3RvcEFsbG9jYXRpbmdGb3JHb29kKCkKLXsKLSAgICBpZiAoZmFs
c2UpCi0gICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogQmxvY2tEaXJlY3Rvcnk6
OnN0b3BBbGxvY2F0aW5nRm9yR29vZCFcbiIpOwotICAgIAotICAgIG1fbG9jYWxBbGxvY2F0b3Jz
LmZvckVhY2goCi0gICAgICAgIFsmXSAoTG9jYWxBbGxvY2F0b3IqIGFsbG9jYXRvcikgewotICAg
ICAgICAgICAgYWxsb2NhdG9yLT5zdG9wQWxsb2NhdGluZ0Zvckdvb2QoKTsKLSAgICAgICAgfSk7
Ci0KLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jYWxBbGxvY2F0b3JzTG9jayk7Ci0g
ICAgd2hpbGUgKCFtX2xvY2FsQWxsb2NhdG9ycy5pc0VtcHR5KCkpCi0gICAgICAgIG1fbG9jYWxB
bGxvY2F0b3JzLmJlZ2luKCktPnJlbW92ZSgpOwotfQotCiB2b2lkIEJsb2NrRGlyZWN0b3J5Ojps
YXN0Q2hhbmNlVG9GaW5hbGl6ZSgpCiB7CiAgICAgZm9yRWFjaEJsb2NrKApAQCAtMjMwLDEwICsz
NTQsMTIgQEAgdm9pZCBCbG9ja0RpcmVjdG9yeTo6bGFzdENoYW5jZVRvRmluYWxpemUoKQogCiB2
b2lkIEJsb2NrRGlyZWN0b3J5OjpyZXN1bWVBbGxvY2F0aW5nKCkKIHsKLSAgICBtX2xvY2FsQWxs
b2NhdG9ycy5mb3JFYWNoKAotICAgICAgICBbJl0gKExvY2FsQWxsb2NhdG9yKiBhbGxvY2F0b3Ip
IHsKLSAgICAgICAgICAgIGFsbG9jYXRvci0+cmVzdW1lQWxsb2NhdGluZygpOwotICAgICAgICB9
KTsKKyAgICBpZiAoIW1fbGFzdEFjdGl2ZUJsb2NrKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2xhc3RBY3RpdmVCbG9jay0+cmVzdW1lQWxsb2NhdGluZyhtX2ZyZWVMaXN0KTsKKyAgICBtX2N1
cnJlbnRCbG9jayA9IG1fbGFzdEFjdGl2ZUJsb2NrOworICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0g
bnVsbHB0cjsKIH0KIAogdm9pZCBCbG9ja0RpcmVjdG9yeTo6YmVnaW5NYXJraW5nRm9yRnVsbENv
bGxlY3Rpb24oKQpAQCAtMjUzLDcgKzM3OSw3IEBAIHZvaWQgQmxvY2tEaXJlY3Rvcnk6OmVuZE1h
cmtpbmcoKQogICAgIC8vIGtub3cgd2hhdCBraW5kIG9mIGNvbGxlY3Rpb24gaXQgaXMuIFRoYXQg
a25vd2xlZGdlIGlzIGFscmVhZHkgZW5jb2RlZCBpbiB0aGUgbV9tYXJraW5nWFlaCiAgICAgLy8g
dmVjdG9ycy4KICAgICAKLSAgICBpZiAoIU9wdGlvbnM6OnRyYWRlRGVzdHJ1Y3RvckJsb2Nrcygp
ICYmIG5lZWRzRGVzdHJ1Y3Rpb24oKSkgeworICAgIGlmICghdHJhZGVEZXN0cnVjdG9yQmxvY2tz
ICYmIG5lZWRzRGVzdHJ1Y3Rpb24oKSkgewogICAgICAgICBBU1NFUlQobV9lbXB0eS5pc0VtcHR5
KCkpOwogICAgICAgICBtX2NhbkFsbG9jYXRlQnV0Tm90RW1wdHkgPSBtX2xpdmUgJiB+bV9tYXJr
aW5nUmV0aXJlZDsKICAgICB9IGVsc2UgewpAQCAtMzg2LDE1ICs1MTIsNSBAQCBNYXJrZWRTcGFj
ZSYgQmxvY2tEaXJlY3Rvcnk6Om1hcmtlZFNwYWNlKCkgY29uc3QKICAgICByZXR1cm4gbV9zdWJz
cGFjZS0+c3BhY2UoKTsKIH0KIAotYm9vbCBCbG9ja0RpcmVjdG9yeTo6aXNGcmVlTGlzdGVkQ2Vs
bChjb25zdCB2b2lkKiB0YXJnZXQpCi17Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBt
X2xvY2FsQWxsb2NhdG9ycy5mb3JFYWNoKAotICAgICAgICBbJl0gKExvY2FsQWxsb2NhdG9yKiBh
bGxvY2F0b3IpIHsKLSAgICAgICAgICAgIHJlc3VsdCB8PSBhbGxvY2F0b3ItPmlzRnJlZUxpc3Rl
ZENlbGwodGFyZ2V0KTsKLSAgICAgICAgfSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0Jsb2NrRGlyZWN0b3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVj
dG9yeS5oCmluZGV4IDYzNjE2NGY4ZjhjYzU0ODc1MTNmM2YyMGMwNThkOTdjZGM2YzdmZjMuLmNk
MGQyMmJiNDRkNTU1NmFlY2ZiZDlhZDI3MzhmYjVhNmQwNDg2MmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaApAQCAtMjYsMTAgKzI2LDggQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiQWxsb2NhdGlvbkZhaWx1cmVNb2RlLmgiCi0jaW5jbHVkZSAi
QWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiQ2VsbEF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJGcmVl
TGlzdC5oIgotI2luY2x1ZGUgIkxvY2FsQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxv
Y2suaCIKICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVj
dG9yLmg+CkBAIC00Myw3ICs0MSw2IEBAIGNsYXNzIEhlYXA7CiBjbGFzcyBJc29DZWxsU2V0Owog
Y2xhc3MgTWFya2VkU3BhY2U7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Ci1jbGFzcyBU
aHJlYWRMb2NhbENhY2hlTGF5b3V0OwogCiAjZGVmaW5lIEZPUl9FQUNIX0JMT0NLX0RJUkVDVE9S
WV9CSVQobWFjcm8pIFwKICAgICBtYWNybyhsaXZlLCBMaXZlKSAvKiBUaGUgc2V0IG9mIGJsb2Nr
IGluZGljZXMgdGhhdCBoYXZlIGFjdHVhbCBibG9ja3MuICovXApAQCAtNzksMTIgKzc2LDE0IEBA
IGNsYXNzIEJsb2NrRGlyZWN0b3J5IHsKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwogCiBwdWJsaWM6CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZyZWVMaXN0
KCk7CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNlbGxTaXplKCk7CisKICAgICBCbG9j
a0RpcmVjdG9yeShIZWFwKiwgc2l6ZV90IGNlbGxTaXplKTsKICAgICB2b2lkIHNldFN1YnNwYWNl
KFN1YnNwYWNlKik7CiAgICAgdm9pZCBsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogICAgIHZvaWQg
cHJlcGFyZUZvckFsbG9jYXRpb24oKTsKICAgICB2b2lkIHN0b3BBbGxvY2F0aW5nKCk7Ci0gICAg
dm9pZCBzdG9wQWxsb2NhdGluZ0Zvckdvb2QoKTsKICAgICB2b2lkIHJlc3VtZUFsbG9jYXRpbmco
KTsKICAgICB2b2lkIGJlZ2luTWFya2luZ0ZvckZ1bGxDb2xsZWN0aW9uKCk7CiAgICAgdm9pZCBl
bmRNYXJraW5nKCk7CkBAIC05OCw5ICs5NywxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBuZWVkc0Rl
c3RydWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmRlc3RydWN0aW9uID09IE5l
ZWRzRGVzdHJ1Y3Rpb247IH0KICAgICBEZXN0cnVjdGlvbk1vZGUgZGVzdHJ1Y3Rpb24oKSBjb25z
dCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZGVzdHJ1Y3Rpb247IH0KICAgICBIZWFwQ2VsbDo6S2lu
ZCBjZWxsS2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5jZWxsS2luZDsgfQorICAg
IHZvaWQqIGFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
KTsKICAgICBIZWFwKiBoZWFwKCkgeyByZXR1cm4gbV9oZWFwOyB9CiAKLSAgICBib29sIGlzRnJl
ZUxpc3RlZENlbGwoY29uc3Qgdm9pZCogdGFyZ2V0KTsKKyAgICBib29sIGlzRnJlZUxpc3RlZENl
bGwoY29uc3Qgdm9pZCogdGFyZ2V0KSBjb25zdDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+IHZvaWQgZm9yRWFjaEJsb2NrKGNvbnN0IEZ1bmN0b3ImKTsKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hOb3RFbXB0eUJsb2NrKGNvbnN0IEZ1bmN0b3Im
KTsKQEAgLTE1NywyMCArMTU3LDI0IEBAIHB1YmxpYzoKICAgICBTdWJzcGFjZSogc3Vic3BhY2Uo
KSBjb25zdCB7IHJldHVybiBtX3N1YnNwYWNlOyB9CiAgICAgTWFya2VkU3BhY2UmIG1hcmtlZFNw
YWNlKCkgY29uc3Q7CiAgICAgCi0gICAgQWxsb2NhdG9yIGFsbG9jYXRvcigpIGNvbnN0IHsgcmV0
dXJuIEFsbG9jYXRvcihtX3RsY09mZnNldCk7IH0KKyAgICBjb25zdCBGcmVlTGlzdCYgZnJlZUxp
c3QoKSBjb25zdCB7IHJldHVybiBtX2ZyZWVMaXN0OyB9CiAgICAgCiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wQml0cyhQcmludFN0cmVhbSYgPSBXVEY6
OmRhdGFGaWxlKCkpOwogICAgIAogcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgTG9jYWxBbGxv
Y2F0b3I7CiAgICAgZnJpZW5kIGNsYXNzIElzb0NlbGxTZXQ7CiAgICAgZnJpZW5kIGNsYXNzIE1h
cmtlZEJsb2NrOwotICAgIGZyaWVuZCBjbGFzcyBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OwotICAg
IAotICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGZpbmRCbG9ja0ZvckFsbG9jYXRpb24oKTsKICAg
ICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlKEdDRGVmZXJy
YWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKTsKKyAgICB2b2lk
IGRpZENvbnN1bWVGcmVlTGlzdCgpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlV2l0aG91dENvbGxl
Y3RpbmcoKTsKICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiB0cnlBbGxvY2F0ZUJsb2NrKCk7Cisg
ICAgdm9pZCogdHJ5QWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7CisgICAgdm9pZCog
YWxsb2NhdGVJbihNYXJrZWRCbG9jazo6SGFuZGxlKik7CisgICAgQUxXQVlTX0lOTElORSB2b2lk
IGRvVGVzdENvbGxlY3Rpb25zSWZOZWVkZWQoR0NEZWZlcnJhbENvbnRleHQqKTsKKyAgICAKKyAg
ICBGcmVlTGlzdCBtX2ZyZWVMaXN0OwogICAgIAogICAgIFZlY3RvcjxNYXJrZWRCbG9jazo6SGFu
ZGxlKj4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2ZyZWVCbG9ja0luZGljZXM7
CkBAIC0xODksNiArMTkzLDEwIEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fZW1wdHlDdXJzb3Ig
eyAwIH07IC8vIFBvaW50cyB0byB0aGUgbmV4dCBibG9jayB0aGF0IGlzIGEgY2FuZGlkYXRlIGZv
ciBlbXB0eSBhbGxvY2F0aW9uIChhbGxvY2F0aW5nIGluIGVtcHR5IGJsb2NrcykuCiAgICAgc2l6
ZV90IG1fdW5zd2VwdEN1cnNvciB7IDAgfTsgLy8gUG9pbnRzIHRvIHRoZSBuZXh0IGJsb2NrIHRo
YXQgaXMgYSBjYW5kaWRhdGUgZm9yIGluY3JlbWVudGFsIHN3ZWVwaW5nLgogICAgIAorICAgIE1h
cmtlZEJsb2NrOjpIYW5kbGUqIG1fY3VycmVudEJsb2NrOworICAgIE1hcmtlZEJsb2NrOjpIYW5k
bGUqIG1fbGFzdEFjdGl2ZUJsb2NrOworCisgICAgTG9jayBtX2xvY2s7CiAgICAgdW5zaWduZWQg
bV9jZWxsU2l6ZTsKICAgICBDZWxsQXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CiAgICAgLy8gRklY
TUU6IEFsbCBvZiB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgcmVmZXJlbmNlcy4KQEAgLTE5OCwx
MCArMjA2LDE2IEBAIHByaXZhdGU6CiAgICAgQmxvY2tEaXJlY3RvcnkqIG1fbmV4dERpcmVjdG9y
eSB7IG51bGxwdHIgfTsKICAgICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0RGlyZWN0b3J5SW5TdWJz
cGFjZSB7IG51bGxwdHIgfTsKICAgICBCbG9ja0RpcmVjdG9yeSogbV9uZXh0RGlyZWN0b3J5SW5B
bGlnbmVkTWVtb3J5QWxsb2NhdG9yIHsgbnVsbHB0ciB9OwotICAgIAotICAgIExvY2sgbV9sb2Nh
bEFsbG9jYXRvcnNMb2NrOwotICAgIHNpemVfdCBtX3RsY09mZnNldDsKLSAgICBTZW50aW5lbExp
bmtlZExpc3Q8TG9jYWxBbGxvY2F0b3IsIEJhc2ljUmF3U2VudGluZWxOb2RlPExvY2FsQWxsb2Nh
dG9yPj4gbV9sb2NhbEFsbG9jYXRvcnM7CiB9OwogCitpbmxpbmUgcHRyZGlmZl90IEJsb2NrRGly
ZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkKK3sKKyAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEJsb2NrRGlyZWN0b3J5LCBtX2ZyZWVMaXN0KTsKK30KKworaW5saW5lIHB0cmRpZmZfdCBCbG9j
a0RpcmVjdG9yeTo6b2Zmc2V0T2ZDZWxsU2l6ZSgpCit7CisgICAgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihCbG9ja0RpcmVjdG9yeSwgbV9jZWxsU2l6ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnlJ
bmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeUlubGlu
ZXMuaAppbmRleCA0MWNiYjQ5YzI2NDk1NjZkZWNkZjc4MjM4M2JlYzg4Y2EyMmJhNTc1Li41MDAx
YTQyZjJhYjI4ODVlODQyYzJmNjk2MGJmYzc2NjQwNjUzMGRlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeUlubGluZXMuaApAQCAtMzEsNiArMzEs
MjAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2lubGluZSBib29sIEJsb2NrRGlyZWN0b3J5Ojpp
c0ZyZWVMaXN0ZWRDZWxsKGNvbnN0IHZvaWQqIHRhcmdldCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9mcmVlTGlzdC5jb250YWlucyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpKTsKK30K
KworQUxXQVlTX0lOTElORSB2b2lkKiBCbG9ja0RpcmVjdG9yeTo6YWxsb2NhdGUoR0NEZWZlcnJh
bENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVN
b2RlKQoreworICAgIHJldHVybiBtX2ZyZWVMaXN0LmFsbG9jYXRlKAorICAgICAgICBbJl0gKCkg
LT4gSGVhcENlbGwqIHsKKyAgICAgICAgICAgIHNhbml0aXplU3RhY2tGb3JWTShoZWFwKCktPnZt
KCkpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhlYXBDZWxsKj4oYWxsb2NhdGVT
bG93Q2FzZShkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKSk7CisgICAgICAgIH0pOworfQor
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgQmxvY2tEaXJlY3Rvcnk6
OmZvckVhY2hCbG9jayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewogICAgIG1fbGl2ZS5mb3JF
YWNoU2V0Qml0KApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxl
dGVTdWJzcGFjZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNw
YWNlLmNwcAppbmRleCBiYjA0YzU0ZjE0MDk5ZTBjZDc0YTc5MzNhNjJmOGM3ZjhiMmEyNDM2Li5i
MzVhODNiM2RmNjNmMzY4NWJlNDkwZTJhODU2ZjQ5Mjc4YmFjNzIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0ZVN1YnNwYWNlLmNwcApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxNSArMjYsMTEgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdWJzcGFjZS5oIgogCi0jaW5jbHVkZSAi
QWxpZ25lZE1lbW9yeUFsbG9jYXRvci5oIgotI2luY2x1ZGUgIkFsbG9jYXRvcklubGluZXMuaCIK
ICNpbmNsdWRlICJCbG9ja0RpcmVjdG9yeUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2Vk
QmxvY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUHJldmVudENvbGxlY3Rpb25TY29wZS5oIgogI2lu
Y2x1ZGUgIlN1YnNwYWNlSW5saW5lcy5oIgotI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJbmxp
bmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MiwzOCArMzgsNDAgQEAgQ29tcGxldGVT
dWJzcGFjZTo6Q29tcGxldGVTdWJzcGFjZShDU3RyaW5nIG5hbWUsIEhlYXAmIGhlYXAsIEhlYXBD
ZWxsVHlwZSogaGVhcEMKICAgICA6IFN1YnNwYWNlKG5hbWUsIGhlYXApCiB7CiAgICAgaW5pdGlh
bGl6ZShoZWFwQ2VsbFR5cGUsIGFsaWduZWRNZW1vcnlBbGxvY2F0b3IpOworICAgIGZvciAoc2l6
ZV90IGkgPSBNYXJrZWRTcGFjZTo6bnVtU2l6ZUNsYXNzZXM7IGktLTspCisgICAgICAgIG1fYWxs
b2NhdG9yRm9yU2l6ZVN0ZXBbaV0gPSBudWxscHRyOwogfQogCiBDb21wbGV0ZVN1YnNwYWNlOjp+
Q29tcGxldGVTdWJzcGFjZSgpCiB7CiB9CiAKLUFsbG9jYXRvciBDb21wbGV0ZVN1YnNwYWNlOjph
bGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUgbW9kZSkKK0Jsb2NrRGly
ZWN0b3J5KiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUsIEFsbG9j
YXRvckZvck1vZGUgbW9kZSkKIHsKICAgICByZXR1cm4gYWxsb2NhdG9yRm9yTm9uVmlydHVhbChz
aXplLCBtb2RlKTsKIH0KIAotdm9pZCogQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdGUoVk0mIHZt
LCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2Nh
dGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQordm9pZCogQ29tcGxldGVTdWJzcGFjZTo6YWxs
b2NhdGUoc2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFs
bG9jYXRpb25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKLSAgICByZXR1cm4gYWxsb2NhdGVO
b25WaXJ0dWFsKHZtLCBzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKTsKKyAgICBy
ZXR1cm4gYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1v
ZGUpOwogfQogCi12b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwoVk0m
IHZtLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQordm9pZCogQ29tcGxldGVTdWJzcGFjZTo6
YWxsb2NhdGVOb25WaXJ0dWFsKHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJy
YWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7Ci0gICAgQWxs
b2NhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxsb2NhdG9y
Rm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwotICAgIHJldHVybiBhbGxvY2F0b3IudHJ5QWxs
b2NhdGUoCi0gICAgICAgIHZtLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlLAotICAgICAg
ICBbJl0gKCkgewotICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlU2xvdyh2bSwgc2l6ZSwgZGVm
ZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7Ci0gICAgICAgIH0pOworICAgIHZvaWQgKnJlc3Vs
dDsKKyAgICBpZiAoQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvck5vblZp
cnR1YWwoc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpKQorICAgICAg
ICByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1v
ZGUpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gYWxsb2NhdGVTbG93KHNpemUsIGRlZmVy
cmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUFsbG9j
YXRvciBDb21wbGV0ZVN1YnNwYWNlOjphbGxvY2F0b3JGb3JTbG93KHNpemVfdCBzaXplKQorQmxv
Y2tEaXJlY3RvcnkqIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZvclNsb3coc2l6ZV90IHNp
emUpCiB7CiAgICAgc2l6ZV90IGluZGV4ID0gTWFya2VkU3BhY2U6OnNpemVDbGFzc1RvSW5kZXgo
c2l6ZSk7CiAgICAgc2l6ZV90IHNpemVDbGFzcyA9IE1hcmtlZFNwYWNlOjpzX3NpemVDbGFzc0Zv
clNpemVTdGVwW2luZGV4XTsKICAgICBpZiAoIXNpemVDbGFzcykKLSAgICAgICAgcmV0dXJuIEFs
bG9jYXRvcigpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICAvLyBUaGlzIGlz
IHdyaXR0ZW4gaW4gc3VjaCBhIHdheSB0aGF0IGl0J3MgT0sgZm9yIHRoZSBKSVQgdGhyZWFkcyB0
byBlbmQgdXAgaGVyZSBpZiB0aGV5IHdhbnQKICAgICAvLyB0byBnZW5lcmF0ZSBjb2RlIHRoYXQg
dXNlcyBzb21lIGFsbG9jYXRvciB0aGF0IGhhZG4ndCBiZWVuIHVzZWQgeWV0LiBOb3RlIHRoYXQg
YSBwb3NzaWJseS0KQEAgLTg0LDcgKzgyLDcgQEAgQWxsb2NhdG9yIENvbXBsZXRlU3Vic3BhY2U6
OmFsbG9jYXRvckZvclNsb3coc2l6ZV90IHNpemUpCiAgICAgLy8gdGhhdCBhbnkgImZvckVhY2hB
bGxvY2F0b3IiIHRyYXZlcnNhbHMgd2lsbCBvbmx5IHNlZSB0aGlzIGFsbG9jYXRvciBhZnRlciBp
dCdzIGluaXRpYWxpemVkCiAgICAgLy8gZW5vdWdoOiBpdCB3aWxsIGhhdmUgCiAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhtX3NwYWNlLmRpcmVjdG9yeUxvY2soKSk7Ci0gICAgaWYgKEFsbG9j
YXRvciBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW2luZGV4XSkKKyAgICBpZiAo
QmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IG1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbaW5kZXhd
KQogICAgICAgICByZXR1cm4gYWxsb2NhdG9yOwogCiAgICAgaWYgKGZhbHNlKQpAQCAtMTAwLDcg
Kzk4LDcgQEAgQWxsb2NhdG9yIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZvclNsb3coc2l6
ZV90IHNpemUpCiAgICAgICAgIGlmIChNYXJrZWRTcGFjZTo6c19zaXplQ2xhc3NGb3JTaXplU3Rl
cFtpbmRleF0gIT0gc2l6ZUNsYXNzKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgbV9h
bGxvY2F0b3JGb3JTaXplU3RlcFtpbmRleF0gPSBkaXJlY3RvcnktPmFsbG9jYXRvcigpOworICAg
ICAgICBtX2FsbG9jYXRvckZvclNpemVTdGVwW2luZGV4XSA9IGRpcmVjdG9yeTsKICAgICAgICAg
CiAgICAgICAgIGlmICghaW5kZXgtLSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA5LDIzICsx
MDcsMjMgQEAgQWxsb2NhdG9yIENvbXBsZXRlU3Vic3BhY2U6OmFsbG9jYXRvckZvclNsb3coc2l6
ZV90IHNpemUpCiAgICAgbV9hbGlnbmVkTWVtb3J5QWxsb2NhdG9yLT5yZWdpc3RlckRpcmVjdG9y
eShkaXJlY3RvcnkpOwogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgbV9maXJzdERp
cmVjdG9yeSA9IGRpcmVjdG9yeTsKLSAgICByZXR1cm4gZGlyZWN0b3J5LT5hbGxvY2F0b3IoKTsK
KyAgICByZXR1cm4gZGlyZWN0b3J5OwogfQogCi12b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjphbGxv
Y2F0ZVNsb3coVk0mIHZtLCBzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFs
Q29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZhaWx1cmVNb2RlKQordm9pZCogQ29tcGxl
dGVTdWJzcGFjZTo6YWxsb2NhdGVTbG93KHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCog
ZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUgZmFpbHVyZU1vZGUpCiB7Ci0g
ICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVTbG93KHZtLCBzaXplLCBkZWZlcnJhbENvbnRl
eHQpOworICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlU2xvdyhzaXplLCBkZWZlcnJhbENv
bnRleHQpOwogICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFz
c2VydCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi12b2lkKiBDb21wbGV0ZVN1YnNwYWNlOjp0cnlBbGxvY2F0ZVNsb3coVk0mIHZtLCBz
aXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkKK3ZvaWQqIENv
bXBsZXRlU3Vic3BhY2U6OnRyeUFsbG9jYXRlU2xvdyhzaXplX3Qgc2l6ZSwgR0NEZWZlcnJhbENv
bnRleHQqIGRlZmVycmFsQ29udGV4dCkKIHsKLSAgICBzYW5pdGl6ZVN0YWNrRm9yVk0oJnZtKTsK
KyAgICBzYW5pdGl6ZVN0YWNrRm9yVk0obV9zcGFjZS5oZWFwKCktPnZtKCkpOwogICAgIAotICAg
IGlmIChBbGxvY2F0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9yRm9yKHNpemUsIEFsbG9jYXRvckZv
ck1vZGU6OkVuc3VyZUFsbG9jYXRvcikpCi0gICAgICAgIHJldHVybiBhbGxvY2F0b3IuYWxsb2Nh
dGUodm0sIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxs
KTsKKyAgICBpZiAoQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IGFsbG9jYXRvckZvcihzaXpl
LCBBbGxvY2F0b3JGb3JNb2RlOjpFbnN1cmVBbGxvY2F0b3IpKQorICAgICAgICByZXR1cm4gYWxs
b2NhdG9yLT5hbGxvY2F0ZShkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6
UmV0dXJuTnVsbCk7CiAgICAgCiAgICAgaWYgKHNpemUgPD0gT3B0aW9uczo6bGFyZ2VBbGxvY2F0
aW9uQ3V0b2ZmKCkKICAgICAgICAgJiYgc2l6ZSA8PSBNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYp
IHsKQEAgLTEzNCwxNSArMTMyLDE1IEBAIHZvaWQqIENvbXBsZXRlU3Vic3BhY2U6OnRyeUFsbG9j
YXRlU2xvdyhWTSYgdm0sIHNpemVfdCBzaXplLCBHQ0RlZmVycmFsQ29udGV4dCoKICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgdm0uaGVhcC5j
b2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKGRlZmVycmFsQ29udGV4dCk7CisgICAgbV9zcGFjZS5o
ZWFwKCktPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKICAgICAK
ICAgICBzaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPE1hcmtlZFNwYWNlOjpzaXplU3Rl
cD4oc2l6ZSk7Ci0gICAgTGFyZ2VBbGxvY2F0aW9uKiBhbGxvY2F0aW9uID0gTGFyZ2VBbGxvY2F0
aW9uOjp0cnlDcmVhdGUodm0uaGVhcCwgc2l6ZSwgdGhpcyk7CisgICAgTGFyZ2VBbGxvY2F0aW9u
KiBhbGxvY2F0aW9uID0gTGFyZ2VBbGxvY2F0aW9uOjp0cnlDcmVhdGUoKm1fc3BhY2UubV9oZWFw
LCBzaXplLCB0aGlzKTsKICAgICBpZiAoIWFsbG9jYXRpb24pCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIAogICAgIG1fc3BhY2UubV9sYXJnZUFsbG9jYXRpb25zLmFwcGVuZChhbGxvY2F0
aW9uKTsKLSAgICB2bS5oZWFwLmRpZEFsbG9jYXRlKHNpemUpOworICAgIG1fc3BhY2UubV9oZWFw
LT5kaWRBbGxvY2F0ZShzaXplKTsKICAgICBtX3NwYWNlLm1fY2FwYWNpdHkgKz0gc2l6ZTsKICAg
ICAKICAgICBtX2xhcmdlQWxsb2NhdGlvbnMuYXBwZW5kKGFsbG9jYXRpb24pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29tcGxldGVTdWJzcGFjZS5oCmluZGV4IGUwYzMwZDRkOTZm
ZWNlMGFmMmRiYjNlZjQ1MTQ4ZTNjZTk3Mzg2NDYuLjQ3NWQ0ZmE3YjczOTg4YjkzYWY2ODM2Mjg2
MzllY2QwZDcyMzUyZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
bXBsZXRlU3Vic3BhY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db21wbGV0
ZVN1YnNwYWNlLmgKQEAgLTM5LDMxICszOSwzMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gRklY
TUU6IEN1cnJlbnRseSBzdWJzcGFjZXMgc3BlYWsgb2YgQmxvY2tEaXJlY3RvcmllcyBhcyAiYWxs
b2NhdG9ycyIsIGJ1dCB0aGF0J3MgdGVtcG9yYXJ5LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE1NTkKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yRm9y
KHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSkgb3ZlcnJpZGU7Ci0gICAgQWxsb2NhdG9yIGFsbG9j
YXRvckZvck5vblZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKTsKKyAgICBCbG9ja0Rp
cmVjdG9yeSogYWxsb2NhdG9yRm9yKHNpemVfdCwgQWxsb2NhdG9yRm9yTW9kZSkgb3ZlcnJpZGU7
CisgICAgQmxvY2tEaXJlY3RvcnkqIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90LCBBbGxv
Y2F0b3JGb3JNb2RlKTsKICAgICAKLSAgICB2b2lkKiBhbGxvY2F0ZShWTSYsIHNpemVfdCwgR0NE
ZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIG92ZXJyaWRlOwotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChWTSYsIHNpemVfdCwgR0NE
ZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpOworICAgIHZvaWQqIGFsbG9j
YXRlKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIG92
ZXJyaWRlOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQqIGFsbG9jYXRlTm9uVmlydHVhbChz
aXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKICAgICAK
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQWxsb2NhdG9yRm9yU2l6ZVN0ZXAoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29tcGxldGVTdWJzcGFjZSwgbV9hbGxvY2F0b3JGb3JTaXpl
U3RlcCk7IH0KICAgICAKLSAgICBBbGxvY2F0b3IqIGFsbG9jYXRvckZvclNpemVTdGVwKCkgeyBy
ZXR1cm4gJm1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBbMF07IH0KKyAgICBCbG9ja0RpcmVjdG9yeSoq
IGFsbG9jYXRvckZvclNpemVTdGVwKCkgeyByZXR1cm4gJm1fYWxsb2NhdG9yRm9yU2l6ZVN0ZXBb
MF07IH0KIAogcHJpdmF0ZToKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yRm9yU2xvdyhzaXplX3Qp
OworICAgIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3JGb3JTbG93KHNpemVfdCk7CiAgICAgCiAg
ICAgLy8gVGhlc2Ugc2xvdyBwYXRocyBhcmUgY29uY2VybmVkIHdpdGggbGFyZ2UgYWxsb2NhdGlv
bnMgYW5kIGFsbG9jYXRvciBjcmVhdGlvbi4KLSAgICB2b2lkKiBhbGxvY2F0ZVNsb3coVk0mLCBz
aXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKLSAgICB2
b2lkKiB0cnlBbGxvY2F0ZVNsb3coVk0mLCBzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0Kik7Cisg
ICAgdm9pZCogYWxsb2NhdGVTbG93KHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0
aW9uRmFpbHVyZU1vZGUpOworICAgIHZvaWQqIHRyeUFsbG9jYXRlU2xvdyhzaXplX3QsIEdDRGVm
ZXJyYWxDb250ZXh0Kik7CiAgICAgCi0gICAgc3RkOjphcnJheTxBbGxvY2F0b3IsIE1hcmtlZFNw
YWNlOjpudW1TaXplQ2xhc3Nlcz4gbV9hbGxvY2F0b3JGb3JTaXplU3RlcDsKKyAgICBzdGQ6OmFy
cmF5PEJsb2NrRGlyZWN0b3J5KiwgTWFya2VkU3BhY2U6Om51bVNpemVDbGFzc2VzPiBtX2FsbG9j
YXRvckZvclNpemVTdGVwOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmxvY2tEaXJlY3Rv
cnk+PiBtX2RpcmVjdG9yaWVzOwogfTsKIAotQUxXQVlTX0lOTElORSBBbGxvY2F0b3IgQ29tcGxl
dGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxsb2NhdG9y
Rm9yTW9kZSBtb2RlKQorQUxXQVlTX0lOTElORSBCbG9ja0RpcmVjdG9yeSogQ29tcGxldGVTdWJz
cGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZSBtb2RlKQogewogICAgIGlmIChzaXplIDw9IE1hcmtlZFNwYWNlOjpsYXJnZUN1dG9mZikgewot
ICAgICAgICBBbGxvY2F0b3IgcmVzdWx0ID0gbV9hbGxvY2F0b3JGb3JTaXplU3RlcFtNYXJrZWRT
cGFjZTo6c2l6ZUNsYXNzVG9JbmRleChzaXplKV07CisgICAgICAgIEJsb2NrRGlyZWN0b3J5KiBy
ZXN1bHQgPSBtX2FsbG9jYXRvckZvclNpemVTdGVwW01hcmtlZFNwYWNlOjpzaXplQ2xhc3NUb0lu
ZGV4KHNpemUpXTsKICAgICAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgICAgIGNhc2UgQWxsb2Nh
dG9yRm9yTW9kZTo6TXVzdEFscmVhZHlIYXZlQWxsb2NhdG9yOgogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQocmVzdWx0KTsKQEAgLTc4LDcgKzc4LDcgQEAgQUxXQVlTX0lOTElORSBBbGxvY2F0
b3IgQ29tcGxldGVTdWJzcGFjZTo6YWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3Qgc2l6ZSwg
QWwKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlQobW9k
ZSAhPSBBbGxvY2F0b3JGb3JNb2RlOjpNdXN0QWxyZWFkeUhhdmVBbGxvY2F0b3IpOwotICAgIHJl
dHVybiBBbGxvY2F0b3IoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAppbmRleCBlM2VjZmI4NzVi
OGZkNWY2YTZhOGMwZWI4ZWI3NGFiMTkzMzY1Yzc2Li43YThlZGQ0OTcyOGU0YWYwYzQ5ZjlkNmIw
NTEwNTU2YWYzZDA2N2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9G
cmVlTGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmgKQEAg
LTU3LDYgKzU3LDggQEAgc3RydWN0IEZyZWVDZWxsIHsKIH07CiAKIGNsYXNzIEZyZWVMaXN0IHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGcmVlTGlzdCk7CisgICAgCiBwdWJsaWM6CiAgICAg
RnJlZUxpc3QodW5zaWduZWQgY2VsbFNpemUpOwogICAgIH5GcmVlTGlzdCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NEZWZlcnJhbENvbnRleHQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDRGVmZXJyYWxDb250ZXh0LmgKaW5kZXggYzYwZGQwYTc2
MDk5YmE1YTg1Yjc2N2ZiNmMwNzdmNjgzM2Y4Y2ZjYi4uOTVlNzEwZjIwOGYwYzkzMGI4YWEyY2Ew
YzAwODk4MWFiNjc0YTJmZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NEZWZlcnJhbENvbnRleHQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0Rl
ZmVycmFsQ29udGV4dC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI5LDEyICsyOSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
SGVhcDsKIGNsYXNzIEJsb2NrRGlyZWN0b3J5OwotY2xhc3MgTG9jYWxBbGxvY2F0b3I7CiAKIGNs
YXNzIEdDRGVmZXJyYWxDb250ZXh0IHsKICAgICBmcmllbmQgY2xhc3MgSGVhcDsKICAgICBmcmll
bmQgY2xhc3MgQmxvY2tEaXJlY3Rvcnk7Ci0gICAgZnJpZW5kIGNsYXNzIExvY2FsQWxsb2NhdG9y
OwogcHVibGljOgogICAgIGlubGluZSBHQ0RlZmVycmFsQ29udGV4dChIZWFwJik7CiAgICAgaW5s
aW5lIH5HQ0RlZmVycmFsQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcApp
bmRleCA5ODhiZTFkODUyMjZhZmRlMDdhODkxNzkxZmE1NzE3OTRhMjM4ZjZhLi43NmI1YzY4OGRl
NWQ0NjlhMTBiNjRhZGUzY2NiMTJjZjI3MjNhNjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcApAQCAtNjgsNyArNjgsNiBAQAogI2luY2x1ZGUgIlN0b3BJZk5lY2Vzc2FyeVRpbWVy
LmgiCiAjaW5jbHVkZSAiU3dlZXBpbmdTY29wZS5oIgogI2luY2x1ZGUgIlN5bmNocm9ub3VzU3Rv
cFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIgotI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVM
YXlvdXQuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKICNpbmNsdWRlICJUeXBlUHJvZmls
ZXJMb2cuaCIKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgpAQCAtMzEzLDcgKzMxMiw2
IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1faGVscGVy
Q2xpZW50KCZoZWFwSGVscGVyUG9vbCgpKQogICAgICwgbV90aHJlYWRMb2NrKEJveDxMb2NrPjo6
Y3JlYXRlKCkpCiAgICAgLCBtX3RocmVhZENvbmRpdGlvbihBdXRvbWF0aWNUaHJlYWRDb25kaXRp
b246OmNyZWF0ZSgpKQotICAgICwgbV90aHJlYWRMb2NhbENhY2hlTGF5b3V0KHN0ZDo6bWFrZV91
bmlxdWU8VGhyZWFkTG9jYWxDYWNoZUxheW91dD4oKSkKIHsKICAgICBtX3dvcmxkU3RhdGUuc3Rv
cmUoMCk7CiAKQEAgLTQ0OCw3ICs0NDYsNyBAQCB2b2lkIEhlYXA6Omxhc3RDaGFuY2VUb0ZpbmFs
aXplKCkKICAgICAgICAgZGF0YUxvZygiNSAiKTsKICAgICAKICAgICBtX2FycmF5QnVmZmVycy5s
YXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwotICAgIG1fb2JqZWN0U3BhY2Uuc3RvcEFsbG9jYXRpbmdG
b3JHb29kKCk7CisgICAgbV9vYmplY3RTcGFjZS5zdG9wQWxsb2NhdGluZygpOwogICAgIG1fb2Jq
ZWN0U3BhY2UubGFzdENoYW5jZVRvRmluYWxpemUoKTsKICAgICByZWxlYXNlRGVsYXllZFJlbGVh
c2VkT2JqZWN0cygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKaW5kZXggYTA4NDcxYjNm
MmEzYmQyZTI0ZGU1N2M0YTdmMjA3MWIyMmJiYTk4MC4uNThlMWE2M2ZlMjdhNDViMWI2MzgwYTg5
NzhmNDk5ZTMzMTQ0ZGM5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaApAQCAtODQsNyAr
ODQsNiBAQCBjbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIFNwYWNlVGltZU11dGF0b3JTY2hlZHVs
ZXI7CiBjbGFzcyBTdG9wSWZOZWNlc3NhcnlUaW1lcjsKIGNsYXNzIFN3ZWVwaW5nU2NvcGU7Ci1j
bGFzcyBUaHJlYWRMb2NhbENhY2hlTGF5b3V0OwogY2xhc3MgVk07CiBjbGFzcyBXZWFrR0NNYXBC
YXNlOwogc3RydWN0IEN1cnJlbnRUaHJlYWRTdGF0ZTsKQEAgLTM3Myw4ICszNzIsNiBAQCBwdWJs
aWM6CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFjaFNsb3RW
aXNpdG9yKGNvbnN0IEZ1bmMmKTsKLSAgICAKLSAgICBUaHJlYWRMb2NhbENhY2hlTGF5b3V0JiB0
aHJlYWRMb2NhbENhY2hlTGF5b3V0KCkgeyByZXR1cm4gKm1fdGhyZWFkTG9jYWxDYWNoZUxheW91
dDsgfQogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBbGxvY2F0aW5nU2NvcGU7CkBAIC03
MTcsOCArNzE0LDYgQEAgcHJpdmF0ZToKICAgICAKICAgICBDdXJyZW50VGhyZWFkU3RhdGUqIG1f
Y3VycmVudFRocmVhZFN0YXRlIHsgbnVsbHB0ciB9OwogICAgIFdURjo6VGhyZWFkKiBtX2N1cnJl
bnRUaHJlYWQgeyBudWxscHRyIH07IC8vIEl0J3MgT0sgaWYgdGhpcyBiZWNvbWVzIGEgZGFuZ2xp
bmcgcG9pbnRlci4KLSAgICAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkTG9jYWxDYWNoZUxh
eW91dD4gbV90aHJlYWRMb2NhbENhY2hlTGF5b3V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29DZWxsU2V0LmgKaW5kZXggMTZjOWNiYjJiN2Mz
Mjk3NDI3ZDg3NDYyYmQ4MjRhMTM2ODZjMGNlNy4uMzg2OTVmMjNmY2RmYThkMmUwNmVmYjRjZGI2
ODc3MWViZmQxZTkxMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNv
Q2VsbFNldC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaApA
QCAtMjUsMTIgKzI1LDkgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJNYXJrZWRCbG9j
ay5oIgogI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KICNpbmNsdWRlIDx3dGYvQ29uY3VycmVudFZl
Y3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0Qml0VmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL1Nl
bnRpbmVsTGlua2VkTGlzdC5oPgotI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29T
dWJzcGFjZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Jc29TdWJzcGFjZS5jcHAK
aW5kZXggODE3NGI1NDUwODk3MDNmOGZjMTkzYjBmN2UwMmUzNTk5MzZhNmQ1MS4uMTk0OTM2Zjg2
NzkyMDdiYWU2N2U3YjU4ZmIzMjRlZjUwMGQ0ZWQzYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0lzb1N1YnNwYWNlLmNwcApAQCAtMjYsMTEgKzI2LDggQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJJc29TdWJzcGFjZS5oIgogCi0jaW5jbHVkZSAiQWxsb2NhdG9ySW5s
aW5lcy5oIgogI2luY2x1ZGUgIkJsb2NrRGlyZWN0b3J5SW5saW5lcy5oIgogI2luY2x1ZGUgIklz
b0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJMb2NhbEFsbG9jYXRvcklubGlu
ZXMuaCIKLSNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKIApAQCAtMzgsNyArMzUsNiBAQCBJc29TdWJzcGFjZTo6SXNvU3Vic3BhY2UoQ1N0cmlu
ZyBuYW1lLCBIZWFwJiBoZWFwLCBIZWFwQ2VsbFR5cGUqIGhlYXBDZWxsVHlwZSwgcwogICAgIDog
U3Vic3BhY2UobmFtZSwgaGVhcCkKICAgICAsIG1fc2l6ZShzaXplKQogICAgICwgbV9kaXJlY3Rv
cnkoJmhlYXAsIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6YXRvbVNpemU+
KHNpemUpKQotICAgICwgbV9hbGxvY2F0b3IobV9kaXJlY3RvcnkuYWxsb2NhdG9yKCkpCiAgICAg
LCBtX2lzb0FsaWduZWRNZW1vcnlBbGxvY2F0b3Ioc3RkOjptYWtlX3VuaXF1ZTxJc29BbGlnbmVk
TWVtb3J5QWxsb2NhdG9yPigpKQogewogICAgIGluaXRpYWxpemUoaGVhcENlbGxUeXBlLCBtX2lz
b0FsaWduZWRNZW1vcnlBbGxvY2F0b3IuZ2V0KCkpOwpAQCAtNTQsMjAgKzUwLDIwIEBAIElzb1N1
YnNwYWNlOjp+SXNvU3Vic3BhY2UoKQogewogfQogCi1BbGxvY2F0b3IgSXNvU3Vic3BhY2U6OmFs
bG9jYXRvckZvcihzaXplX3Qgc2l6ZSwgQWxsb2NhdG9yRm9yTW9kZSBtb2RlKQorQmxvY2tEaXJl
Y3RvcnkqIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3Ioc2l6ZV90IHNpemUsIEFsbG9jYXRvckZv
ck1vZGUgbW9kZSkKIHsKICAgICByZXR1cm4gYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplLCBt
b2RlKTsKIH0KIAotdm9pZCogSXNvU3Vic3BhY2U6OmFsbG9jYXRlKFZNJiB2bSwgc2l6ZV90IHNp
emUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJl
TW9kZSBmYWlsdXJlTW9kZSkKK3ZvaWQqIElzb1N1YnNwYWNlOjphbGxvY2F0ZShzaXplX3Qgc2l6
ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlIGZhaWx1cmVNb2RlKQogewotICAgIHJldHVybiBhbGxvY2F0ZU5vblZpcnR1YWwodm0sIHNp
emUsIGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpOworICAgIHJldHVybiBhbGxvY2F0ZU5v
blZpcnR1YWwoc2l6ZSwgZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CiB9CiAKLXZvaWQq
IElzb1N1YnNwYWNlOjphbGxvY2F0ZU5vblZpcnR1YWwoVk0mIHZtLCBzaXplX3Qgc2l6ZSwgR0NE
ZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZh
aWx1cmVNb2RlKQordm9pZCogSXNvU3Vic3BhY2U6OmFsbG9jYXRlTm9uVmlydHVhbChzaXplX3Qg
c2l6ZSwgR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCwgQWxsb2NhdGlvbkZhaWx1
cmVNb2RlIGZhaWx1cmVNb2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKHNpemUgPT0gdGhpcy0+
c2l6ZSgpKTsKLSAgICB2b2lkKiByZXN1bHQgPSBtX2FsbG9jYXRvci5hbGxvY2F0ZSh2bSwgZGVm
ZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CisgICAgdm9pZCogcmVzdWx0ID0gbV9kaXJlY3Rv
cnkuYWxsb2NhdGUoZGVmZXJyYWxDb250ZXh0LCBmYWlsdXJlTW9kZSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vi
c3BhY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgKaW5kZXgg
YmFmZTk5ZGEzZjMxNDc5Yzg3NWY2NzE2MmQ1Y2Q4ZDYyZGZkYzM0NS4uMzc0ZjMxZGVhNGU3MDkz
ODkyOGFmNWNjYmNjZjk4NjEwYmJhMGI3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSXNvU3Vic3BhY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9J
c29TdWJzcGFjZS5oCkBAIC00MSwxMSArNDEsMTEgQEAgcHVibGljOgogCiAgICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIAotICAgIEFsbG9jYXRvciBhbGxvY2F0b3JG
b3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSBvdmVycmlkZTsKLSAgICBBbGxvY2F0b3IgYWxs
b2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpOworICAgIEJsb2Nr
RGlyZWN0b3J5KiBhbGxvY2F0b3JGb3Ioc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKSBvdmVycmlk
ZTsKKyAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yRm9yTm9uVmlydHVhbChzaXplX3QsIEFs
bG9jYXRvckZvck1vZGUpOwogCi0gICAgdm9pZCogYWxsb2NhdGUoVk0mLCBzaXplX3QsIEdDRGVm
ZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSBvdmVycmlkZTsKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZU5vblZpcnR1YWwoVk0mLCBzaXplX3QsIEdDRGVm
ZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKyAgICB2b2lkKiBhbGxvY2F0
ZShzaXplX3QsIEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKSBvdmVy
cmlkZTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxvY2F0ZU5vblZpcnR1YWwoc2l6
ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7CiAKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIElzb0NlbGxTZXQ7CkBAIC01NiwxNSArNTYsMTQgQEAgcHJp
dmF0ZToKICAgICAKICAgICBzaXplX3QgbV9zaXplOwogICAgIEJsb2NrRGlyZWN0b3J5IG1fZGly
ZWN0b3J5OwotICAgIEFsbG9jYXRvciBtX2FsbG9jYXRvcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
SXNvQWxpZ25lZE1lbW9yeUFsbG9jYXRvcj4gbV9pc29BbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwog
ICAgIFNlbnRpbmVsTGlua2VkTGlzdDxJc29DZWxsU2V0LCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxJ
c29DZWxsU2V0Pj4gbV9jZWxsU2V0czsKIH07CiAKLWlubGluZSBBbGxvY2F0b3IgSXNvU3Vic3Bh
Y2U6OmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90IHNpemUsIEFsbG9jYXRvckZvck1vZGUp
CitpbmxpbmUgQmxvY2tEaXJlY3RvcnkqIElzb1N1YnNwYWNlOjphbGxvY2F0b3JGb3JOb25WaXJ0
dWFsKHNpemVfdCBzaXplLCBBbGxvY2F0b3JGb3JNb2RlKQogewogICAgIFJFTEVBU0VfQVNTRVJU
KHNpemUgPT0gdGhpcy0+c2l6ZSgpKTsKLSAgICByZXR1cm4gbV9hbGxvY2F0b3I7CisgICAgcmV0
dXJuICZtX2RpcmVjdG9yeTsKIH0KIAogI2RlZmluZSBJU09fU1VCU1BBQ0VfSU5JVChoZWFwLCBo
ZWFwQ2VsbFR5cGUsIHR5cGUpICgiSXNvbGF0ZWQgIiAjdHlwZSAiIFNwYWNlIiwgKGhlYXApLCAo
aGVhcENlbGxUeXBlKSwgc2l6ZW9mKHR5cGUpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTG9jYWxBbGxvY2F0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTM4
ZjMyMzY1YjY1NzI1MmJjZWI3MjIyNDgwYWZlNGZmODg1MzBlLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xv
Y2FsQWxsb2NhdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI5NyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJMb2NhbEFsbG9jYXRvci5oIgotCi0jaW5jbHVkZSAiQWxsb2NhdGluZ1Nj
b3BlLmgiCi0jaW5jbHVkZSAiTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiT3B0
aW9ucy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotTG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxsb2Nh
dG9yKEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkpCi0gICAgOiBtX2RpcmVjdG9yeShkaXJlY3Rv
cnkpCi0gICAgLCBtX2NlbGxTaXplKGRpcmVjdG9yeS0+bV9jZWxsU2l6ZSkKLSAgICAsIG1fZnJl
ZUxpc3QobV9jZWxsU2l6ZSkKLXsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGRpcmVjdG9y
eS0+bV9sb2NhbEFsbG9jYXRvcnNMb2NrKTsKLSAgICBkaXJlY3RvcnktPm1fbG9jYWxBbGxvY2F0
b3JzLmFwcGVuZCh0aGlzKTsKLX0KLQotTG9jYWxBbGxvY2F0b3I6OkxvY2FsQWxsb2NhdG9yKExv
Y2FsQWxsb2NhdG9yJiYgb3RoZXIpCi0gICAgOiBtX2RpcmVjdG9yeShvdGhlci5tX2RpcmVjdG9y
eSkKLSAgICAsIG1fY2VsbFNpemUob3RoZXIubV9jZWxsU2l6ZSkKLSAgICAsIG1fZnJlZUxpc3Qo
V1RGTW92ZShvdGhlci5tX2ZyZWVMaXN0KSkKLSAgICAsIG1fY3VycmVudEJsb2NrKG90aGVyLm1f
Y3VycmVudEJsb2NrKQotICAgICwgbV9sYXN0QWN0aXZlQmxvY2sob3RoZXIubV9sYXN0QWN0aXZl
QmxvY2spCi17Ci0gICAgb3RoZXIucmVzZXQoKTsKLSAgICBpZiAob3RoZXIuaXNPbkxpc3QoKSkg
ewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fZGlyZWN0b3J5LT5tX2xvY2FsQWxs
b2NhdG9yc0xvY2spOwotICAgICAgICBvdGhlci5yZW1vdmUoKTsKLSAgICAgICAgbV9kaXJlY3Rv
cnktPm1fbG9jYWxBbGxvY2F0b3JzLmFwcGVuZCh0aGlzKTsKLSAgICB9Ci19Ci0KLXZvaWQgTG9j
YWxBbGxvY2F0b3I6OnJlc2V0KCkKLXsKLSAgICBtX2ZyZWVMaXN0LmNsZWFyKCk7Ci0gICAgbV9j
dXJyZW50QmxvY2sgPSBudWxscHRyOwotICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0cjsK
LX0KLQotTG9jYWxBbGxvY2F0b3I6On5Mb2NhbEFsbG9jYXRvcigpCi17Ci0gICAgaWYgKGlzT25M
aXN0KCkpIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2RpcmVjdG9yeS0+bV9s
b2NhbEFsbG9jYXRvcnNMb2NrKTsKLSAgICAgICAgcmVtb3ZlKCk7Ci0gICAgfQotICAgIAotICAg
IC8vIEFzc2VydCB0aGF0IHRoaXMgYWxsb2NhdG9yIGlzbid0IGhvbGRpbmcgb250byBhbnkgbWVt
b3J5LiBUaGlzIGlzIGEgdmFsaWQgYXNzZXJ0aW9uIGZvciB0aGUKLSAgICAvLyBmb2xsb3dpbmcg
dHdvIHVzZSBjYXNlczoKLSAgICAvLyAKLSAgICAvLyAtIEltbW9ydGFsIFRMQy4gVGhvc2UgZGVz
dHJ1Y3QgYWZ0ZXIgdGhlIGhlYXAgaXMgZG9uZSBkZXN0cnVjdGluZywgc28gdGhleSBzaG91bGQg
bm90IGhhdmUKLSAgICAvLyAgIGFueSBzdGF0ZSBsZWZ0IGluIHRoZW0uCi0gICAgLy8KLSAgICAv
LyAtIFRMQyBvd25lZCBieSBhbiBvYmplY3QuIFN1Y2ggYSBUTEMgZ2V0cyBkZXN0cm95ZWQgYWZ0
ZXIgYSBHQyBmbGlwIGR1cmluZyB3aGljaCB3ZSBwcm92ZWQKLSAgICAvLyAgIHRoYXQgaXQgaXMg
bm90IHJlYWNoYWJsZS4gVGhlcmVmb3JlLCB0aGUgVExDIHNob3VsZCBzdGlsbCBiZSBpbiBhIGZ1
bGx5IHJlc2V0IHN0YXRlIGF0IHRoZQotICAgIC8vICAgdGltZSBvZiBkZXN0cnVjdGlvbiBiZWNh
dXNlIGZvciBpdCB0byBnZXQgaW50byBhbnkgb3RoZXIgc3RhdGUsIHNvbWVvbmUgbXVzdCBoYXZl
IGFsbG9jYXRlZAotICAgIC8vICAgaW4gaXQgKHdoaWNoIGlzIGltcG9zc2libGUgYmVjYXVzZSBp
dCdzIHN1cHBvc2VkbHkgdW5yZWFjaGFibGUpLgotICAgIGJvb2wgb2sgPSB0cnVlOwotICAgIGlm
ICghbV9mcmVlTGlzdC5hbGxvY2F0aW9uV2lsbEZhaWwoKSkgewotICAgICAgICBkYXRhTG9nKCJG
QVRBTDogIiwgUmF3UG9pbnRlcih0aGlzKSwgIi0+fkxvY2FsQWxsb2NhdG9yIGhhcyBub24tZW1w
dHkgZnJlZS1saXN0LlxuIik7Ci0gICAgICAgIG9rID0gZmFsc2U7Ci0gICAgfQotICAgIGlmICht
X2N1cnJlbnRCbG9jaykgewotICAgICAgICBkYXRhTG9nKCJGQVRBTDogIiwgUmF3UG9pbnRlcih0
aGlzKSwgIi0+fkxvY2FsQWxsb2NhdG9yIGhhcyBub24tbnVsbCBjdXJyZW50IGJsb2NrLlxuIik7
Ci0gICAgICAgIG9rID0gZmFsc2U7Ci0gICAgfQotICAgIGlmIChtX2xhc3RBY3RpdmVCbG9jaykg
ewotICAgICAgICBkYXRhTG9nKCJGQVRBTDogIiwgUmF3UG9pbnRlcih0aGlzKSwgIi0+fkxvY2Fs
QWxsb2NhdG9yIGhhcyBub24tbnVsbCBsYXN0IGFjdGl2ZSBibG9jay5cbiIpOwotICAgICAgICBv
ayA9IGZhbHNlOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVChvayk7Ci19Ci0KLXZvaWQgTG9j
YWxBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nKCkKLXsKLSAgICBBU1NFUlQoIW1fbGFzdEFjdGl2
ZUJsb2NrKTsKLSAgICBpZiAoIW1fY3VycmVudEJsb2NrKSB7Ci0gICAgICAgIEFTU0VSVChtX2Zy
ZWVMaXN0LmFsbG9jYXRpb25XaWxsRmFpbCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAKLSAgICBtX2N1cnJlbnRCbG9jay0+c3RvcEFsbG9jYXRpbmcobV9mcmVlTGlzdCk7Ci0gICAg
bV9sYXN0QWN0aXZlQmxvY2sgPSBtX2N1cnJlbnRCbG9jazsKLSAgICBtX2N1cnJlbnRCbG9jayA9
IG51bGxwdHI7Ci0gICAgbV9mcmVlTGlzdC5jbGVhcigpOwotfQotCi12b2lkIExvY2FsQWxsb2Nh
dG9yOjpyZXN1bWVBbGxvY2F0aW5nKCkKLXsKLSAgICBpZiAoIW1fbGFzdEFjdGl2ZUJsb2NrKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xhc3RBY3RpdmVCbG9jay0+cmVzdW1lQWxsb2NhdGlu
ZyhtX2ZyZWVMaXN0KTsKLSAgICBtX2N1cnJlbnRCbG9jayA9IG1fbGFzdEFjdGl2ZUJsb2NrOwot
ICAgIG1fbGFzdEFjdGl2ZUJsb2NrID0gbnVsbHB0cjsKLX0KLQotdm9pZCBMb2NhbEFsbG9jYXRv
cjo6cHJlcGFyZUZvckFsbG9jYXRpb24oKQotewotICAgIHJlc2V0KCk7Ci19Ci0KLXZvaWQgTG9j
YWxBbGxvY2F0b3I6OnN0b3BBbGxvY2F0aW5nRm9yR29vZCgpCi17Ci0gICAgc3RvcEFsbG9jYXRp
bmcoKTsKLSAgICByZXNldCgpOwotfQotCi12b2lkKiBMb2NhbEFsbG9jYXRvcjo6YWxsb2NhdGVT
bG93Q2FzZShHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGUgZmFpbHVyZU1vZGUpCi17Ci0gICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1w
bGVyU2NvcGUoZmFsc2UpOwotICAgIEhlYXAmIGhlYXAgPSAqbV9kaXJlY3RvcnktPm1faGVhcDsK
LSAgICBBU1NFUlQoaGVhcC52bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsK
LSAgICBkb1Rlc3RDb2xsZWN0aW9uc0lmTmVlZGVkKGRlZmVycmFsQ29udGV4dCk7Ci0KLSAgICBB
U1NFUlQoIW1fZGlyZWN0b3J5LT5tYXJrZWRTcGFjZSgpLmlzSXRlcmF0aW5nKCkpOwotICAgIGhl
YXAuZGlkQWxsb2NhdGUobV9mcmVlTGlzdC5vcmlnaW5hbFNpemUoKSk7Ci0gICAgCi0gICAgZGlk
Q29uc3VtZUZyZWVMaXN0KCk7Ci0gICAgCi0gICAgQWxsb2NhdGluZ1Njb3BlIGhlbHBpbmdIZWFw
KGhlYXApOwotCi0gICAgaGVhcC5jb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKGRlZmVycmFsQ29u
dGV4dCk7Ci0gICAgCi0gICAgLy8gR29vZnkgY29ybmVyIGNhc2U6IHRoZSBHQyBjYWxsZWQgYSBj
YWxsYmFjayBhbmQgbm93IHRoaXMgZGlyZWN0b3J5IGhhcyBhIGN1cnJlbnRCbG9jay4gVGhpcyBv
bmx5Ci0gICAgLy8gaGFwcGVucyB3aGVuIHJ1bm5pbmcgV2ViS2l0IHRlc3RzLCB3aGljaCBpbmpl
Y3QgYSBjYWxsYmFjayBpbnRvIHRoZSBHQydzIGZpbmFsaXphdGlvbi4KLSAgICBpZiAoVU5MSUtF
TFkobV9jdXJyZW50QmxvY2spKQotICAgICAgICByZXR1cm4gYWxsb2NhdGUoZGVmZXJyYWxDb250
ZXh0LCBmYWlsdXJlTW9kZSk7Ci0gICAgCi0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVX
aXRob3V0Q29sbGVjdGluZygpOwotICAgIAotICAgIGlmIChMSUtFTFkocmVzdWx0ICE9IDApKQot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIAotICAgIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJs
b2NrID0gbV9kaXJlY3RvcnktPnRyeUFsbG9jYXRlQmxvY2soKTsKLSAgICBpZiAoIWJsb2NrKSB7
Ci0gICAgICAgIGlmIChmYWlsdXJlTW9kZSA9PSBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2Vy
dCkKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBtX2RpcmVjdG9yeS0+
YWRkQmxvY2soYmxvY2spOwotICAgIHJlc3VsdCA9IGFsbG9jYXRlSW4oYmxvY2spOwotICAgIEFT
U0VSVChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgTG9jYWxBbGxvY2F0
b3I6OmRpZENvbnN1bWVGcmVlTGlzdCgpCi17Ci0gICAgaWYgKG1fY3VycmVudEJsb2NrKQotICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+ZGlkQ29uc3VtZUZyZWVMaXN0KCk7Ci0gICAgCi0gICAgbV9m
cmVlTGlzdC5jbGVhcigpOwotICAgIG1fY3VycmVudEJsb2NrID0gbnVsbHB0cjsKLX0KLQotdm9p
ZCogTG9jYWxBbGxvY2F0b3I6OnRyeUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKQotewotICAg
IC8vIEZJWE1FOiBJZiB3ZSB3YW50ZWQgdGhpcyB0byBiZSB1c2VkIGZvciByZWFsIG11bHRpLXRo
cmVhZGVkIGFsbG9jYXRpb25zIHRoZW4gd2Ugd291bGQgaGF2ZSB0bwotICAgIC8vIGNvbWUgdXAg
d2l0aCBzb21lIGNvbmN1cnJlbmN5IHByb3RvY29sIGhlcmUuIFRoYXQgcHJvdG9jb2wgd291bGQg
bmVlZCB0byBiZSBhYmxlIHRvIGhhbmRsZToKLSAgICAvLwotICAgIC8vIC0gVGhlIGJhc2ljIGNh
c2Ugb2YgbXVsdGlwbGUgTG9jYWxBbGxvY2F0b3JzIHRyeWluZyB0byBkbyBhbiBhbGxvY2F0aW9u
Q3Vyc29yIHNlYXJjaCBvbiB0aGUKLSAgICAvLyAgIHNhbWUgYml0dmVjdG9yLiBUaGF0IHByb2Jh
Ymx5IG5lZWRzIHRoZSBiaXR2ZWN0b3IgbG9jayBhdCBsZWFzdC4KLSAgICAvLwotICAgIC8vIC0g
VGhlIGhhcmRlciBjYXNlIG9mIHNvbWUgTG9jYWxBbGxvY2F0b3IgdHJpZ2dlcmluZyBhIHN0ZWFs
IGZyb20gYSBkaWZmZXJlbnQgQmxvY2tEaXJlY3RvcnkKLSAgICAvLyAgIHZpYSBhIHNlYXJjaCBp
biB0aGUgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcidzIGxpc3QuIFdobyBrbm93cyB3aGF0IGxvY2tz
IHRoYXQgbmVlZHMuCi0gICAgLy8gCi0gICAgLy8gT25lIHdheSB0byBtYWtlIHRoaXMgd29yayBp
cyB0byBoYXZlIGEgc2luZ2xlIHBlci1IZWFwIGxvY2sgdGhhdCBwcm90ZWN0cyBhbGwgbXV0YXRv
ciBsb2NrCi0gICAgLy8gYWxsb2NhdGlvbiBzbG93IHBhdGhzLiBUaGF0IHdvdWxkIHByb2JhYmx5
IGJlIHNjYWxhYmxlIGVub3VnaCBmb3IgeWVhcnMuIEl0IHdvdWxkIGNlcnRhaW5seSBiZQotICAg
IC8vIGZvciB1c2luZyBUTEMgYWxsb2NhdGlvbiBmcm9tIEpJVCB0aHJlYWRzLgotICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE2MzUKLSAgICAKLSAgICBT
dXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Ci0gICAgCi0gICAgQVNT
RVJUKCFtX2N1cnJlbnRCbG9jayk7Ci0gICAgQVNTRVJUKG1fZnJlZUxpc3QuYWxsb2NhdGlvbldp
bGxGYWlsKCkpOwotICAgIAotICAgIGZvciAoOzspIHsKLSAgICAgICAgTWFya2VkQmxvY2s6Okhh
bmRsZSogYmxvY2sgPSBtX2RpcmVjdG9yeS0+ZmluZEJsb2NrRm9yQWxsb2NhdGlvbigpOwotICAg
ICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYgKHZvaWQq
IHJlc3VsdCA9IHRyeUFsbG9jYXRlSW4oYmxvY2spKQotICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0gICAgCi0gICAgaWYgKE9wdGlvbnM6OnN0ZWFsRW1wdHlCbG9ja3NGcm9tT3Ro
ZXJBbGxvY2F0b3JzKCkKLSAgICAgICAgJiYgKE9wdGlvbnM6OnRyYWRlRGVzdHJ1Y3RvckJsb2Nr
cygpIHx8ICFtX2RpcmVjdG9yeS0+bmVlZHNEZXN0cnVjdGlvbigpKSkgewotICAgICAgICBpZiAo
TWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2sgPSBtX2RpcmVjdG9yeS0+bV9zdWJzcGFjZS0+Zmlu
ZEVtcHR5QmxvY2tUb1N0ZWFsKCkpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJsb2Nr
LT5hbGlnbmVkTWVtb3J5QWxsb2NhdG9yKCkgPT0gbV9kaXJlY3RvcnktPm1fc3Vic3BhY2UtPmFs
aWduZWRNZW1vcnlBbGxvY2F0b3IoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJsb2Nr
LT5zd2VlcChudWxscHRyKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gSXQncyBnb29k
IHRoYXQgdGhpcyBjbGVhcnMgY2FuQWxsb2NhdGVCdXROb3RFbXB0eSBhcyB3ZWxsIGFzIGFsbCBv
dGhlciBiaXRzLAotICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBhIHJlbW90ZSBjaGFu
Y2UgdGhhdCBhIGJsb2NrIG1heSBoYXZlIGJvdGggY2FuQWxsb2NhdGVCdXROb3RFbXB0eQotICAg
ICAgICAgICAgLy8gYW5kIGVtcHR5IHNldCBhdCB0aGUgc2FtZSB0aW1lLgotICAgICAgICAgICAg
YmxvY2stPnJlbW92ZUZyb21EaXJlY3RvcnkoKTsKLSAgICAgICAgICAgIG1fZGlyZWN0b3J5LT5h
ZGRCbG9jayhibG9jayk7Ci0gICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVJbihibG9jayk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQqIExv
Y2FsQWxsb2NhdG9yOjphbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrKQotewot
ICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFsbG9jYXRlSW4oYmxvY2spOwotICAgIFJFTEVBU0VfQVNT
RVJUKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCogTG9jYWxBbGxvY2F0
b3I6OnRyeUFsbG9jYXRlSW4oTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2spCi17Ci0gICAgQVNT
RVJUKGJsb2NrKTsKLSAgICBBU1NFUlQoIWJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7Ci0gICAgCi0g
ICAgYmxvY2stPnN3ZWVwKCZtX2ZyZWVMaXN0KTsKLSAgICAKLSAgICAvLyBJdCdzIHBvc3NpYmxl
IHRvIHN0dW1ibGUgb24gYSBjb21wbGV0ZWx5IGZ1bGwgYmxvY2suIE1hcmtpbmcgdHJpZXMgdG8g
cmV0aXJlIHRoZXNlLCBidXQKLSAgICAvLyB0aGF0IGFsZ29yaXRobSBpcyByYWN5IGFuZCBtYXkg
Zm9yZ2V0IHRvIGRvIGl0IHNvbWV0aW1lcy4KLSAgICBpZiAobV9mcmVlTGlzdC5hbGxvY2F0aW9u
V2lsbEZhaWwoKSkgewotICAgICAgICBBU1NFUlQoYmxvY2stPmlzRnJlZUxpc3RlZCgpKTsKLSAg
ICAgICAgYmxvY2stPnVuc3dlZXBXaXRoTm9OZXdseUFsbG9jYXRlZCgpOwotICAgICAgICBBU1NF
UlQoIWJsb2NrLT5pc0ZyZWVMaXN0ZWQoKSk7Ci0gICAgICAgIEFTU0VSVCghbV9kaXJlY3Rvcnkt
PmlzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBibG9jaykpOwotICAgICAgICBBU1NFUlQoIW1f
ZGlyZWN0b3J5LT5pc0NhbkFsbG9jYXRlQnV0Tm90RW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCBi
bG9jaykpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgCi0gICAgbV9jdXJy
ZW50QmxvY2sgPSBibG9jazsKLSAgICAKLSAgICB2b2lkKiByZXN1bHQgPSBtX2ZyZWVMaXN0LmFs
bG9jYXRlKAotICAgICAgICBbXSAoKSAtPiBIZWFwQ2VsbCogewotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICB9KTsKLSAgICBtX2RpcmVjdG9yeS0+c2V0SXNFZGVuKE5vTG9ja2luZ05lY2Vzc2FyeSwg
bV9jdXJyZW50QmxvY2ssIHRydWUpOwotICAgIG1fZGlyZWN0b3J5LT5tYXJrZWRTcGFjZSgpLmRp
ZEFsbG9jYXRlSW5CbG9jayhtX2N1cnJlbnRCbG9jayk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotdm9pZCBMb2NhbEFsbG9jYXRvcjo6ZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRlZChHQ0RlZmVy
cmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQotewotICAgIGlmICghT3B0aW9uczo6c2xvd1Bh
dGhBbGxvY3NCZXR3ZWVuR0NzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXRpYyB1bnNp
Z25lZCBhbGxvY2F0aW9uQ291bnQgPSAwOwotICAgIGlmICghYWxsb2NhdGlvbkNvdW50KSB7Ci0g
ICAgICAgIGlmICghbV9kaXJlY3RvcnktPm1faGVhcC0+aXNEZWZlcnJlZCgpKSB7Ci0gICAgICAg
ICAgICBpZiAoZGVmZXJyYWxDb250ZXh0KQotICAgICAgICAgICAgICAgIGRlZmVycmFsQ29udGV4
dC0+bV9zaG91bGRHQyA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
bV9kaXJlY3RvcnktPm1faGVhcC0+Y29sbGVjdE5vdyhTeW5jLCBDb2xsZWN0aW9uU2NvcGU6OkZ1
bGwpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICgrK2FsbG9jYXRpb25Db3VudCA+PSBPcHRp
b25zOjpzbG93UGF0aEFsbG9jc0JldHdlZW5HQ3MoKSkKLSAgICAgICAgYWxsb2NhdGlvbkNvdW50
ID0gMDsKLX0KLQotYm9vbCBMb2NhbEFsbG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2
b2lkKiB0YXJnZXQpIGNvbnN0Ci17Ci0gICAgLy8gVGhpcyBhYm9taW5hdGlvbiBleGlzdHMgdG8g
ZGV0ZWN0IHdoZW4gYW4gb2JqZWN0IGlzIGluIHRoZSBkZWFkLWJ1dC1ub3QtZGVzdHJ1Y3RlZCBz
dGF0ZS4KLSAgICAvLyBUaGVyZWZvcmUsIGl0J3Mgbm90IGV2ZW4gY2xlYXIgdGhhdCB0aGlzIG5l
ZWRzIHRvIGRvIGFueXRoaW5nIGJleW9uZCByZXR1cm5pbmcgImZhbHNlIiwgc2luY2UKLSAgICAv
LyBpZiB3ZSBrbm93IHRoYXQgdGhlIGJsb2NrIG93bmluZyB0aGUgb2JqZWN0IGlzIGZyZWUtbGlz
dGVkLCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3IgYW55Ci0gICAgLy8gb2JqZWN0cyB0byBiZSBp
biB0aGUgZGVhZC1idXQtbm90LWRlc3RydWN0ZWQgc3RhdGUuCi0gICAgLy8gRklYTUU6IEdldCBy
aWQgb2YgdGhpcyBhYm9taW5hdGlvbi4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4MTY1NQotICAgIHJldHVybiBtX2ZyZWVMaXN0LmNvbnRhaW5zKGJpdHdpc2VfY2Fz
dDxIZWFwQ2VsbCo+KHRhcmdldCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDM3ZGI5NzNkYzhiZTRjYTFmYjE2ZWVkMmZiMWY5YWRkYjRkN2E3YzMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJGcmVlTGlzdC5oIgotI2luY2x1ZGUgIk1hcmtlZEJsb2Nr
LmgiCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1j
bGFzcyBCbG9ja0RpcmVjdG9yeTsKLWNsYXNzIEdDRGVmZXJyYWxDb250ZXh0OwotCi1jbGFzcyBM
b2NhbEFsbG9jYXRvciA6IHB1YmxpYyBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxMb2NhbEFsbG9jYXRv
cj4gewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExvY2FsQWxsb2NhdG9yKTsKLSAgICAKLXB1
YmxpYzoKLSAgICBMb2NhbEFsbG9jYXRvcihCbG9ja0RpcmVjdG9yeSopOwotICAgIExvY2FsQWxs
b2NhdG9yKExvY2FsQWxsb2NhdG9yJiYpOwotICAgIH5Mb2NhbEFsbG9jYXRvcigpOwotICAgIAot
ICAgIHZvaWQqIGFsbG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVN
b2RlKTsKLQotICAgIHZvaWQgc3RvcEFsbG9jYXRpbmcoKTsKLSAgICB2b2lkIHByZXBhcmVGb3JB
bGxvY2F0aW9uKCk7Ci0gICAgdm9pZCByZXN1bWVBbGxvY2F0aW5nKCk7Ci0gICAgdm9pZCBzdG9w
QWxsb2NhdGluZ0Zvckdvb2QoKTsKLSAgICAKLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
RnJlZUxpc3QoKTsKLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2VsbFNpemUoKTsKLSAg
ICAKLSAgICBib29sIGlzRnJlZUxpc3RlZENlbGwoY29uc3Qgdm9pZCopIGNvbnN0OwotCi1wcml2
YXRlOgotICAgIHZvaWQgcmVzZXQoKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBhbGxv
Y2F0ZVNsb3dDYXNlKEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlIGZh
aWx1cmVNb2RlKTsKLSAgICB2b2lkIGRpZENvbnN1bWVGcmVlTGlzdCgpOwotICAgIHZvaWQqIHRy
eUFsbG9jYXRlV2l0aG91dENvbGxlY3RpbmcoKTsKLSAgICB2b2lkKiB0cnlBbGxvY2F0ZUluKE1h
cmtlZEJsb2NrOjpIYW5kbGUqKTsKLSAgICB2b2lkKiBhbGxvY2F0ZUluKE1hcmtlZEJsb2NrOjpI
YW5kbGUqKTsKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZG9UZXN0Q29sbGVjdGlvbnNJZk5lZWRl
ZChHQ0RlZmVycmFsQ29udGV4dCopOwotCi0gICAgQmxvY2tEaXJlY3RvcnkqIG1fZGlyZWN0b3J5
OwotICAgIHVuc2lnbmVkIG1fY2VsbFNpemU7Ci0gICAgRnJlZUxpc3QgbV9mcmVlTGlzdDsKLSAg
ICBNYXJrZWRCbG9jazo6SGFuZGxlKiBtX2N1cnJlbnRCbG9jayB7IG51bGxwdHIgfTsKLSAgICBN
YXJrZWRCbG9jazo6SGFuZGxlKiBtX2xhc3RBY3RpdmVCbG9jayB7IG51bGxwdHIgfTsKLX07Ci0K
LWlubGluZSBwdHJkaWZmX3QgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKQotewot
ICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTG9jYWxBbGxvY2F0b3IsIG1fZnJlZUxpc3QpOwot
fQotCi1pbmxpbmUgcHRyZGlmZl90IExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkNlbGxTaXplKCkK
LXsKLSAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKExvY2FsQWxsb2NhdG9yLCBtX2NlbGxTaXpl
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9ySW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGM5N2I2OWUxMDJiNmJiMTcxZmUwMDczOGYwZTNlODZmNTYzNWY1M2IuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTG9jYWxBbGxvY2F0b3JJbmxpbmVzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiTG9jYWxBbGxvY2F0b3IuaCIKLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCogTG9jYWxBbGxvY2F0b3I6OmFsbG9jYXRlKEdDRGVm
ZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZSBmYWls
dXJlTW9kZSkKLXsKLSAgICByZXR1cm4gbV9mcmVlTGlzdC5hbGxvY2F0ZSgKLSAgICAgICAgWyZd
ICgpIC0+IEhlYXBDZWxsKiB7Ci0gICAgICAgICAgICBzYW5pdGl6ZVN0YWNrRm9yVk0obV9kaXJl
Y3RvcnktPmhlYXAoKS0+dm0oKSk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SGVh
cENlbGwqPihhbGxvY2F0ZVNsb3dDYXNlKGRlZmVycmFsQ29udGV4dCwgZmFpbHVyZU1vZGUpKTsK
LSAgICAgICAgfSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKaW5kZXggZGM3ZjU3OTBmYmIwYmMzM2MzMmJkMDA1
OGE3OTUyMjQ0ZGE2ODI2My4uMzRhNDBiNTZlYmEwYjNiZGQ0NWFlNDg2MWVjZDZkNDNiYjQ4ZDM0
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcApAQCAtMzk5
LDE1ICszOTksOCBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwKEZyZWVMaXN0KiBm
cmVlTGlzdCkKICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwT25seSAmJiAhbmVlZHNEZXN0cnVj
dGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faXNGcmVlTGlzdGVkKSB7Ci0gICAg
ICAgIGRhdGFMb2coIkZBVEFMOiAiLCBSYXdQb2ludGVyKHRoaXMpLCAiLT5zd2VlcDogYmxvY2sg
aXMgZnJlZS1saXN0ZWQuXG4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGlzQWxsb2NhdGVkKCkpIHsKLSAgICAgICAgZGF0YUxv
ZygiRkFUQUw6ICIsIFJhd1BvaW50ZXIodGhpcyksICItPnN3ZWVwOiBibG9jayBpcyBhbGxvY2F0
ZWQuXG4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Cisg
ICAgUkVMRUFTRV9BU1NFUlQoIW1faXNGcmVlTGlzdGVkKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgh
aXNBbGxvY2F0ZWQoKSk7CiAgICAgCiAgICAgaWYgKHNwYWNlKCktPmlzTWFya2luZygpKQogICAg
ICAgICBibG9jaygpLm1fbG9jay5sb2NrKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRTcGFjZS5jcHAKaW5kZXggOTRhYWZkODJkNTk5ZDVlMDBiZWFmNGJiNGM2Mjc4NWMzYWVh
MDU3Ny4uNTZkYTNiZTJkMzQ3NmQwYzhkNjAwOGMyZTAxMmUwMzVhYmMwYzJjYiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcApAQCAtMzAyLDE2ICszMDIsNiBA
QCB2b2lkIE1hcmtlZFNwYWNlOjpzdG9wQWxsb2NhdGluZygpCiAgICAgICAgIH0pOwogfQogCi12
b2lkIE1hcmtlZFNwYWNlOjpzdG9wQWxsb2NhdGluZ0Zvckdvb2QoKQotewotICAgIEFTU0VSVCgh
aXNJdGVyYXRpbmcoKSk7Ci0gICAgZm9yRWFjaERpcmVjdG9yeSgKLSAgICAgICAgWyZdIChCbG9j
a0RpcmVjdG9yeSYgZGlyZWN0b3J5KSAtPiBJdGVyYXRpb25TdGF0dXMgewotICAgICAgICAgICAg
ZGlyZWN0b3J5LnN0b3BBbGxvY2F0aW5nRm9yR29vZCgpOwotICAgICAgICAgICAgcmV0dXJuIEl0
ZXJhdGlvblN0YXR1czo6Q29udGludWU7Ci0gICAgICAgIH0pOwotfQotCiB2b2lkIE1hcmtlZFNw
YWNlOjpwcmVwYXJlRm9yQ29uc2VydmF0aXZlU2NhbigpCiB7CiAgICAgbV9sYXJnZUFsbG9jYXRp
b25zRm9yVGhpc0NvbGxlY3Rpb25CZWdpbiA9IG1fbGFyZ2VBbGxvY2F0aW9ucy5iZWdpbigpICsg
bV9sYXJnZUFsbG9jYXRpb25zT2Zmc2V0Rm9yVGhpc0NvbGxlY3Rpb247CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAppbmRleCA5YzkyY2QwOTlhODE4ODUyZmNkMjExNjU4
MjAwNTFkNjY3YzEzNmVmLi4yZDViZTI0Zjc3OTM5YmI2ODEwYmYyOWQ1MTY1YTAyNTUzMjllYjIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKQEAgLTk0LDcgKzk0
LDcgQEAgcHVibGljOgogICAgIAogICAgIEhlYXAqIGhlYXAoKSBjb25zdCB7IHJldHVybiBtX2hl
YXA7IH0KICAgICAKLSAgICB2b2lkIGxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7IC8vIE11c3QgY2Fs
bCBzdG9wQWxsb2NhdGluZ0Zvckdvb2QgZmlyc3QuCisgICAgdm9pZCBsYXN0Q2hhbmNlVG9GaW5h
bGl6ZSgpOyAvLyBZb3UgbXVzdCBjYWxsIHN0b3BBbGxvY2F0aW5nIGJlZm9yZSB5b3UgY2FsbCB0
aGlzLgogICAgIHZvaWQgZnJlZU1lbW9yeSgpOwogCiAgICAgc3RhdGljIHNpemVfdCBvcHRpbWFs
U2l6ZUZvcihzaXplX3QpOwpAQCAtMTExLDcgKzExMSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGRp
ZEZpbmlzaEl0ZXJhdGluZygpOwogCiAgICAgdm9pZCBzdG9wQWxsb2NhdGluZygpOwotICAgIHZv
aWQgc3RvcEFsbG9jYXRpbmdGb3JHb29kKCk7CiAgICAgdm9pZCByZXN1bWVBbGxvY2F0aW5nKCk7
IC8vIElmIHdlIGp1c3Qgc3RvcHBlZCBhbGxvY2F0aW9uIGJ1dCB3ZSBkaWRuJ3QgZG8gYSBjb2xs
ZWN0aW9uLCB3ZSBuZWVkIHRvIHJlc3VtZSBhbGxvY2F0aW9uLgogICAgIAogICAgIHZvaWQgcHJl
cGFyZUZvck1hcmtpbmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
LmNwcAppbmRleCAyZDhiNjk4NjFlZDg3YmYzZjhjZDk1YjAxNTJkNzczNGMzOGEwN2M4Li4xM2M0
OGZjYjU2NTY5NDhhZTgwMjE4ZjJmZGUyYjM4MDk5ODU5ODhkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAi
SlNPYmplY3QuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKLSNpbmNsdWRlICJNYXJraW5nQ29uc3RyYWludFNvbHZlci5oIgogI2luY2x1ZGUgIlNsb3RW
aXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlN0b3BJZk5lY2Vzc2FyeVRpbWVyLmgiCiAjaW5j
bHVkZSAiU3VwZXJTYW1wbGVyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuaAppbmRleCAyYTc2ZDdkNTVmNTY1ZjU5YmJhNDBlNjAwZWYwNTYwMzIxY2NlNmI5Li5hNGU5
Y2M2YmUwYjZlNjUwMDBlYjExNjcyMGRlYjYxY2I3NzFiNzFhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJWaXNp
dFJhY2VLZXkuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9Nb25v
dG9uaWNUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDIsNyArNDEsNiBAQCBjbGFz
cyBIZWFwOwogY2xhc3MgSGVhcENlbGw7CiBjbGFzcyBIZWFwU25hcHNob3RCdWlsZGVyOwogY2xh
c3MgTWFya2VkQmxvY2s7Ci1jbGFzcyBNYXJraW5nQ29uc3RyYWludDsKIGNsYXNzIE1hcmtpbmdD
b25zdHJhaW50U29sdmVyOwogY2xhc3MgVW5jb25kaXRpb25hbEZpbmFsaXplcjsKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9TdWJzcGFjZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3Vic3BhY2Uu
aAppbmRleCBiYTNhMTRjNjNlYzcyODVkZDRkNGZlMmYzZWViN2I4YWQ5YTVmNGIxLi4xN2NjNGZl
ZjA4M2E5OWZhYjJmNDAxMjJmNjQxYzIwMzA1ODEzOWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TdWJzcGFjZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1N1YnNwYWNlLmgKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgIkFsbG9jYXRpb25G
YWlsdXJlTW9kZS5oIgogI2luY2x1ZGUgIkFsbG9jYXRvckZvck1vZGUuaCIKLSNpbmNsdWRlICJB
bGxvY2F0b3IuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUgIk1hcmtlZFNw
YWNlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtNTcsOCArNTYsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBmaW5pc2hTd2VlcChNYXJrZWRCbG9jazo6SGFuZGxlJiwgRnJlZUxp
c3QqKTsKICAgICB2b2lkIGRlc3Ryb3koVk0mLCBKU0NlbGwqKTsKIAotICAgIHZpcnR1YWwgQWxs
b2NhdG9yIGFsbG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQqIGFsbG9jYXRlKFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFs
bG9jYXRpb25GYWlsdXJlTW9kZSkgPSAwOworICAgIHZpcnR1YWwgQmxvY2tEaXJlY3RvcnkqIGFs
bG9jYXRvckZvcihzaXplX3QsIEFsbG9jYXRvckZvck1vZGUpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQqIGFsbG9jYXRlKHNpemVfdCwgR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVy
ZU1vZGUpID0gMDsKICAgICAKICAgICB2b2lkIHByZXBhcmVGb3JBbGxvY2F0aW9uKCk7CiAgICAg
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9UaHJlYWRMb2NhbENhY2hl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmViYmI3YTNkMTllMDJmYTFlZGUxNzQ3YWE4
ODQ1NzliZTkwMjg2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRocmVhZExv
Y2FsQ2FjaGUuaCIKLQotI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiVGhyZWFkTG9jYWxDYWNoZUxheW91dC5oIgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLVJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBUaHJl
YWRMb2NhbENhY2hlOjpjcmVhdGUoSGVhcCYgaGVhcCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFRocmVhZExvY2FsQ2FjaGUoaGVhcCkpOwotfQotCi1UaHJlYWRMb2NhbENhY2hlOjpUaHJl
YWRMb2NhbENhY2hlKEhlYXAmIGhlYXApCi0gICAgOiBtX2hlYXAoaGVhcCkKLXsKLSAgICBtX2Rh
dGEgPSBhbGxvY2F0ZURhdGEoKTsKLX0KLQotVGhyZWFkTG9jYWxDYWNoZTo6flRocmVhZExvY2Fs
Q2FjaGUoKQotewotICAgIGRlc3Ryb3lEYXRhKG1fZGF0YSk7Ci19Ci0KLVRocmVhZExvY2FsQ2Fj
aGU6OkRhdGEqIFRocmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRlRGF0YSgpCi17Ci0gICAgc2l6ZV90
IG9sZFNpemUgPSBtX2RhdGEgPyBtX2RhdGEtPnNpemUgOiAwOwotICAgIFRocmVhZExvY2FsQ2Fj
aGVMYXlvdXQ6OlNuYXBzaG90IGxheW91dCA9IG1faGVhcC50aHJlYWRMb2NhbENhY2hlTGF5b3V0
KCkuc25hcHNob3QoKTsKLSAgICAKLSAgICBEYXRhKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxEYXRh
Kj4oZmFzdE1hbGxvYyhPQkpFQ1RfT0ZGU0VUT0YoRGF0YSwgYWxsb2NhdG9yKSArIGxheW91dC5z
aXplKSk7Ci0gICAgcmVzdWx0LT5zaXplID0gbGF5b3V0LnNpemU7Ci0gICAgcmVzdWx0LT5jYWNo
ZSA9IHRoaXM7Ci0gICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgb2xkU2l6ZTsg
b2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCi0gICAgICAgIG5ldyAoJmFsbG9jYXRv
cigqcmVzdWx0LCBvZmZzZXQpKSBMb2NhbEFsbG9jYXRvcihXVEZNb3ZlKGFsbG9jYXRvcigqbV9k
YXRhLCBvZmZzZXQpKSk7Ci0gICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gb2xkU2l6ZTsgb2Zmc2V0
IDwgbGF5b3V0LnNpemU7IG9mZnNldCArPSBzaXplb2YoTG9jYWxBbGxvY2F0b3IpKQotICAgICAg
ICBuZXcgKCZhbGxvY2F0b3IoKnJlc3VsdCwgb2Zmc2V0KSkgTG9jYWxBbGxvY2F0b3IobGF5b3V0
LmRpcmVjdG9yaWVzW29mZnNldCAvIHNpemVvZihMb2NhbEFsbG9jYXRvcildKTsKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi12b2lkIFRocmVhZExvY2FsQ2FjaGU6OmRlc3Ryb3lEYXRhKERhdGEq
IGRhdGEpCi17Ci0gICAgZm9yIChzaXplX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgZGF0YS0+c2l6
ZTsgb2Zmc2V0ICs9IHNpemVvZihMb2NhbEFsbG9jYXRvcikpCi0gICAgICAgIGFsbG9jYXRvcigq
ZGF0YSwgb2Zmc2V0KS5+TG9jYWxBbGxvY2F0b3IoKTsKLSAgICBmYXN0RnJlZShkYXRhKTsKLX0K
LQotdm9pZCBUaHJlYWRMb2NhbENhY2hlOjppbnN0YWxsU2xvdyhWTSYgdm0pCi17Ci0jaWYgRU5B
QkxFKEZBU1RfVExTX0pJVCkKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7Ci0g
ICAgc3RkOjpjYWxsX29uY2UoCi0gICAgICAgIG9uY2VGbGFnLAotICAgICAgICBbXSAoKSB7Ci0g
ICAgICAgICAgICBwdGhyZWFkX2tleV9pbml0X25wKHRsc0tleSwgZGVzdHJ1Y3Rvcik7Ci0gICAg
ICAgIH0pOwotI2VuZGlmCi0gICAgCi0gICAgcmVmKCk7Ci0gICAgCi0gICAgaWYgKFJlZlB0cjxU
aHJlYWRMb2NhbENhY2hlPiBvbGRDYWNoZSA9IGdldCh2bSkpCi0gICAgICAgIG9sZENhY2hlLT5k
ZXJlZigpOwotICAgIAotICAgIGluc3RhbGxEYXRhKHZtLCBtX2RhdGEpOwotfQotCi12b2lkIFRo
cmVhZExvY2FsQ2FjaGU6Omluc3RhbGxEYXRhKFZNJiB2bSwgRGF0YSogZGF0YSkKLXsKLSNpZiBF
TkFCTEUoRkFTVF9UTFNfSklUKQotICAgIFVOVVNFRF9QQVJBTSh2bSk7Ci0gICAgX3B0aHJlYWRf
c2V0c3BlY2lmaWNfZGlyZWN0KHRsc0tleSwgZGF0YSk7Ci0jZWxzZQotICAgIHZtLnRocmVhZExv
Y2FsQ2FjaGVEYXRhID0gZGF0YTsKLSNlbmRpZgotfQotCi1Mb2NhbEFsbG9jYXRvciYgVGhyZWFk
TG9jYWxDYWNoZTo6YWxsb2NhdG9yU2xvdyhWTSYgdm0sIHNpemVfdCBvZmZzZXQpCi17Ci0gICAg
RGF0YSogb2xkRGF0YSA9IG1fZGF0YTsKLSAgICBtX2RhdGEgPSBhbGxvY2F0ZURhdGEoKTsKLSAg
ICBkZXN0cm95RGF0YShvbGREYXRhKTsKLSAgICBpbnN0YWxsRGF0YSh2bSwgbV9kYXRhKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVChvZmZzZXQgPCBtX2RhdGEtPnNpemUpOwotICAgIHJldHVybiBhbGxv
Y2F0b3IoKm1fZGF0YSwgb2Zmc2V0KTsKLX0KLQotdm9pZCBUaHJlYWRMb2NhbENhY2hlOjpkZXN0
cnVjdG9yKHZvaWQqIGFyZykKLXsKLSAgICBpZiAoIWFyZykKLSAgICAgICAgcmV0dXJuOwotICAg
IERhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxEYXRhKj4oYXJnKTsKLSAgICBkYXRhLT5jYWNoZS0+
ZGVyZWYoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZjc5ZTk0MmNjZDVhYWE2NjI2MDVmYjMyMTBhOTJmNjg1OTQzZDBmZi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9UaHJlYWRMb2NhbENhY2hlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RUTFMu
aD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLWNsYXNzIEhlYXA7Ci1jbGFzcyBWTTsKLQotY2xhc3MgVGhyZWFkTG9jYWxDYWNoZSA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxUaHJlYWRMb2NhbENhY2hlPiB7Ci0gICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoVGhyZWFkTG9jYWxDYWNoZSk7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci0gICAgCi1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxUaHJlYWRMb2NhbENh
Y2hlPiBjcmVhdGUoSGVhcCYpOwotICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIH5UaHJlYWRM
b2NhbENhY2hlKCk7Ci0KLSAgICBzdGF0aWMgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+IGdldChW
TSYpOwotICAgIAotICAgIC8vIFRoaXMgaXMgZGVzaWduZWQgdG8gYmUgZmFzdCBlbm91Z2ggdGhh
dCB5b3UgY291bGQgZXZlbiBjYWxsIGl0IGJlZm9yZSBldmVyeSBhbGxvY2F0aW9uLCBieQotICAg
IC8vIG9wdGltaXppbmcgZm9yIHRoZSBjYXNlIHRoYXQgeW91J3JlIGp1c3QgaW5zdGFsbGluZyB0
aGUgY2FjaGUgdGhhdCBpcyBhbHJlYWR5IGluc3RhbGxlZC4gVGhpcwotICAgIC8vIGFzc3VtZXMg
YSByZWxhdGl2ZWx5IHNtYWxsIG51bWJlciBvZiBjYWNoZXMgb3IgbG93IGNoYW5jZSBvZiBhY3R1
YWwgY29udGV4dCBzd2l0Y2ggY29tYmluZWQKLSAgICAvLyB3aXRoIHBvc3NpYmx5IGhpZ2ggcmF0
ZSBvZiAiSSBtYXkgaGF2ZSBjb250ZXh0IHN3aXRjaGVkIiBzaXRlcyB0aGF0IGNhbGwgdGhpcyBv
dXQgb2YgcGFyYW5vaWEuCi0gICAgdm9pZCBpbnN0YWxsKFZNJik7Ci0gICAgCi0gICAgc3RhdGlj
IExvY2FsQWxsb2NhdG9yJiBhbGxvY2F0b3IoVk0mLCBzaXplX3Qgb2Zmc2V0KTsKLSAgICAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdWNjZXNzRnVuYywgdHlwZW5hbWUgRmFpbHVyZUZ1bmM+Ci0g
ICAgc3RhdGljIHZvaWQgdHJ5R2V0QWxsb2NhdG9yKFZNJiwgc2l6ZV90IG9mZnNldCwgY29uc3Qg
U3VjY2Vzc0Z1bmMmLCBjb25zdCBGYWlsdXJlRnVuYyYpOwotICAgIAotICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZTaXplSW5EYXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKERhdGEs
IHNpemUpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZpcnN0QWxsb2NhdG9ySW5E
YXRhKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKERhdGEsIGFsbG9jYXRvcik7IH0KLSAgICAK
LXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIFZNOwotICAgIAotICAgIFRocmVhZExvY2FsQ2Fj
aGUoSGVhcCYpOwotICAgIAotICAgIHN0cnVjdCBEYXRhIHsKLSAgICAgICAgc2l6ZV90IHNpemU7
Ci0gICAgICAgIFRocmVhZExvY2FsQ2FjaGUqIGNhY2hlOwotICAgICAgICBMb2NhbEFsbG9jYXRv
ciBhbGxvY2F0b3JbMV07Ci0gICAgfTsKLQotICAgIHN0YXRpYyBEYXRhKiBnZXRJbXBsKFZNJik7
Ci0gICAgCi0gICAgRGF0YSogYWxsb2NhdGVEYXRhKCk7Ci0gICAgdm9pZCBkZXN0cm95RGF0YShE
YXRhKik7Ci0gICAgc3RhdGljIExvY2FsQWxsb2NhdG9yJiBhbGxvY2F0b3IoRGF0YSYgZGF0YSwg
c2l6ZV90IG9mZnNldCk7Ci0KLSAgICB2b2lkIGluc3RhbGxTbG93KFZNJik7Ci0gICAgc3RhdGlj
IHZvaWQgaW5zdGFsbERhdGEoVk0mLCBEYXRhKik7Ci0gICAgCi0gICAgTG9jYWxBbGxvY2F0b3Im
IGFsbG9jYXRvclNsb3coVk0mLCBzaXplX3Qgb2Zmc2V0KTsKLSAgICAKLSAgICBzdGF0aWMgdm9p
ZCBkZXN0cnVjdG9yKHZvaWQqKTsKLSAgICAKLSAgICAvLyBXaGVuIGluc3RhbGxlZCwgd2UgcmVm
KCkgdGhlIGNhY2hlLiBVbmluc3RhbGxpbmcgZGVyZWYoKXMgdGhlIGNhY2hlLiBUTFMgZGVzdHJ1
Y3Rpb24gZGVyZWYoKXMKLSAgICAvLyB0aGUgY2FjaGUuIFdoZW4gdGhlIGNhY2hlIGlzIGRlc3Ry
dWN0ZWQsIGl0IG5lZWRzIHRvIHJldHVybiBhbGwgb2YgaXRzIHN0YXRlIHRvIHRoZSBHQy4gSQot
ICAgIC8vIHRoaW5rIHRoYXQganVzdCBtZWFucyBzdG9wQWxsb2NhdGluZygpLCBidXQgd2l0aCBz
b21lIHNlcmlvdXNseSBoZWF2eSBjYXZlYXRzIGhhdmluZyB0byBkbwotICAgIC8vIHdpdGggd2hl
biBpdCdzIHZhbGlkIHRvIG1ha2UgdGhhdCBjYWxsLiBBbHRlcm5hdGl2ZWx5LCB3ZSBjb3VsZCBS
RUxFQVNFX0FTU0VSVCB0aGF0IHRoZSBjYWNoZQotICAgIC8vIGlzIGVtcHR5IHdoZW4gd2UgZGVz
dHJ1Y3QgaXQuIFRoaXMgaXMgY29ycmVjdCBmb3IgY2FjaGVzIHRoYXQgYXJlIGtlcHQgbGl2ZSBi
eSBHQyBvYmplY3RzIGFuZAotICAgIC8vIGl0J3MgY29ycmVjdCBmb3IgaW1tb3J0YWwgY2FjaGVz
LgotICAgIEhlYXAmIG1faGVhcDsKLSAgICBEYXRhKiBtX2RhdGEgeyBudWxscHRyIH07Ci0KLSNp
ZiBFTkFCTEUoRkFTVF9UTFNfSklUKQotICAgIHN0YXRpYyBjb25zdCBwdGhyZWFkX2tleV90IHRs
c0tleSA9IFdURl9HQ19UTENfS0VZOwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MK
LQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNo
ZUlubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2FjaGVJ
bmxpbmVzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmYTUyNDQzNWM2YTUzNWRk
ZGU4YmE2NDZmY2EwMzBlOTc2ZTRlMzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNo
ZUlubGluZXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
ICJUaHJlYWRMb2NhbENhY2hlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1pbmxpbmUgVGhyZWFk
TG9jYWxDYWNoZTo6RGF0YSogVGhyZWFkTG9jYWxDYWNoZTo6Z2V0SW1wbChWTSYgdm0pCi17Ci0j
aWYgRU5BQkxFKEZBU1RfVExTX0pJVCkKLSAgICBVTlVTRURfUEFSQU0odm0pOwotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxEYXRhKj4oX3B0aHJlYWRfZ2V0c3BlY2lmaWNfZGlyZWN0KHRsc0tleSkp
OwotI2Vsc2UKLSAgICByZXR1cm4gdm0udGhyZWFkTG9jYWxDYWNoZURhdGE7Ci0jZW5kaWYKLX0K
LQotaW5saW5lIFJlZlB0cjxUaHJlYWRMb2NhbENhY2hlPiBUaHJlYWRMb2NhbENhY2hlOjpnZXQo
Vk0mIHZtKQotewotICAgIFRocmVhZExvY2FsQ2FjaGU6OkRhdGEqIGRhdGEgPSBnZXRJbXBsKHZt
KTsKLSAgICBpZiAoTElLRUxZKGRhdGEpKQotICAgICAgICByZXR1cm4gZGF0YS0+Y2FjaGU7Ci0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWlubGluZSB2b2lkIFRocmVhZExvY2FsQ2FjaGU6Omlu
c3RhbGwoVk0mIHZtKQotewotICAgIGlmIChnZXRJbXBsKHZtKSA9PSBtX2RhdGEpCi0gICAgICAg
IHJldHVybjsKLSAgICBpbnN0YWxsU2xvdyh2bSk7Ci19Ci0KLWlubGluZSBMb2NhbEFsbG9jYXRv
ciYgVGhyZWFkTG9jYWxDYWNoZTo6YWxsb2NhdG9yKFZNJiB2bSwgc2l6ZV90IG9mZnNldCkKLXsK
LSAgICBUaHJlYWRMb2NhbENhY2hlOjpEYXRhKiBkYXRhID0gZ2V0SW1wbCh2bSk7Ci0gICAgaWYg
KExJS0VMWShvZmZzZXQgPCBkYXRhLT5zaXplKSkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRvcigq
ZGF0YSwgb2Zmc2V0KTsKLSAgICByZXR1cm4gZGF0YS0+Y2FjaGUtPmFsbG9jYXRvclNsb3codm0s
IG9mZnNldCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFN1Y2Nlc3NGdW5jLCB0eXBlbmFtZSBG
YWlsdXJlRnVuYz4KLXZvaWQgVGhyZWFkTG9jYWxDYWNoZTo6dHJ5R2V0QWxsb2NhdG9yKFZNJiB2
bSwgc2l6ZV90IG9mZnNldCwgY29uc3QgU3VjY2Vzc0Z1bmMmIHN1Y2Nlc3NGdW5jLCBjb25zdCBG
YWlsdXJlRnVuYyYgZmFpbHVyZUZ1bmMpCi17Ci0gICAgVGhyZWFkTG9jYWxDYWNoZTo6RGF0YSog
ZGF0YSA9IGdldEltcGwodm0pOwotICAgIGlmIChMSUtFTFkob2Zmc2V0IDwgZGF0YS0+c2l6ZSkp
Ci0gICAgICAgIHN1Y2Nlc3NGdW5jKGFsbG9jYXRvcigqZGF0YSwgb2Zmc2V0KSk7Ci0gICAgZWxz
ZQotICAgICAgICBmYWlsdXJlRnVuYygpOwotfQotCi1pbmxpbmUgTG9jYWxBbGxvY2F0b3ImIFRo
cmVhZExvY2FsQ2FjaGU6OmFsbG9jYXRvcihEYXRhJiBkYXRhLCBzaXplX3Qgb2Zmc2V0KQotewot
ICAgIHJldHVybiAqYml0d2lzZV9jYXN0PExvY2FsQWxsb2NhdG9yKj4oYml0d2lzZV9jYXN0PGNo
YXIqPigmZGF0YS5hbGxvY2F0b3JbMF0pICsgb2Zmc2V0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2Fs
Q2FjaGVMYXlvdXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxD
YWNoZUxheW91dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxYWM4N2ZiNWEz
MjFmNzVjZDFiYzBlNTlkNmQzODEyYjA4ZDI3MmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9j
YWxDYWNoZUxheW91dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hlTGF5b3V0LmgiCi0KLSNpbmNsdWRlICJCbG9j
a0RpcmVjdG9yeS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotVGhyZWFkTG9jYWxDYWNoZUxheW91
dDo6VGhyZWFkTG9jYWxDYWNoZUxheW91dCgpCi17Ci19Ci0KLVRocmVhZExvY2FsQ2FjaGVMYXlv
dXQ6On5UaHJlYWRMb2NhbENhY2hlTGF5b3V0KCkKLXsKLX0KLQotdm9pZCBUaHJlYWRMb2NhbENh
Y2hlTGF5b3V0OjphbGxvY2F0ZU9mZnNldChCbG9ja0RpcmVjdG9yeSogZGlyZWN0b3J5KQotewot
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKLSAgICBkaXJlY3RvcnktPm1fdGxj
T2Zmc2V0ID0gbV9zaXplOwotICAgIG1fc2l6ZSArPSBzaXplb2YoTG9jYWxBbGxvY2F0b3IpOwot
ICAgIG1fZGlyZWN0b3JpZXMuYXBwZW5kKGRpcmVjdG9yeSk7Ci19Ci0KLVRocmVhZExvY2FsQ2Fj
aGVMYXlvdXQ6OlNuYXBzaG90IFRocmVhZExvY2FsQ2FjaGVMYXlvdXQ6OnNuYXBzaG90KCkKLXsK
LSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Ci0gICAgU25hcHNob3QgcmVzdWx0
OwotICAgIHJlc3VsdC5zaXplID0gbV9zaXplOwotICAgIHJlc3VsdC5kaXJlY3RvcmllcyA9IG1f
ZGlyZWN0b3JpZXM7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotQmxvY2tEaXJlY3RvcnkqIFRo
cmVhZExvY2FsQ2FjaGVMYXlvdXQ6OmRpcmVjdG9yeSh1bnNpZ25lZCBvZmZzZXQpCi17Ci0gICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwotICAgIHJldHVybiBtX2RpcmVjdG9yaWVz
W29mZnNldCAvIHNpemVvZihMb2NhbEFsbG9jYXRvcildOwotfQotCi19IC8vIG5hbWVzcGFjZSBK
U0MKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxD
YWNoZUxheW91dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVGhyZWFkTG9jYWxDYWNo
ZUxheW91dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWVhMWI2OWYwYjdhNDcx
MDIyY2NmNmYwYzUwOGQ5MGI5MWFhYzY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1RocmVhZExvY2FsQ2Fj
aGVMYXlvdXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
IDx3dGYvRmFzdE1hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Ci0jaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgSlND
IHsKLQotY2xhc3MgQmxvY2tEaXJlY3Rvcnk7Ci0KLS8vIEVhY2ggSGVhcCBoYXMgYSBUaHJlYWRM
b2NhbENhY2hlTGF5b3V0IHRoYXQgaGVscHMgdXMgZmlndXJlIG91dCBob3cgdG8gYWxsb2NhdGUg
YSBUaHJlYWRMb2NhbENhY2hlCi0vLyBmb3IgdGhhdCBIZWFwLgotCi1jbGFzcyBUaHJlYWRMb2Nh
bENhY2hlTGF5b3V0IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaHJlYWRMb2NhbENhY2hl
TGF5b3V0KTsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICAKLXB1YmxpYzoKLSAg
ICBUaHJlYWRMb2NhbENhY2hlTGF5b3V0KCk7Ci0gICAgflRocmVhZExvY2FsQ2FjaGVMYXlvdXQo
KTsKLQotICAgIC8vIEJsb2NrRGlyZWN0b3J5IGNhbGxzIHRoaXMgZHVyaW5nIGNyZWF0aW9uIGFu
ZCB0aGlzIGZpbGxzIGluIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXQuCi0gICAgdm9pZCBhbGxvY2F0
ZU9mZnNldChCbG9ja0RpcmVjdG9yeSopOwotICAgIAotICAgIHN0cnVjdCBTbmFwc2hvdCB7Ci0g
ICAgICAgIHNpemVfdCBzaXplOwotICAgICAgICBWZWN0b3I8QmxvY2tEaXJlY3RvcnkqPiBkaXJl
Y3RvcmllczsKLSAgICB9OwotICAgIAotICAgIFNuYXBzaG90IHNuYXBzaG90KCk7Ci0gICAgCi0g
ICAgQmxvY2tEaXJlY3RvcnkqIGRpcmVjdG9yeSh1bnNpZ25lZCBvZmZzZXQpOwotICAgIAotcHJp
dmF0ZToKLSAgICBMb2NrIG1fbG9jazsKLSAgICBzaXplX3QgbV9zaXplIHsgMCB9OwotICAgIFZl
Y3RvcjxCbG9ja0RpcmVjdG9yeSo+IG1fZGlyZWN0b3JpZXM7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBKU0MKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3Bw
CmluZGV4IDQ3NmQzMWI2ODMyN2U1YmQ0MTVjNTQ5ZjQxZDhiYjgwZDI5ZGU5MTAuLmI3NzE1ZGY0
NmVlYWYwNjNlYTE2ZGQwZDFhMmQ3YTBiMmMxZDAyNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01ODIsMTAzICs1ODIsNiBAQCB2b2lk
IEFzc2VtYmx5SGVscGVyczo6ZW1pdFJhbmRvbVRodW5rKFZNJiB2bSwgR1BSUmVnIHNjcmF0Y2gw
LCBHUFJSZWcgc2NyYXRjaDEsCiB9CiAjZW5kaWYKIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVt
aXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9yKEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJ
VEFsbG9jYXRvciYgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRj
aEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQotewotICAgIC8vIE5PVEU6IFRoaXMgaXMgY2FyZWZ1
bGx5IHdyaXR0ZW4gc28gdGhhdCB3ZSBjYW4gY2FsbCBpdCB3aGlsZSB3ZSBkaXNhbGxvdyBzY3Jh
dGNoCi0gICAgLy8gcmVnaXN0ZXIgdXNhZ2UuCi0gICAgICAgIAotICAgIGlmIChPcHRpb25zOjpm
b3JjZUdDU2xvd1BhdGhzKCkpIHsKLSAgICAgICAgc2xvd1BhdGguYXBwZW5kKGp1bXAoKSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgSnVtcCBwb3BQYXRoOwotICAgIEp1bXAg
ZG9uZTsKLSAgICAKLSNpZiBFTkFCTEUoRkFTVF9UTFNfSklUKQotICAgIGxvYWRGcm9tVExTUHRy
KGZhc3RUTFNPZmZzZXRGb3JLZXkoV1RGX0dDX1RMQ19LRVkpLCBzY3JhdGNoR1BSKTsKLSNlbHNl
Ci0gICAgbG9hZFB0cigmdm0oKS50aHJlYWRMb2NhbENhY2hlRGF0YSwgc2NyYXRjaEdQUik7Ci0j
ZW5kaWYKLSAgICBpZiAoYWxsb2NhdG9yLmlzQ29uc3RhbnQoKSkgewotICAgICAgICBzbG93UGF0
aC5hcHBlbmQoYnJhbmNoMzIoQmVsb3dPckVxdWFsLCBBZGRyZXNzKHNjcmF0Y2hHUFIsIFRocmVh
ZExvY2FsQ2FjaGU6Om9mZnNldE9mU2l6ZUluRGF0YSgpKSwgVHJ1c3RlZEltbTMyKGFsbG9jYXRv
ci5hbGxvY2F0b3IoKS5vZmZzZXQoKSkpKTsKLSAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihU
aHJlYWRMb2NhbENhY2hlOjpvZmZzZXRPZkZpcnN0QWxsb2NhdG9ySW5EYXRhKCkgKyBhbGxvY2F0
b3IuYWxsb2NhdG9yKCkub2Zmc2V0KCkpLCBzY3JhdGNoR1BSLCBhbGxvY2F0b3JHUFIpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2gzMihCZWxvd09yRXF1YWws
IEFkZHJlc3Moc2NyYXRjaEdQUiwgVGhyZWFkTG9jYWxDYWNoZTo6b2Zmc2V0T2ZTaXplSW5EYXRh
KCkpLCBhbGxvY2F0b3JHUFIpKTsKLSAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihUaHJlYWRM
b2NhbENhY2hlOjpvZmZzZXRPZkZpcnN0QWxsb2NhdG9ySW5EYXRhKCkpLCBhbGxvY2F0b3JHUFIp
OwotICAgICAgICBhZGRQdHIoc2NyYXRjaEdQUiwgYWxsb2NhdG9yR1BSKTsKLSAgICB9Ci0KLSAg
ICBsb2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZy
ZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcoKSksIHJlc3VsdEdQUik7Ci0g
ICAgcG9wUGF0aCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXN1bHRHUFIpOwotICAgIGlmIChhbGxv
Y2F0b3IuaXNDb25zdGFudCgpKQotICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoLWFsbG9jYXRv
ci5hbGxvY2F0b3IoKS5jZWxsU2l6ZSh2bSgpLmhlYXApKSwgcmVzdWx0R1BSLCBzY3JhdGNoR1BS
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKGlzWDg2KCkpIHsKLSAgICAgICAgICAgIG1vdmUo
cmVzdWx0R1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIHN1YjMyKEFkZHJlc3MoYWxsb2Nh
dG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZDZWxsU2l6ZSgpKSwgc2NyYXRjaEdQUik7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhhbGxvY2F0b3JH
UFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkNlbGxTaXplKCkpLCBzY3JhdGNoR1BSKTsKLSAg
ICAgICAgICAgIHN1YjMyKHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgbmVnUHRyKHJlc3VsdEdQUik7Ci0gICAgc3RvcmUzMihzY3JhdGNo
R1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxp
c3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmluZygpKSk7Ci0gICAgQWRkcmVzcyBwYXls
b2FkRW5kQWRkciA9IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0
T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mUGF5bG9hZEVuZCgpKTsKLSAgICBpZiAo
aXNYODYoKSkKLSAgICAgICAgYWRkUHRyKHBheWxvYWRFbmRBZGRyLCByZXN1bHRHUFIpOwotICAg
IGVsc2UgewotICAgICAgICBsb2FkUHRyKHBheWxvYWRFbmRBZGRyLCBzY3JhdGNoR1BSKTsKLSAg
ICAgICAgYWRkUHRyKHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Ci0gICAgfQotICAgICAgICAKLSAg
ICBkb25lID0ganVtcCgpOwotICAgICAgICAKLSAgICBwb3BQYXRoLmxpbmsodGhpcyk7Ci0gICAg
ICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpv
ZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkpLCBy
ZXN1bHRHUFIpOwotICAgIGlmIChpc1g4NigpKQotICAgICAgICB4b3JQdHIoQWRkcmVzcyhhbGxv
Y2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6
b2Zmc2V0T2ZTZWNyZXQoKSksIHJlc3VsdEdQUik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0
KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTZWNyZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICB4
b3JQdHIoc2NyYXRjaEdQUiwgcmVzdWx0R1BSKTsKLSAgICB9Ci0gICAgc2xvd1BhdGguYXBwZW5k
KGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0R1BSKSk7Ci0gICAgICAgIAotICAgIC8vIFRoZSBv
YmplY3QgaXMgaGFsZi1hbGxvY2F0ZWQ6IHdlIGhhdmUgd2hhdCB3ZSBrbm93IGlzIGEgZnJlc2gg
b2JqZWN0LCBidXQKLSAgICAvLyBpdCdzIHN0aWxsIG9uIHRoZSBHQydzIGZyZWUgbGlzdC4KLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7Ci0gICAgc3RvcmVQdHIo
c2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRP
ZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTY3JhbWJsZWRIZWFkKCkpKTsKLSAgICAg
ICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotfQotCi12b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1p
dEFsbG9jYXRlKEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYgYWxsb2NhdG9y
LCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQ
YXRoKQotewotICAgIGlmIChhbGxvY2F0b3IuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgIGlmICgh
YWxsb2NhdG9yLmFsbG9jYXRvcigpKSB7Ci0gICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoanVt
cCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbWl0QWxs
b2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcihyZXN1bHRHUFIsIGFsbG9jYXRvciwgYWxsb2NhdG9y
R1BSLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7Ci19Ci0KLXZvaWQgQXNzZW1ibHlIZWxwZXJzOjpl
bWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkKEdQUlJlZyByZXN1bHRHUFIsIENvbXBsZXRlU3Vic3Bh
Y2UmIHN1YnNwYWNlLCBHUFJSZWcgYWxsb2NhdGlvblNpemUsIEdQUlJlZyBzY3JhdGNoR1BSMSwg
R1BSUmVnIHNjcmF0Y2hHUFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgpCi17Ci0gICAgc3RhdGljX2Fz
c2VydCghKE1hcmtlZFNwYWNlOjpzaXplU3RlcCAmIChNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgLSAx
KSksICJNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKLSAg
ICAKLSAgICB1bnNpZ25lZCBzdGVwU2hpZnQgPSBnZXRMU0JTZXQoTWFya2VkU3BhY2U6OnNpemVT
dGVwKTsKLSAgICAKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoTWFya2VkU3BhY2U6OnNpemVTdGVw
IC0gMSksIGFsbG9jYXRpb25TaXplLCBzY3JhdGNoR1BSMSk7Ci0gICAgdXJzaGlmdDMyKFRydXN0
ZWRJbW0zMihzdGVwU2hpZnQpLCBzY3JhdGNoR1BSMSk7Ci0gICAgc2xvd1BhdGguYXBwZW5kKGJy
YW5jaDMyKEFib3ZlLCBzY3JhdGNoR1BSMSwgVHJ1c3RlZEltbTMyKE1hcmtlZFNwYWNlOjpsYXJn
ZUN1dG9mZiA+PiBzdGVwU2hpZnQpKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKHN1YnNwYWNl
LmFsbG9jYXRvckZvclNpemVTdGVwKCkgLSAxKSwgc2NyYXRjaEdQUjIpOwotICAgIGxvYWQzMihC
YXNlSW5kZXgoc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIxLCBUaW1lc0ZvdXIpLCBzY3JhdGNoR1BS
MSk7Ci0gICAgCi0gICAgZW1pdEFsbG9jYXRlKHJlc3VsdEdQUiwgSklUQWxsb2NhdG9yOjp2YXJp
YWJsZSgpLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKLX0KLQogdm9pZCBB
c3NlbWJseUhlbHBlcnM6OnJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIoRW50cnlGcmFtZSomIHRvcEVudHJ5RnJhbWUpCiB7CiAjaWYgTlVNQkVSX09GX0NB
TExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuaAppbmRleCA0MDNhMTE0YTMxM2I1ZGFlMTA1NGNlYWQxZWQyMDc5OGNlNzZm
MTg0Li5lZTU3MzJhNjQzMGI5ODliMzVhN2NmMDViYzg1MjE3N2E4NjNjNDYyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw3ICszMiw2IEBA
CiAjaW5jbHVkZSAiR1BSSW5mby5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJJbmxp
bmVDYWxsRnJhbWUuaCIKLSNpbmNsdWRlICJKSVRBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJKSVRD
b2RlLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJNYXJrZWRTcGFj
ZS5oIgpAQCAtNjAsNyArNTksNiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jazsgfQotICAgIFZNJiB2bSgpIHsgcmV0dXJu
ICptX2NvZGVCbG9jay0+dm0oKTsgfQogICAgIEFzc2VtYmxlclR5cGVfVCYgYXNzZW1ibGVyKCkg
eyByZXR1cm4gbV9hc3NlbWJsZXI7IH0KIAogICAgIHZvaWQgY2hlY2tTdGFja1BvaW50ZXJBbGln
bm1lbnQoKQpAQCAtMTQ5MywyMSArMTQ5MSw4MCBAQCBwdWJsaWM6CiAKICAgICAvLyBDYWxsIHRo
aXMgaWYgeW91IGtub3cgdGhhdCB0aGUgdmFsdWUgaGVsZCBpbiBhbGxvY2F0b3JHUFIgaXMgbm9u
LW51bGwuIFRoaXMgRE9FUyBOT1QgbWVhbgogICAgIC8vIHRoYXQgYWxsb2NhdG9yIGlzIG5vbi1u
dWxsOyBhbGxvY2F0b3IgY2FuIGJlIG51bGwgYXMgYSBzaWduYWwgdGhhdCB3ZSBkb24ndCBrbm93
IHdoYXQgdGhlCi0gICAgLy8gdmFsdWUgb2YgYWxsb2NhdG9yR1BSIGlzLiBBZGRpdGlvbmFsbHks
IGlmIHRoZSBhbGxvY2F0b3IgaXMgbm90IG51bGwsIHRoZW4gdGhlcmUgaXMgbm8gbmVlZAotICAg
IC8vIHRvIHBvcHVsYXRlIGFsbG9jYXRvckdQUiAtIHRoaXMgY29kZSB3aWxsIGlnbm9yZSB0aGUg
Y29udGVudHMgb2YgYWxsb2NhdG9yR1BSLgotICAgIHZvaWQgZW1pdEFsbG9jYXRlV2l0aE5vbk51
bGxBbGxvY2F0b3IoR1BSUmVnIHJlc3VsdEdQUiwgY29uc3QgSklUQWxsb2NhdG9yJiBhbGxvY2F0
b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xv
d1BhdGgpOworICAgIC8vIHZhbHVlIG9mIGFsbG9jYXRvckdQUiBpcy4KKyAgICB2b2lkIGVtaXRB
bGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9yKEdQUlJlZyByZXN1bHRHUFIsIEJsb2NrRGlyZWN0
b3J5KiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBK
dW1wTGlzdCYgc2xvd1BhdGgpCisgICAgeworICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGNhcmVm
dWxseSB3cml0dGVuIHNvIHRoYXQgd2UgY2FuIGNhbGwgaXQgd2hpbGUgd2UgZGlzYWxsb3cgc2Ny
YXRjaAorICAgICAgICAvLyByZWdpc3RlciB1c2FnZS4KKyAgICAgICAgCisgICAgICAgIGlmIChP
cHRpb25zOjpmb3JjZUdDU2xvd1BhdGhzKCkpIHsKKyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChqdW1wKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBKdW1wIHBvcFBhdGg7CisgICAgICAgIEp1bXAgZG9uZTsKKyAgICAgICAgCisgICAgICAg
IGxvYWQzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mRnJl
ZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlJlbWFpbmluZygpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgcG9wUGF0aCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXN1bHRHUFIpOworICAgICAgICBp
ZiAoYWxsb2NhdG9yKQorICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKC1hbGxvY2F0b3It
PmNlbGxTaXplKCkpLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIGlmIChpc1g4NigpKSB7CisgICAgICAgICAgICAgICAgbW92ZShyZXN1bHRHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIHN1YjMyKEFkZHJlc3MoYWxsb2NhdG9yR1BS
LCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZDZWxsU2l6ZSgpKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxvYWQzMihBZGRyZXNzKGFsbG9jYXRv
ckdQUiwgQmxvY2tEaXJlY3Rvcnk6Om9mZnNldE9mQ2VsbFNpemUoKSksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgIHN1YjMyKHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbmVnUHRyKHJlc3VsdEdQUik7Cisg
ICAgICAgIHN0b3JlMzIoc2NyYXRjaEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGly
ZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmco
KSkpOworICAgICAgICBBZGRyZXNzIHBheWxvYWRFbmRBZGRyID0gQWRkcmVzcyhhbGxvY2F0b3JH
UFIsIEJsb2NrRGlyZWN0b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0
T2ZQYXlsb2FkRW5kKCkpOworICAgICAgICBpZiAoaXNYODYoKSkKKyAgICAgICAgICAgIGFkZFB0
cihwYXlsb2FkRW5kQWRkciwgcmVzdWx0R1BSKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBsb2FkUHRyKHBheWxvYWRFbmRBZGRyLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGFkZFB0
cihzY3JhdGNoR1BSLCByZXN1bHRHUFIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBk
b25lID0ganVtcCgpOworICAgICAgICAKKyAgICAgICAgcG9wUGF0aC5saW5rKHRoaXMpOworICAg
ICAgICAKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgQmxvY2tEaXJlY3Rv
cnk6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNjcmFtYmxlZEhlYWQo
KSksIHJlc3VsdEdQUik7CisgICAgICAgIGlmIChpc1g4NigpKQorICAgICAgICAgICAgeG9yUHRy
KEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlzdCgp
ICsgRnJlZUxpc3Q6Om9mZnNldE9mU2VjcmV0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIEJsb2NrRGlyZWN0
b3J5OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZTZWNyZXQoKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgeG9yUHRyKHNjcmF0Y2hHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgIH0KKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVz
dWx0R1BSKSk7CisgICAgICAgIAorICAgICAgICAvLyBUaGUgb2JqZWN0IGlzIGhhbGYtYWxsb2Nh
dGVkOiB3ZSBoYXZlIHdoYXQgd2Uga25vdyBpcyBhIGZyZXNoIG9iamVjdCwgYnV0CisgICAgICAg
IC8vIGl0J3Mgc3RpbGwgb24gdGhlIEdDJ3MgZnJlZSBsaXN0LgorICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVzdWx0R1BSKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHN0b3JlUHRyKHNjcmF0Y2hH
UFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBCbG9ja0RpcmVjdG9yeTo6b2Zmc2V0T2ZGcmVlTGlz
dCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2NyYW1ibGVkSGVhZCgpKSk7CisgICAgICAgIAorICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CisgICAgfQogICAgIAotICAgIHZvaWQgZW1pdEFsbG9jYXRl
KEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYgYWxsb2NhdG9yLCBHUFJSZWcg
YWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKTsKKyAg
ICB2b2lkIGVtaXRBbGxvY2F0ZShHUFJSZWcgcmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9yeSogYWxs
b2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3Qm
IHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgaWYgKCFhbGxvY2F0b3IpCisgICAgICAgICAgICBz
bG93UGF0aC5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCBhbGxvY2F0b3JHUFIpKTsKKyAgICAg
ICAgZW1pdEFsbG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0b3IocmVzdWx0R1BSLCBhbGxvY2F0b3Is
IGFsbG9jYXRvckdQUiwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOworICAgIH0KICAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPgotICAgIHZvaWQgZW1pdEFsbG9jYXRlSlND
ZWxsKEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYgYWxsb2NhdG9yLCBHUFJS
ZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgR1BSUmVnIHNjcmF0Y2hH
UFIsIEp1bXBMaXN0JiBzbG93UGF0aCkKKyAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTQ2VsbChHUFJS
ZWcgcmVzdWx0R1BSLCBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9y
R1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0
JiBzbG93UGF0aCkKICAgICB7CiAgICAgICAgIGVtaXRBbGxvY2F0ZShyZXN1bHRHUFIsIGFsbG9j
YXRvciwgYWxsb2NhdG9yR1BSLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAgICAgICAgIGVtaXRT
dG9yZVN0cnVjdHVyZVdpdGhUeXBlSW5mbyhzdHJ1Y3R1cmUsIHJlc3VsdEdQUiwgc2NyYXRjaEdQ
Uik7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFN0cnVjdHVyZVR5cGUsIHR5
cGVuYW1lIFN0b3JhZ2VUeXBlLCB0eXBlbmFtZSBNYXNrVHlwZT4KLSAgICB2b2lkIGVtaXRBbGxv
Y2F0ZUpTT2JqZWN0KEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYgYWxsb2Nh
dG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVyZSwgU3RvcmFn
ZVR5cGUgc3RvcmFnZSwgTWFza1R5cGUgbWFzaywgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0
JiBzbG93UGF0aCkKKyAgICB2b2lkIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KEdQUlJlZyByZXN1bHRH
UFIsIEJsb2NrRGlyZWN0b3J5KiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIFN0cnVj
dHVyZVR5cGUgc3RydWN0dXJlLCBTdG9yYWdlVHlwZSBzdG9yYWdlLCBNYXNrVHlwZSBtYXNrLCBH
UFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKQogICAgIHsKICAgICAgICAgZW1p
dEFsbG9jYXRlSlNDZWxsKHJlc3VsdEdQUiwgYWxsb2NhdG9yLCBhbGxvY2F0b3JHUFIsIHN0cnVj
dHVyZSwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwogICAgICAgICBzdG9yZVB0cihzdG9yYWdlLCBB
ZGRyZXNzKHJlc3VsdEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CkBAIC0xNTE5
LDggKzE1NzYsMTMgQEAgcHVibGljOgogICAgICAgICBWTSYgdm0sIEdQUlJlZyByZXN1bHRHUFIs
IFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBTdG9yYWdlVHlwZSBzdG9yYWdlLCBNYXNrVHlwZSBt
YXNrLCBHUFJSZWcgc2NyYXRjaEdQUjEsCiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMiwgSnVt
cExpc3QmIHNsb3dQYXRoLCBzaXplX3Qgc2l6ZSkKICAgICB7Ci0gICAgICAgIEFsbG9jYXRvciBh
bGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxDbGFzc1R5cGU+KHZtKS0+YWxsb2NhdG9yRm9yTm9uVmly
dHVhbChzaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7Ci0gICAgICAg
IGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdEdQUiwgSklUQWxsb2NhdG9yOjpjb25zdGFudChh
bGxvY2F0b3IpLCBzY3JhdGNoR1BSMSwgc3RydWN0dXJlLCBzdG9yYWdlLCBtYXNrLCBzY3JhdGNo
R1BSMiwgc2xvd1BhdGgpOworICAgICAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9yID0gc3Vi
c3BhY2VGb3I8Q2xhc3NUeXBlPih2bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZSwgQWxs
b2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworICAgICAgICBpZiAoIWFsbG9jYXRv
cikgeworICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGp1bXAoKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvciks
IHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0R1BSLCBh
bGxvY2F0b3IsIHNjcmF0Y2hHUFIxLCBzdHJ1Y3R1cmUsIHN0b3JhZ2UsIG1hc2ssIHNjcmF0Y2hH
UFIyLCBzbG93UGF0aCk7CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNz
VHlwZSwgdHlwZW5hbWUgU3RydWN0dXJlVHlwZSwgdHlwZW5hbWUgU3RvcmFnZVR5cGUsIHR5cGVu
YW1lIE1hc2tUeXBlPgpAQCAtMTUzMSw3ICsxNTkzLDIwIEBAIHB1YmxpYzoKICAgICAKICAgICAv
LyBhbGxvY2F0aW9uU2l6ZSBjYW4gYmUgYWxpYXNlZCB3aXRoIGFueSBvZiB0aGUgb3RoZXIgaW5w
dXQgR1BScy4gSWYgaXQncyBub3QgYWxpYXNlZCB0aGVuIGl0CiAgICAgLy8gd29uJ3QgYmUgY2xv
YmJlcmVkLgotICAgIHZvaWQgZW1pdEFsbG9jYXRlVmFyaWFibGVTaXplZChHUFJSZWcgcmVzdWx0
R1BSLCBDb21wbGV0ZVN1YnNwYWNlJiBzdWJzcGFjZSwgR1BSUmVnIGFsbG9jYXRpb25TaXplLCBH
UFJSZWcgc2NyYXRjaEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgSnVtcExpc3QmIHNsb3dQYXRo
KTsKKyAgICB2b2lkIGVtaXRBbGxvY2F0ZVZhcmlhYmxlU2l6ZWQoR1BSUmVnIHJlc3VsdEdQUiwg
Q29tcGxldGVTdWJzcGFjZSYgc3Vic3BhY2UsIEdQUlJlZyBhbGxvY2F0aW9uU2l6ZSwgR1BSUmVn
IHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIEp1bXBMaXN0JiBzbG93UGF0aCkKKyAg
ICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgJiAoTWFy
a2VkU3BhY2U6OnNpemVTdGVwIC0gMSkpLCAiTWFya2VkU3BhY2U6OnNpemVTdGVwIG11c3QgYmUg
YSBwb3dlciBvZiB0d28uIik7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBzdGVwU2hpZnQg
PSBnZXRMU0JTZXQoTWFya2VkU3BhY2U6OnNpemVTdGVwKTsKKyAgICAgICAgCisgICAgICAgIGFk
ZDMyKFRydXN0ZWRJbW0zMihNYXJrZWRTcGFjZTo6c2l6ZVN0ZXAgLSAxKSwgYWxsb2NhdGlvblNp
emUsIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgdXJzaGlmdDMyKFRydXN0ZWRJbW0zMihzdGVwU2hp
ZnQpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2gzMihBYm92
ZSwgc2NyYXRjaEdQUjEsIFRydXN0ZWRJbW0zMihNYXJrZWRTcGFjZTo6bGFyZ2VDdXRvZmYgPj4g
c3RlcFNoaWZ0KSkpOworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoc3Vic3BhY2UuYWxsb2Nh
dG9yRm9yU2l6ZVN0ZXAoKSAtIDEpLCBzY3JhdGNoR1BSMik7CisgICAgICAgIGxvYWRQdHIoQmFz
ZUluZGV4KHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMSwgdGltZXNQdHIoKSksIHNjcmF0Y2hHUFIx
KTsKKyAgICAgICAgCisgICAgICAgIGVtaXRBbGxvY2F0ZShyZXN1bHRHUFIsIG51bGxwdHIsIHNj
cmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2xvd1BhdGgpOworICAgIH0KICAgICAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGUsIHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+CiAgICAgdm9p
ZCBlbWl0QWxsb2NhdGVWYXJpYWJsZVNpemVkQ2VsbChWTSYgdm0sIEdQUlJlZyByZXN1bHRHUFIs
IFN0cnVjdHVyZVR5cGUgc3RydWN0dXJlLCBHUFJSZWcgYWxsb2NhdGlvblNpemUsIEdQUlJlZyBz
Y3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hHUFIyLCBKdW1wTGlzdCYgc2xvd1BhdGgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFsbG9jYXRvci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBbGxvY2F0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDUxYzc2ZWFkNzA3ODFlZDc3NGIyN2NiNjg5MGFkYTRmNWFiYzQ0Ny4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFsbG9jYXRvci5oCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIkFsbG9jYXRvci5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3Mg
SklUQWxsb2NhdG9yIHsKLXB1YmxpYzoKLSAgICBlbnVtIEtpbmQgewotICAgICAgICBDb25zdGFu
dCwKLSAgICAgICAgVmFyaWFibGUKLSAgICB9OwotICAgIAotICAgIEpJVEFsbG9jYXRvcigpIHsg
fQotICAgIAotICAgIHN0YXRpYyBKSVRBbGxvY2F0b3IgY29uc3RhbnQoQWxsb2NhdG9yIGFsbG9j
YXRvcikKLSAgICB7Ci0gICAgICAgIEpJVEFsbG9jYXRvciByZXN1bHQ7Ci0gICAgICAgIHJlc3Vs
dC5tX2tpbmQgPSBDb25zdGFudDsKLSAgICAgICAgcmVzdWx0Lm1fYWxsb2NhdG9yID0gYWxsb2Nh
dG9yOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgSklU
QWxsb2NhdG9yIHZhcmlhYmxlKCkKLSAgICB7Ci0gICAgICAgIEpJVEFsbG9jYXRvciByZXN1bHQ7
Ci0gICAgICAgIHJlc3VsdC5tX2tpbmQgPSBWYXJpYWJsZTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEpJVEFsbG9jYXRvciYg
b3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9raW5kID09IG90aGVyLm1fa2lu
ZAotICAgICAgICAgICAgJiYgbV9hbGxvY2F0b3IgPT0gb3RoZXIubV9hbGxvY2F0b3I7Ci0gICAg
fQotICAgIAotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBKSVRBbGxvY2F0b3ImIG90aGVyKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAg
ICAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiAqdGhpcyAhPSBKSVRBbGxvY2F0b3IoKTsKLSAgICB9Ci0gICAgCi0gICAgS2luZCBraW5k
KCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9Ci0gICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Qg
eyByZXR1cm4gbV9raW5kID09IENvbnN0YW50OyB9Ci0gICAgYm9vbCBpc1ZhcmlhYmxlKCkgY29u
c3QgeyByZXR1cm4gbV9raW5kID09IFZhcmlhYmxlOyB9Ci0gICAgCi0gICAgQWxsb2NhdG9yIGFs
bG9jYXRvcigpIGNvbnN0Ci0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0NvbnN0YW50
KCkpOwotICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3I7Ci0gICAgfQotICAgIAotcHJpdmF0ZToK
LSAgICBLaW5kIG1fa2luZCB7IENvbnN0YW50IH07Ci0gICAgQWxsb2NhdG9yIG1fYWxsb2NhdG9y
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCmluZGV4IDJhM2RlMGRiNDk4MjhlN2ZkZGE5NzcwZTY2Yzg5MjFmNjY5YWIw
OTUuLmEyYjZmNmQ3YzdkZTMyMzc2YjhlMDU3YmQ4MDg5YWU5YmFjNDEwYWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJvZ2Eu
Y29tPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtODEsMjMgKzgxLDIyIEBAIHZvaWQgSklUOjplbWl0
X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9iamVjdEFsbG9j
YXRpb25Qcm9maWxlLT5zdHJ1Y3R1cmUoKTsKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBK
U0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkp
OwotICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0Pigq
bV92bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZv
ck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKyAgICBCbG9ja0RpcmVjdG9yeSogYWxsb2NhdG9y
ID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1fdm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0
dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7
CiAKICAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwogICAgIFJlZ2lzdGVySUQgYWxs
b2NhdG9yUmVnID0gcmVnVDE7CiAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDI7CiAK
LSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICBhdXRvIGJ1dHRlcmZs
eSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgICAgIGF1dG8gbWFzayA9IFRydXN0ZWRJ
bW0zMigwKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxv
Y2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihz
dHJ1Y3R1cmUpLCBidXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0gICAg
ICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5s
aW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7
Ci0gICAgfQorICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcp
OworICAgIGlmIChhbGxvY2F0b3IpCisgICAgICAgIGFkZFNsb3dDYXNlKEp1bXAoKSk7CisgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihu
dWxscHRyKTsKKyAgICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7CisgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3QocmVzdWx0UmVnLCBhbGxvY2F0b3IsIGFsbG9jYXRvclJlZywgVHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7
CisgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5p
bmxpbmVDYXBhY2l0eSgpKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCkBAIC03Njcs
OSArNzY2LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBZGRy
ZXNzKGNhbGxlZVJlZywgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihKU0Z1bmN0aW9uVHlwZSkpKTsKICAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1
bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7CiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoVGVzdFB0cihaZXJvLCByYXJlRGF0YVJlZykpOwotICAgIGxvYWQzMihBZGRyZXNz
KHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Q
cm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSks
IGFsbG9jYXRvclJlZyk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlv
blJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSksIGFsbG9jYXRvclJlZyk7CiAgICAg
bG9hZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9i
amVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0
T2ZTdHJ1Y3R1cmUoKSksIHN0cnVjdHVyZVJlZyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
RXF1YWwsIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbTMyKEFsbG9jYXRvcigpLm9mZnNldCgpKSkp
OworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgYWxsb2NhdG9yUmVnKSk7CiAK
ICAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7CiAgICAgSnVt
cCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlv
blJlZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkp
OwpAQCAtNzc5LDcgKzc3OCw3IEBAIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAg
IGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKICAgICBhdXRvIG1hc2sg
PSBUcnVzdGVkSW1tMzIoMCk7Ci0gICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBK
SVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0
ZXJmbHksIG1hc2ssIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgZW1pdEFsbG9jYXRlSlNP
YmplY3QocmVzdWx0UmVnLCBudWxscHRyLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0
dGVyZmx5LCBtYXNrLCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoY2FsbGVlLCBzY3JhdGNoUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRj
aFJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgc2NyYXRjaFJlZyk7CiAgICAg
bG9hZDMyKEFkZHJlc3Moc2NyYXRjaFJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9m
SW5saW5lQ2FwYWNpdHkoKSksIHNjcmF0Y2hSZWcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IDBiMDUyMDRkOGU2NzgyNWFmNzk2ODE1ZWM3
N2Q1YzQ5MTRlZmExMjcuLjE0MzhlMTBhYjBkMjM4MGQ2ZDBiMzQyZGMwMDVkNmY3ZGZiNjVmOTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fu
c3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTc5LDIzICs3
OSwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS0+c3RydWN0dXJlKCk7CiAgICAgc2l6
ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0
dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vic3Bh
Y2VGb3I8SlNGaW5hbE9iamVjdD4oKm1fdm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9j
YXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisgICAgQmxv
Y2tEaXJlY3RvcnkqIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX3Zt
KS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9k
ZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwogCiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZXR1
cm5WYWx1ZUdQUjsKICAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwogICAgIFJl
Z2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwogCi0gICAgaWYgKCFhbGxvY2F0b3IpCi0gICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIp
OwotICAgICAgICBhdXRvIG1hc2sgPSBUcnVzdGVkSW1tMzIoMCk7Ci0gICAgICAgIGVtaXRBbGxv
Y2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3Ip
LCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBtYXNr
LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0
b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICBh
ZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgICAgICBlbWl0U3RvcmVDZWxsKGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlc3VsdFJlZyk7Ci0gICAgfQorICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcpOworICAgIGlmIChhbGxvY2F0b3IpCisg
ICAgICAgIGFkZFNsb3dDYXNlKEp1bXAoKSk7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAg
IGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICBhdXRvIG1hc2sg
PSBUcnVzdGVkSW1tMzIoMCk7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBh
bGxvY2F0b3IsIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJm
bHksIG1hc2ssIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgZW1pdEluaXRpYWxpemVJbmxp
bmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICBh
ZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgIGVtaXRTdG9yZUNlbGwoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgcmVzdWx0UmVnKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29w
X25ld19vYmplY3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTg1Nyw5ICs4NTYsOSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFkZHJlc3MoY2FsbGVlUmVnLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25UeXBlKSkpOwog
ICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsZWVSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURh
dGEoKSksIHJhcmVEYXRhUmVnKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8s
IHJhcmVEYXRhUmVnKSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9u
UmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRP
ZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yUmVnKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURh
dGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUo
KSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0
dXJlUmVnKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwgYWxsb2NhdG9yUmVnLCBU
cnVzdGVkSW1tMzIoQWxsb2NhdG9yKCkub2Zmc2V0KCkpKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoVGVzdFB0cihaZXJvLCBhbGxvY2F0b3JSZWcpKTsKIAogICAgIGxvYWRQdHIoY2FjaGVkRnVu
Y3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKICAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxl
ZXMgPSBicmFuY2hQdHIoRXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpT
Q2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKSk7CkBAIC04NjksNyArODY4LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVz
dGVkSW1tUHRyKG51bGxwdHIpOwogICAgIGF1dG8gbWFzayA9IFRydXN0ZWRJbW0zMigwKTsKLSAg
ICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUo
KSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgbWFzaywgc2NyYXRjaFJl
Zywgc2xvd0Nhc2VzKTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIG51bGxw
dHIsIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIG1hc2ssIHNjcmF0Y2hS
ZWcsIHNsb3dDYXNlcyk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKICAgICBlbWl0U3Rv
cmVDZWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlc3VsdFJlZyk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9CdXR0ZXJmbHlJbmxpbmVzLmgKaW5k
ZXggNjI2NWY1ODgwOTM1ZDM3OGE2OGRmYzc2OTM2ZDFmM2FmYWE0ZGIzOC4uYTY3MjhhMTRhYTgz
OGMyYjQ1ZWYxZGRjMjlmNDY5NDY0ZjRmYmU3ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0J1dHRlcmZseUlubGluZXMuaApAQCAtNzksNyArNzksNyBAQCBBTFdBWVNf
SU5MSU5FIHVuc2lnbmVkIEJ1dHRlcmZseTo6b3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgo
U3RydWN0dXJlKiBzdHJ1YwogaW5saW5lIEJ1dHRlcmZseSogQnV0dGVyZmx5OjpjcmVhdGVVbmlu
aXRpYWxpemVkKFZNJiB2bSwgSlNDZWxsKiwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJv
cGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5
bG9hZFNpemVJbkJ5dGVzKQogewogICAgIHNpemVfdCBzaXplID0gdG90YWxTaXplKHByZUNhcGFj
aXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2Fk
U2l6ZUluQnl0ZXMpOwotICAgIHZvaWQqIGJhc2UgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlh
cnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwodm0sIHNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25G
YWlsdXJlTW9kZTo6QXNzZXJ0KTsKKyAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIG51bGxwdHIsIEFsbG9jYXRp
b25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKICAgICBCdXR0ZXJmbHkqIHJlc3VsdCA9IGZyb21CYXNl
KGJhc2UsIHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQpAQCAtODcsNyArODcsNyBAQCBpbmxpbmUgQnV0dGVyZmx5KiBCdXR0ZXJmbHk6OmNyZWF0
ZVVuaW5pdGlhbGl6ZWQoVk0mIHZtLCBKU0NlbGwqLCBzaXplX3QgcHJlQ2FwYQogaW5saW5lIEJ1
dHRlcmZseSogQnV0dGVyZmx5Ojp0cnlDcmVhdGUoVk0mIHZtLCBKU0NlbGwqLCBzaXplX3QgcHJl
Q2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVy
LCBjb25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcykKIHsKICAgICBzaXplX3Qgc2l6ZSA9IHRvdGFsU2l6ZShwcmVDYXBh
Y2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKTsKLSAgICB2b2lkKiBiYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxp
YXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBzaXplLCBudWxscHRyLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGU6OlJldHVybk51bGwpOworICAgIHZvaWQqIGJhc2UgPSB2bS5qc1ZhbHVlR2ln
YWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwoc2l6ZSwgbnVsbHB0ciwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICBpZiAoIWJhc2UpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIEJ1dHRlcmZseSogcmVzdWx0ID0gZnJvbUJhc2UoYmFzZSwg
cHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpOwpAQCAtMTY1LDcgKzE2NSw3IEBAIGlubGlu
ZSBCdXR0ZXJmbHkqIEJ1dHRlcmZseTo6Z3Jvd0FycmF5UmlnaHQoCiAgICAgdm9pZCogdGhlQmFz
ZSA9IGJhc2UoMCwgcHJvcGVydHlDYXBhY2l0eSk7CiAgICAgc2l6ZV90IG9sZFNpemUgPSB0b3Rh
bFNpemUoMCwgcHJvcGVydHlDYXBhY2l0eSwgaGFkSW5kZXhpbmdIZWFkZXIsIG9sZEluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzKTsKICAgICBzaXplX3QgbmV3U2l6ZSA9IHRvdGFsU2l6ZSgwLCBw
cm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7Ci0g
ICAgdm9pZCogbmV3QmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9j
YXRlTm9uVmlydHVhbCh2bSwgbmV3U2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
OjpSZXR1cm5OdWxsKTsKKyAgICB2b2lkKiBuZXdCYXNlID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4
aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKG5ld1NpemUsIG51bGxwdHIsIEFsbG9jYXRp
b25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgaWYgKCFuZXdCYXNlKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBzaG91bGRuJ3QgYmUg
YSBtZW1jcHkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJl
Y3RBcmd1bWVudHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJn
dW1lbnRzLmNwcAppbmRleCA2OGJmNTNlYjA1OGExYzA1ZDUwOTM5MzAyNmIxZjAwY2U0MDJhMTU5
Li5hYTg0YjU5OGFlZTBhZTIzODEwNWM4NTM3OWU4NWFjYWM0NjY0Mzg5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTgs
NyArMTE4LDcgQEAgdm9pZCBEaXJlY3RBcmd1bWVudHM6Om92ZXJyaWRlVGhpbmdzKFZNJiB2bSkK
ICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwgbV9jYWxsZWUuZ2V0
KCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsK
ICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBnbG9i
YWxPYmplY3QoKS0+YXJyYXlQcm90b1ZhbHVlc0Z1bmN0aW9uKCksIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKICAgICAKLSAgICB2b2lkKiBiYWNr
aW5nU3RvcmUgPSB2bS5naWdhY2FnZUF1eGlsaWFyeVNwYWNlKG1fbWFwcGVkQXJndW1lbnRzLmtp
bmQpLmFsbG9jYXRlTm9uVmlydHVhbCh2bSwgbWFwcGVkQXJndW1lbnRzU2l6ZSgpLCBudWxscHRy
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CisgICAgdm9pZCogYmFja2luZ1N0b3Jl
ID0gdm0uZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShtX21hcHBlZEFyZ3VtZW50cy5raW5kKS5hbGxv
Y2F0ZU5vblZpcnR1YWwobWFwcGVkQXJndW1lbnRzU2l6ZSgpLCBudWxscHRyLCBBbGxvY2F0aW9u
RmFpbHVyZU1vZGU6OkFzc2VydCk7CiAgICAgYm9vbCogb3ZlcnJpZGVzID0gc3RhdGljX2Nhc3Q8
Ym9vbCo+KGJhY2tpbmdTdG9yZSk7CiAgICAgbV9tYXBwZWRBcmd1bWVudHMuc2V0KHZtLCB0aGlz
LCBvdmVycmlkZXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IG1fbGVuZ3RoOyBpLS07KQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lu
bGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVudHNJ
bmxpbmVzLmgKaW5kZXggNTk4ODJlYWM4ZTc5NjJhMTI2ZDczNzFhM2Y3MWVjYzc0MzNhNTZlMC4u
ZDkwZTU5ZmMxNDg2MWU4Y2NjYWI2YzVhMWJmOWZiNWIxNTY3NDhlYiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZW5lcmljQXJndW1lbnRzSW5saW5lcy5o
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjYzLDcgKzI2Myw3IEBAIHZvaWQgR2VuZXJpY0FyZ3VtZW50czxUeXBlPjo6aW5pdE1v
ZGlmaWVkQXJndW1lbnRzRGVzY3JpcHRvcihWTSYgdm0sIHVuc2lnbmVkIGFyCiAgICAgUkVMRUFT
RV9BU1NFUlQoIW1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yKTsKIAogICAgIGlmIChhcmdz
TGVuZ3RoKSB7Ci0gICAgICAgIHZvaWQqIGJhY2tpbmdTdG9yZSA9IHZtLmdpZ2FjYWdlQXV4aWxp
YXJ5U3BhY2UobV9tb2RpZmllZEFyZ3VtZW50c0Rlc2NyaXB0b3Iua2luZCkuYWxsb2NhdGVOb25W
aXJ0dWFsKHZtLCBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8OD4oYXJnc0xlbmd0aCksIG51bGxw
dHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKKyAgICAgICAgdm9pZCogYmFja2lu
Z1N0b3JlID0gdm0uZ2lnYWNhZ2VBdXhpbGlhcnlTcGFjZShtX21vZGlmaWVkQXJndW1lbnRzRGVz
Y3JpcHRvci5raW5kKS5hbGxvY2F0ZU5vblZpcnR1YWwoV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
PDg+KGFyZ3NMZW5ndGgpLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7
CiAgICAgICAgIGJvb2wqIG1vZGlmaWVkQXJndW1lbnRzID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KGJh
Y2tpbmdTdG9yZSk7CiAgICAgICAgIG1fbW9kaWZpZWRBcmd1bWVudHNEZXNjcmlwdG9yLnNldCh2
bSwgdGhpcywgbW9kaWZpZWRBcmd1bWVudHMpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBh
cmdzTGVuZ3RoOyBpLS07KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSGFzaE1hcEltcGwuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJ
bXBsLmgKaW5kZXggN2Q5NDljMmU4MmIyNzk5MTViMTg3NGM3OWVlZWMxZDk3OTcwMmYxMi4uOTRl
ZTJlMzkxZWJkYzIwYWQwZGM1NGZhZjcyYmMyZmUzM2YzZmMyNCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjA3LDcgKzIwNyw3IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
ICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSGFzaE1hcEJ1ZmZlcjo6YWxsb2NhdGlv
blNpemUoY2FwYWNpdHkpOwotICAgICAgICB2b2lkKiBkYXRhID0gdm0uanNWYWx1ZUdpZ2FjYWdl
QXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBhbGxvY2F0aW9uU2l6ZSwgbnVs
bHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICAgICAgdm9pZCog
ZGF0YSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVh
bChhbGxvY2F0aW9uU2l6ZSwgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5O
dWxsKTsKICAgICAgICAgaWYgKCFkYXRhKSB7CiAgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5
RXJyb3IoZXhlYywgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCmluZGV4IDg4NGIwYTJjMTQ5NmE4Y2Zh
MjVhY2Y1ZTBhMzBhOWY4OGNkYWQxMTEuLjk5MzJiNWFjZTViZmEwNThiZWQ0ZGRmZTgwM2MxN2Y5
YmFjNTJlZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuY3BwCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFBldGVy
IEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9z
a3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqCkBAIC04MSwxMCArODEsNyBAQCBKU0FycmF5KiBK
U0FycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVzdHJpY3RlZChPYmplY3RJbml0aWFsaXph
dGlvblNjb3BlJiBzYwogICAgICAgICAgICAgfHwgaGFzQ29udGlndW91cyhpbmRleGluZ1R5cGUp
KTsKIAogICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBCdXR0ZXJmbHk6Om9wdGltYWxD
b250aWd1b3VzVmVjdG9yTGVuZ3RoKHN0cnVjdHVyZSwgaW5pdGlhbExlbmd0aCk7Ci0gICAgICAg
IHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5v
blZpcnR1YWwoCi0gICAgICAgICAgICB2bSwKLSAgICAgICAgICAgIEJ1dHRlcmZseTo6dG90YWxT
aXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpLAotICAgICAgICAgICAgZGVmZXJyYWxDb250ZXh0LCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGU6OlJldHVybk51bGwpOworICAgICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdp
Z2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKEJ1dHRlcmZseTo6dG90YWxT
aXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpLCBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0
dXJuTnVsbCk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghdGVtcCkpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAgICAgYnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZSh0ZW1w
LCAwLCBvdXRPZkxpbmVTdG9yYWdlKTsKQEAgLTEwMSwxMCArOTgsNyBAQCBKU0FycmF5KiBKU0Fy
cmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkUmVzdHJpY3RlZChPYmplY3RJbml0aWFsaXphdGlv
blNjb3BlJiBzYwogICAgIH0gZWxzZSB7CiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBp
bmRleEJpYXMgPSAwOwogICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBBcnJheVN0b3Jh
Z2U6Om9wdGltYWxWZWN0b3JMZW5ndGgoaW5kZXhCaWFzLCBzdHJ1Y3R1cmUsIGluaXRpYWxMZW5n
dGgpOwotICAgICAgICB2b2lkKiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3Bh
Y2UuYWxsb2NhdGVOb25WaXJ0dWFsKAotICAgICAgICAgICAgdm0sCi0gICAgICAgICAgICBCdXR0
ZXJmbHk6OnRvdGFsU2l6ZShpbmRleEJpYXMsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIEFycmF5
U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSwKLSAgICAgICAgICAgIGRlZmVycmFsQ29u
dGV4dCwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKKyAgICAgICAgdm9pZCog
dGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVh
bChCdXR0ZXJmbHk6OnRvdGFsU2l6ZShpbmRleEJpYXMsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUs
IEFycmF5U3RvcmFnZTo6c2l6ZUZvcih2ZWN0b3JMZW5ndGgpKSwgZGVmZXJyYWxDb250ZXh0LCBB
bGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOwogICAgICAgICBpZiAoVU5MSUtFTFko
IXRlbXApKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGJ1dHRlcmZseSA9
IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVtcCwgaW5kZXhCaWFzLCBvdXRPZkxpbmVTdG9yYWdlKTsK
QEAgLTM3NCw4ICszNjgsNyBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiwgVk0mIHZtLCBEZWZlckdDJiwgYm9vbAogICAgICAgICBhbGxv
Y2F0ZWROZXdTdG9yYWdlID0gZmFsc2U7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc2l6ZV90IG5l
d1NpemUgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBwcm9wZXJ0eUNhcGFjaXR5LCB0cnVlLCBB
cnJheVN0b3JhZ2U6OnNpemVGb3IoZGVzaXJlZENhcGFjaXR5KSk7Ci0gICAgICAgIG5ld0FsbG9j
QmFzZSA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmlydHVh
bCgKLSAgICAgICAgICAgIHZtLCBuZXdTaXplLCBudWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1v
ZGU6OlJldHVybk51bGwpOworICAgICAgICBuZXdBbGxvY0Jhc2UgPSB2bS5qc1ZhbHVlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5vblZpcnR1YWwobmV3U2l6ZSwgbnVsbHB0ciwgQWxs
b2NhdGlvbkZhaWx1cmVNb2RlOjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKCFuZXdBbGxvY0Jh
c2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG5ld1N0b3JhZ2VDYXBhY2l0
eSA9IGRlc2lyZWRDYXBhY2l0eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQXJyYXkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXku
aAppbmRleCAzMjQ0ZDc3YjBhMTNkOGYzNjFmYzM2YTlhNDU0Nzg5ODRhOWY5MDU4Li5iM2M5MzQz
ZWIzZTZlOWRkYWE5MDg4NmYwMDE3NGFhYWE3Y2ZhZDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAo
QykgMjAwMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDMtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCkBAIC0yMzgsNyArMjM4LDYgQEAgaW5saW5lIEpTQXJyYXkqIEpTQXJyYXk6
OnRyeUNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBpbml0aWEK
IAogICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBCdXR0ZXJmbHk6Om9wdGltYWxDb250
aWd1b3VzVmVjdG9yTGVuZ3RoKHN0cnVjdHVyZSwgdmVjdG9yTGVuZ3RoSGludCk7CiAgICAgICAg
IHZvaWQqIHRlbXAgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5v
blZpcnR1YWwoCi0gICAgICAgICAgICB2bSwKICAgICAgICAgICAgIEJ1dHRlcmZseTo6dG90YWxT
aXplKDAsIG91dE9mTGluZVN0b3JhZ2UsIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpLAogICAgICAgICAgICAgbnVsbHB0ciwgQWxsb2NhdGlvbkZhaWx1cmVNb2Rl
OjpSZXR1cm5OdWxsKTsKICAgICAgICAgaWYgKCF0ZW1wKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuY3BwCmluZGV4IDhlMDA3NWQ2ZjAx
OWMzNzVjYWExZWZiYWNjZDVjZGRlMGY5ZmNlMDAuLjk3ZjY4OGU2NjNmZTU3NGU3MjA3MmZkZjdl
NTMwODI4N2FmYmU0NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlCdWZmZXJWaWV3LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5QnVmZmVyVmlldy5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgSlNBcnJheUJ1ZmZlclZp
ZXc6OkNvbnN0cnVjdGlvbkNvbnRleHQ6OkNvbnN0cnVjdGlvbkNvbnRleHQoCiAgICAgICAgIHZv
aWQqIHRlbXA7CiAgICAgICAgIHNpemVfdCBzaXplID0gc2l6ZU9mKGxlbmd0aCwgZWxlbWVudFNp
emUpOwogICAgICAgICBpZiAoc2l6ZSkgewotICAgICAgICAgICAgdGVtcCA9IHZtLnByaW1pdGl2
ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFsKHZtLCBzaXplLCBudWxs
cHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OlJldHVybk51bGwpOworICAgICAgICAgICAgdGVt
cCA9IHZtLnByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFs
KHNpemUsIG51bGxwdHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAg
ICAgICAgICBpZiAoIXRlbXApCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVs
c2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGlu
ZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAppbmRl
eCAwMGIzOTQwNTQ3MzcyN2M3YmMyYzViZmIzNGM3ZDI1MmFiY2Q0YzQ0Li44OTM0Yzg0NWRiNmE1
M2VhNDUwNTUzNDA2YmI4OWE5MjRlMzlmNmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ1LDE1ICsxNDUsMTQgQEAgQ29tcGxldGVT
dWJzcGFjZSogSlNDZWxsOjpzdWJzcGFjZUZvcihWTSYgdm0pCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgogQUxXQVlTX0lOTElORSB2b2lkKiB0cnlBbGxvY2F0ZUNlbGxIZWxwZXIoSGVhcCYgaGVhcCwg
c2l6ZV90IHNpemUsIEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsIEFsbG9jYXRp
b25GYWlsdXJlTW9kZSBmYWlsdXJlTW9kZSkKIHsKLSAgICBWTSYgdm0gPSAqaGVhcC52bSgpOwog
ICAgIEFTU0VSVChkZWZlcnJhbENvbnRleHQgfHwgIURpc2FsbG93R0M6OmlzSW5FZmZlY3RPbkN1
cnJlbnRUaHJlYWQoKSk7CiAgICAgQVNTRVJUKHNpemUgPj0gc2l6ZW9mKFQpKTsKLSAgICBKU0Nl
bGwqIHJlc3VsdCA9IHN0YXRpY19jYXN0PEpTQ2VsbCo+KHN1YnNwYWNlRm9yPFQ+KHZtKS0+YWxs
b2NhdGVOb25WaXJ0dWFsKHZtLCBzaXplLCBkZWZlcnJhbENvbnRleHQsIGZhaWx1cmVNb2RlKSk7
CisgICAgSlNDZWxsKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihzdWJzcGFjZUZvcjxU
PigqaGVhcC52bSgpKS0+YWxsb2NhdGVOb25WaXJ0dWFsKHNpemUsIGRlZmVycmFsQ29udGV4dCwg
ZmFpbHVyZU1vZGUpKTsKICAgICBpZiAoZmFpbHVyZU1vZGUgPT0gQWxsb2NhdGlvbkZhaWx1cmVN
b2RlOjpSZXR1cm5OdWxsICYmICFyZXN1bHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogI2lm
IEVOQUJMRShHQ19WQUxJREFUSU9OKQotICAgIEFTU0VSVCghdm0uaXNJbml0aWFsaXppbmdPYmpl
Y3QoKSk7Ci0gICAgdm0uc2V0SW5pdGlhbGl6aW5nT2JqZWN0Q2xhc3MoVDo6aW5mbygpKTsKKyAg
ICBBU1NFUlQoIWhlYXAudm0oKS0+aXNJbml0aWFsaXppbmdPYmplY3QoKSk7CisgICAgaGVhcC52
bSgpLT5zZXRJbml0aWFsaXppbmdPYmplY3RDbGFzcyhUOjppbmZvKCkpOwogI2VuZGlmCiAgICAg
cmVzdWx0LT5jbGVhclN0cnVjdHVyZSgpOwogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXggZTk3YTli
NjJkYTI4NjUxMzQzNDEyZDcyNDdkY2M5ZmU5NTEzM2E0OS4uMzc0ZTQ2NDVjODEzMjBlNWI0OWI1
MTE2ZDg4YzE4NjMwMjhmNDVmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtMzM1LDcgKzMzNSw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGVucXVldWVKb2IoRXhlY1N0YXRlKiBleGVjKQogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKLUpTR2xvYmFsT2JqZWN0
OjpKU0dsb2JhbE9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBHbG9i
YWxPYmplY3RNZXRob2RUYWJsZSogZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUsIFJlZlB0cjxUaHJl
YWRMb2NhbENhY2hlPiB0aHJlYWRMb2NhbENhY2hlKQorSlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFs
T2JqZWN0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IEdsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKiBnbG9iYWxPYmplY3RNZXRob2RUYWJsZSkKICAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSwgMCkKICAgICAsIG1fdm0odm0pCiAgICAgLCBtX21hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50KGFkb3B0UmVmKG5ldyBXYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkpKQpAQCAtMzUz
LDcgKzM1Myw2IEBAIEpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdChWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBjb25zdCBHbG9iYWxPYmplY3RNCiAgICAgLCBtX3RlbXBsYXRlUmVn
aXN0cnkodm0pCiAgICAgLCBtX3J1bnRpbWVGbGFncygpCiAgICAgLCBtX2dsb2JhbE9iamVjdE1l
dGhvZFRhYmxlKGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlID8gZ2xvYmFsT2JqZWN0TWV0aG9kVGFi
bGUgOiAmc19nbG9iYWxPYmplY3RNZXRob2RUYWJsZSkKLSAgICAsIG1fdGhyZWFkTG9jYWxDYWNo
ZSh0aHJlYWRMb2NhbENhY2hlID8gV1RGTW92ZSh0aHJlYWRMb2NhbENhY2hlKSA6IHZtLmRlZmF1
bHRUaHJlYWRMb2NhbENhY2hlKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaAppbmRleCA2ZDFhYWM4OTMxMmYwNGJkNmU0OTVhNjY0ZGU5
Mzc0MzYxMTgxOTBiLi44ZGRjZTE0NjNmZmQyZDUwYjkwYTkwNWJjYWYxNzQ3MWNlYmE3YmVkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAg
LTQ5MSw3ICs0OTEsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgUnVudGltZUZsYWdzJiBydW50aW1l
RmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX3J1bnRpbWVGbGFnczsgfQogCiBwcm90ZWN0ZWQ6Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSlNHbG9iYWxPYmplY3QoVk0mLCBTdHJ1Y3R1
cmUqLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogPSAwLCBSZWZQdHI8VGhyZWFkTG9j
YWxDYWNoZT4gPSBudWxscHRyKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBKU0ds
b2JhbE9iamVjdChWTSYsIFN0cnVjdHVyZSosIGNvbnN0IEdsb2JhbE9iamVjdE1ldGhvZFRhYmxl
KiA9IDApOwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYp
OwogCkBAIC04OTMsOCArODkzLDYgQEAgcHVibGljOgogICAgIEpTV3JhcHBlck1hcCogd3JhcHBl
ck1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fd3JhcHBlck1hcC5nZXQoKTsgfQogICAgIHZvaWQgc2V0
V3JhcHBlck1hcChKU1dyYXBwZXJNYXAqIG1hcCkgeyBtX3dyYXBwZXJNYXAgPSBtYXA7IH0KICNl
bmRpZgotICAgIAotICAgIFRocmVhZExvY2FsQ2FjaGUmIHRocmVhZExvY2FsQ2FjaGUoKSBjb25z
dCB7IHJldHVybiAqbV90aHJlYWRMb2NhbENhY2hlLmdldCgpOyB9CiAKIHByb3RlY3RlZDoKICAg
ICBzdHJ1Y3QgR2xvYmFsUHJvcGVydHlJbmZvIHsKQEAgLTkyNiw4ICs5MjQsNiBAQCBwcml2YXRl
OgogI2lmIEpTQ19PQkpDX0FQSV9FTkFCTEVECiAgICAgUmV0YWluUHRyPEpTV3JhcHBlck1hcD4g
bV93cmFwcGVyTWFwOwogI2VuZGlmCi0gICAgCi0gICAgUmVmUHRyPFRocmVhZExvY2FsQ2FjaGU+
IG1fdGhyZWFkTG9jYWxDYWNoZTsKIH07CiAKIEpTR2xvYmFsT2JqZWN0KiBhc0dsb2JhbE9iamVj
dChKU1ZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCmluZGV4
IGI2YmIxMzAwMDY4ZGE5ZWM0ODdmZTA1MGM1NmNjZGQ2NmE3YzRmNDMuLmU2M2ZkYmNlMmRkMzI4
ZTIyYTUxNTAwMDVjYjIyNjVlOTIxMmI4MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNMb2NrLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUt
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
TWFjaGluZVN0YWNrTWFya2VyLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdQcm9maWxlci5oIgotI2lu
Y2x1ZGUgIlRocmVhZExvY2FsQ2FjaGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbU1hY2hpbmVU
aHJlYWRzLmgiCiAjaW5jbHVkZSA8dGhyZWFkPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
QEAgLTE0OCw5ICsxNDcsNyBAQCB2b2lkIEpTTG9jazo6ZGlkQWNxdWlyZUxvY2soKQogCiAgICAg
bV92bS0+c2V0TGFzdFN0YWNrVG9wKHRocmVhZC5zYXZlZExhc3RTdGFja1RvcCgpKTsKICAgICBB
U1NFUlQodGhyZWFkLnN0YWNrKCkuY29udGFpbnMobV92bS0+bGFzdFN0YWNrVG9wKCkpKTsKLSAg
ICAKLSAgICBtX3ZtLT5kZWZhdWx0VGhyZWFkTG9jYWxDYWNoZS0+aW5zdGFsbCgqbV92bSk7Ci0g
ICAgCisKICAgICBtX3ZtLT5oZWFwLm1hY2hpbmVUaHJlYWRzKCkuYWRkQ3VycmVudFRocmVhZCgp
OwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBXYXNtOjpzdGFydFRyYWNraW5nQ3VycmVu
dFRocmVhZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IGYw
YzhiOTY1MDBlYTA2ODY3NTMwYjVjZWJmNjJkMGQ5NGI2ODlkNmIuLjRiZTVmNWQ3M2IzZTNjYmE0
ZGM1M2Y2NWYwMTY4YzcyN2I3NmNkZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmgKQEAgLTIzNiw3ICsyMzYsNiBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVBc3luY0l0
ZXJhdGlvbiA9IGZhbHNlOwogICAgIHYoYm9vbCwgZHVtcFNpemVDbGFzc2VzLCBmYWxzZSwgTm9y
bWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCB1c2VCdW1wQWxsb2NhdG9yLCB0cnVlLCBOb3Jt
YWwsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHN0ZWFsRW1wdHlCbG9ja3NGcm9tT3RoZXJBbGxv
Y2F0b3JzLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKLSAgICB2KGJvb2wsIHRyYWRlRGVzdHJ1
Y3RvckJsb2NrcywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihib29sLCBlYWdlcmx5
VXBkYXRlVG9wQ2FsbEZyYW1lLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAogICAg
IHYoYm9vbCwgdXNlT1NSRW50cnlUb0RGRywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXku
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCmlu
ZGV4IGUzODdjYzdmYjAwYjFhMTk3YTNkMjcyN2U4NDBjYzQ0NWRhZGJjZDQuLjkwZjhjNDRhYzU4
ODVhNjMwNzBmYjZiNjJkZTExYWFiOWYxZDVkYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNDIsNyArNDIsNyBAQCBBTFdBWVNfSU5M
SU5FIEpTQXJyYXkqIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBNYXRjaGVzQXJyYXkoT2Jq
ZWN0SW5pdGlhbGl6YQogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0cnVj
dHVyZS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgYm9vbCBjcmVhdGVVbmluaXRpYWxpemVkID0gZ2xv
YmFsT2JqZWN0LT5pc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICB2b2lk
KiB0ZW1wID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0
dWFsKHZtLCBCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBkZWZl
cnJhbENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CisgICAgdm9p
ZCogdGVtcCA9IHZtLmpzVmFsdWVHaWdhY2FnZUF1eGlsaWFyeVNwYWNlLmFsbG9jYXRlTm9uVmly
dHVhbChCdXR0ZXJmbHk6OnRvdGFsU2l6ZSgwLCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCksIHRydWUsIHZlY3Rvckxlbmd0aCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBkZWZlcnJh
bENvbnRleHQsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6UmV0dXJuTnVsbCk7CiAgICAgaWYgKFVO
TElLRUxZKCF0ZW1wKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQnV0dGVyZmx5KiBi
dXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRlbXAsIDAsIHN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggMThh
ZmEyZmY4N2IzNDFiNTU0MTVlNjljNDczY2NiZDBkYWIyOGEwZC4uZDEzMWRjNjM0ZWQ0ZjllZTk0
NDM2M2NkNjkyZTRjZGMzMzg4MTcwMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTEyMSw3ICsxMjEsNiBAQAogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMuaCIKICNpbmNs
dWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVGVzdFJ1bm5lclV0aWxzLmgiCi0j
aW5jbHVkZSAiVGhyZWFkTG9jYWxDYWNoZUlubGluZXMuaCIKICNpbmNsdWRlICJUaHVua0dlbmVy
YXRvcnMuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKICNpbmNsdWRlICJUeXBlUHJvZmls
ZXJMb2cuaCIKQEAgLTMwNyw5ICszMDYsNiBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5
cGUgaGVhcFR5cGUpCiAgICAgdXBkYXRlU29mdFJlc2VydmVkWm9uZVNpemUoT3B0aW9uczo6c29m
dFJlc2VydmVkWm9uZVNpemUoKSk7CiAgICAgc2V0TGFzdFN0YWNrVG9wKHN0YWNrLm9yaWdpbigp
KTsKIAotICAgIGRlZmF1bHRUaHJlYWRMb2NhbENhY2hlID0gVGhyZWFkTG9jYWxDYWNoZTo6Y3Jl
YXRlKGhlYXApOwotICAgIGRlZmF1bHRUaHJlYWRMb2NhbENhY2hlLT5pbnN0YWxsKCp0aGlzKTsK
LQogICAgIC8vIE5lZWQgdG8gYmUgY2FyZWZ1bCB0byBrZWVwIGV2ZXJ5dGhpbmcgY29uc2lzdGVu
dCBoZXJlCiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodGhpcyk7CiAgICAgQXRvbWljU3RyaW5nVGFi
bGUqIGV4aXN0aW5nRW50cnlBdG9taWNTdHJpbmdUYWJsZSA9IFRocmVhZDo6Y3VycmVudCgpLnNl
dEN1cnJlbnRBdG9taWNTdHJpbmdUYWJsZShtX2F0b21pY1N0cmluZ1RhYmxlKTsKQEAgLTQ5OCwx
MCArNDk0LDYgQEAgVk06On5WTSgpCiAgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWRJc0hvbGRpbmdB
UElMb2NrKCkpOwogICAgIG1fYXBpTG9jay0+d2lsbERlc3Ryb3lWTSh0aGlzKTsKICAgICBoZWFw
Lmxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7Ci0gICAgCi0jaWYgIUVOQUJMRShGQVNUX1RMU19KSVQp
Ci0gICAgVGhyZWFkTG9jYWxDYWNoZTo6ZGVzdHJ1Y3Rvcih0aHJlYWRMb2NhbENhY2hlRGF0YSk7
Ci0jZW5kaWYKIAogICAgIGRlbGV0ZSBpbnRlcnByZXRlcjsKICNpZm5kZWYgTkRFQlVHCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA1NWRhOWFjN2NjYzgxNTMzNzdlNTBhOWE3NjU2
YjczODViMzY0ODU2Li5iZTJmNzg2Njc4ZmU1YWZjYTMzY2ZjYjgxY2E3NTAwOWYxZDNiOWUxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTU0LDcgKzU0LDYgQEAKICNpbmNsdWRl
ICJUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuaCIKICNpbmNsdWRlICJWTUVudHJ5UmVjb3JkLmgi
CiAjaW5jbHVkZSAiVk1UcmFwcy5oIgotI2luY2x1ZGUgIlRocmVhZExvY2FsQ2FjaGUuaCIKICNp
bmNsdWRlICJXYXNtQ29udGV4dC5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKICNpbmNsdWRl
IDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3IuaD4KQEAgLTY1NywxMSArNjU2LDYgQEAgcHVibGlj
OgogCiAgICAgSlNPYmplY3QqIHN0cmluZ1JlY3Vyc2lvbkNoZWNrRmlyc3RPYmplY3QgeyBudWxs
cHRyIH07CiAgICAgSGFzaFNldDxKU09iamVjdCo+IHN0cmluZ1JlY3Vyc2lvbkNoZWNrVmlzaXRl
ZE9iamVjdHM7Ci0gICAgCi0jaWYgIUVOQUJMRShGQVNUX1RMU19KSVQpCi0gICAgVGhyZWFkTG9j
YWxDYWNoZTo6RGF0YSogdGhyZWFkTG9jYWxDYWNoZURhdGEgeyBudWxscHRyIH07Ci0jZW5kaWYK
LSAgICBSZWZQdHI8VGhyZWFkTG9jYWxDYWNoZT4gZGVmYXVsdFRocmVhZExvY2FsQ2FjaGU7CiAK
ICAgICBMb2NhbFRpbWVPZmZzZXRDYWNoZSBsb2NhbFRpbWVPZmZzZXRDYWNoZTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1FbnRyeVNjb3BlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNRW50cnlTY29wZS5jcHAKaW5kZXggNGNlNWVm
OTRjYzkxODU5Zjc0ODA4ZThkYTA0M2YxMDcxZGE2YjkzZS4uZDExYThmZmE2NmRiNWZlMzBmYjlm
NDlmNDUzMTM4MzZiNzhkMjM1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk1FbnRyeVNjb3BlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTUVudHJ5U2NvcGUuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkRpc2FsbG93
Vk1SZWVudHJ5LmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlNhbXBsaW5nUHJv
ZmlsZXIuaCIKLSNpbmNsdWRlICJUaHJlYWRMb2NhbENhY2hlSW5saW5lcy5oIgogI2luY2x1ZGUg
IlZNLmgiCiAjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRlIDx3dGYvU3RhY2tCb3VuZHMu
aD4KQEAgLTQxLDcgKzQwLDYgQEAgVk1FbnRyeVNjb3BlOjpWTUVudHJ5U2NvcGUoVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIDogbV92bSh2bSkKICAgICAsIG1fZ2xv
YmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKIHsKLSAgICBnbG9iYWxPYmplY3QtPnRocmVhZExvY2Fs
Q2FjaGUoKS5pbnN0YWxsKHZtKTsKICAgICBBU1NFUlQoIURpc2FsbG93Vk1SZWVudHJ5Ojppc0lu
RWZmZWN0T25DdXJyZW50VGhyZWFkKCkpOwogICAgIEFTU0VSVChUaHJlYWQ6OmN1cnJlbnQoKS5z
dGFjaygpLmlzR3Jvd2luZ0Rvd253YXJkKCkpOwogICAgIGlmICghdm0uZW50cnlTY29wZSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQml0bWFwLmggYi9Tb3VyY2UvV1RGL3d0Zi9CaXRt
YXAuaAppbmRleCA2MzQ1YTYwMjc4OWFjZWZhNDBiYzI2YWEwZWM1ODA2ZjI3OWI4YzIyLi5kZDMz
NDcwYmNmOTMyZjM0MDAzMTkxZDAzYzk0MTUxN2RmODM4ZDFmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9CaXRtYXAuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaApAQCAtMjEsNyAr
MjEsNiBAQAogCiAjaW5jbHVkZSA8YXJyYXk+CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KLSNp
bmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>