<?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>168577</bug_id>
          
          <creation_ts>2017-02-19 14:06:23 -0800</creation_ts>
          <short_desc>REGRESSION(r212466): causes crashes on AArch64 on linux, maybe it&apos;s causing crashes on iOS too (Requested by pizlo on #webkit).</short_desc>
          <delta_ts>2017-02-19 14:09:47 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>167737</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>keith_miller</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1278758</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-19 14:06:23 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/212466 broke the build:
causes crashes on AArch64 on linux, maybe it&apos;s causing crashes on iOS too (Requested by pizlo 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>1278760</commentid>
    <comment_count>1</comment_count>
      <attachid>302088</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-19 14:06:52 -0800</bug_when>
    <thetext>Created attachment 302088
ROLLOUT of r212466

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>1278761</commentid>
    <comment_count>2</comment_count>
      <attachid>302088</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-19 14:09:44 -0800</bug_when>
    <thetext>Comment on attachment 302088
ROLLOUT of r212466

Clearing flags on attachment: 302088

Committed r212616: &lt;http://trac.webkit.org/changeset/212616&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1278762</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-19 14:09:47 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302088</attachid>
            <date>2017-02-19 14:06:52 -0800</date>
            <delta_ts>2017-02-19 14:09:44 -0800</delta_ts>
            <desc>ROLLOUT of r212466</desc>
            <filename>bug-168577-20170219170410.patch</filename>
            <type>text/plain</type>
            <size>280384</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEyNjE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
YjZiY2VjYWQyM2FmOTJmYThhNjQ3N2ZmZmI4YmEwZWY4NWE3MGNlLi45ZGJkYTE3MmY5OTRhMDBi
ZTdlMDgwYmZhZjA0ZWY4NWU3NmRhODJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOCBAQAorMjAxNy0wMi0xOSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIxMjQ2Ni4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2ODU3NworCisgICAg
ICAgIGNhdXNlcyBjcmFzaGVzIG9uIEFBcmNoNjQgb24gbGludXgsIG1heWJlIGl0J3MgY2F1c2lu
ZyBjcmFzaGVzCisgICAgICAgIG9uIGlPUyB0b28gKFJlcXVlc3RlZCBieSBwaXpsbyBvbiAjd2Vi
a2l0KS4KKworICAgICAgICBSZXZlcnRlZCBjaGFuZ2VzZXQ6CisKKyAgICAgICAgIlRoZSBjb2xs
ZWN0b3IgdGhyZWFkIHNob3VsZCBvbmx5IHN0YXJ0IHdoZW4gdGhlIG11dGF0b3IKKyAgICAgICAg
ZG9lc24ndCBoYXZlIGhlYXAgYWNjZXNzIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY3NzM3CisgICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcv
Y2hhbmdlc2V0LzIxMjQ2NgorCiAyMDE3LTAyLTE3ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZA
YXBwbGUuY29tPgogCiAgICAgICAgIEltcHJvdmUgQVJNNjQgZGlzYXNzZW1ibGVyIGhhbmRsaW5n
IG9mIHBzZXVkbyBvcHMsIHVuc3VwcG9ydGVkIG9wY29kZXMgYW5kIHplcm8gcmVnCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGNk
Yjc1ZDk0NzU5OTUwZGYzNmVhOGY1Yzk1MThmMTdkODIxMmY1MTEuLjdhMmJhYWRkZTExNTY3Yzdi
ZTU0NjcwZmQ2Nzg4N2M4ZTAwODU2MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTctMDItMTkg
IENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgorCisgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMTI0NjYuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjg1NzcKKworICAgICAgICBjYXVzZXMgY3Jhc2hlcyBvbiBB
QXJjaDY0IG9uIGxpbnV4LCBtYXliZSBpdCdzIGNhdXNpbmcgY3Jhc2hlcworICAgICAgICBvbiBp
T1MgdG9vIChSZXF1ZXN0ZWQgYnkgcGl6bG8gb24gI3dlYmtpdCkuCisKKyAgICAgICAgUmV2ZXJ0
ZWQgY2hhbmdlc2V0OgorCisgICAgICAgICJUaGUgY29sbGVjdG9yIHRocmVhZCBzaG91bGQgb25s
eSBzdGFydCB3aGVuIHRoZSBtdXRhdG9yCisgICAgICAgIGRvZXNuJ3QgaGF2ZSBoZWFwIGFjY2Vz
cyIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Nzcz
NworICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8yMTI0NjYKKwogMjAx
Ny0wMi0xOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlY3Vy
c2l2ZSBNZXNzYWdlUG9ydC5wb3N0TWVzc2FnZSgpIGNhbGxzIGNhdXNlcyB0YWIgdG8gYmVjb21l
IHVucmVzcG9uc2l2ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDE0NzEwNDA2MjJjYjA1ZDlmNWZmYmRhNzBkMGE2
NWVhNTI5NjA0NTguLmU4ZmVhMjQzMjMwYzY4ZmZkMWJkZWE3MmIxYjczNmQ4NTc2NGMyYmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxNy0wMi0xOSAgQ29tbWl0IFF1ZXVlICA8Y29t
bWl0LXF1ZXVlQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjIxMjQ2Ni4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2ODU3NworCisgICAgICAgIGNhdXNlcyBjcmFzaGVzIG9uIEFBcmNoNjQgb24gbGludXgsIG1h
eWJlIGl0J3MgY2F1c2luZyBjcmFzaGVzCisgICAgICAgIG9uIGlPUyB0b28gKFJlcXVlc3RlZCBi
eSBwaXpsbyBvbiAjd2Via2l0KS4KKworICAgICAgICBSZXZlcnRlZCBjaGFuZ2VzZXQ6CisKKyAg
ICAgICAgIlRoZSBjb2xsZWN0b3IgdGhyZWFkIHNob3VsZCBvbmx5IHN0YXJ0IHdoZW4gdGhlIG11
dGF0b3IKKyAgICAgICAgZG9lc24ndCBoYXZlIGhlYXAgYWNjZXNzIgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3NzM3CisgICAgICAgIGh0dHA6Ly90
cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzIxMjQ2NgorCiAyMDE3LTAyLTE5ICBaYWxhbiBCdWp0
YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0OiBJbXBs
ZW1lbnQgcG9zaXRpb25Gb3JQb2ludC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApp
bmRleCBjN2E1MjNjYzIwZTc1M2VjYzA3N2M2NDBiYzkxYWUzOTAxY2M4MDA0Li40ZTBkNzlmYTU5
OTVjYWZkODRlZTcyZWY4ZGJkMTI0MjQzOGZmODIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CkBAIC00NzQsNyArNDc0LDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMK
ICAgICBoZWFwL0NlbGxDb250YWluZXIuY3BwCiAgICAgaGVhcC9Db2RlQmxvY2tTZXQuY3BwCiAg
ICAgaGVhcC9Db2xsZWN0aW9uU2NvcGUuY3BwCi0gICAgaGVhcC9Db2xsZWN0b3JQaGFzZS5jcHAK
ICAgICBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAogICAgIGhlYXAvRGVmZXJHQy5jcHAKICAg
ICBoZWFwL0Rlc3RydWN0aW9uTW9kZS5jcHAKQEAgLTQ4Miw4ICs0ODEsNiBAQCBzZXQoSmF2YVNj
cmlwdENvcmVfU09VUkNFUwogICAgIGhlYXAvRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5jcHAKICAg
ICBoZWFwL0ZyZWVMaXN0LmNwcAogICAgIGhlYXAvR0NBY3Rpdml0eUNhbGxiYWNrLmNwcAotICAg
IGhlYXAvR0NDb25kdWN0b3IuY3BwCi0gICAgaGVhcC9HQ0ZpbmFsaXphdGlvbkNhbGxiYWNrLmNw
cAogICAgIGhlYXAvR0NMb2dnaW5nLmNwcAogICAgIGhlYXAvSGFuZGxlU2V0LmNwcAogICAgIGhl
YXAvSGFuZGxlU3RhY2suY3BwCkBAIC00OTMsNiArNDkwLDcgQEAgc2V0KEphdmFTY3JpcHRDb3Jl
X1NPVVJDRVMKICAgICBoZWFwL0hlYXBQcm9maWxlci5jcHAKICAgICBoZWFwL0hlYXBTbmFwc2hv
dC5jcHAKICAgICBoZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwCisgICAgaGVhcC9IZWFwU3Rh
dGlzdGljcy5jcHAKICAgICBoZWFwL0hlYXBUaW1lci5jcHAKICAgICBoZWFwL0hlYXBWZXJpZmll
ci5jcHAKICAgICBoZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggZWM1N2MzZjU2ZThkZDNjMGFlOTU0NDhmMWZjNGZjNjBiNjBmYzIyMy4u
NTQyNWI5ZTZiMTgxN2QyZDAxODUyZTU0MDdkNjFjZTcwZDM4OTdkOSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTI2OSw5ICsyNjksNiBAQAogCQkwRjJCREM0RDE1MjI4MTg2MDBD
RDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzRDMTUyMjgxODMwMENEODkxMCAvKiBERkdNaW5pZmll
ZE5vZGUuY3BwICovOyB9OwogCQkwRjJCREM0RjE1MjI4QkYzMDBDRDg5MTAgLyogREZHVmFsdWVT
b3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQkRDNEUxNTIyOEJFNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNwcCAqLzsgfTsKIAkJ
MEYyQkRDNTExNTIyOEZGRDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDNTAxNTIyOEZGQTAw
Q0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwICovOyB9OwotCQkwRjJDNjNBNzFFNEY4RkQz
MDBDMTM4MzkgLyogR0NGaW5hbGl6YXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNBNTFFNEY4RkQxMDBDMTM4MzkgLyog
R0NGaW5hbGl6YXRpb25DYWxsYmFjay5jcHAgKi87IH07Ci0JCTBGMkM2M0E4MUU0RjhGRDUwMEMx
MzgzOSAvKiBHQ0ZpbmFsaXphdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNjNBNjFFNEY4RkQxMDBDMTM4MzkgLyogR0NGaW5h
bGl6YXRpb25DYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTBGMkM2M0FBMUU0RkE0MkUwMEMxMzgzOSAvKiBSdW5uaW5nU2NvcGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM2M0E5MUU0
RkE0MkMwMEMxMzgzOSAvKiBSdW5uaW5nU2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJENERERDE5ODMyRDM0MDA3RDRCMTkgLyogRGVi
dWdnZXJTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjJENEREQjE5ODMyRDM0MDA3RDRCMTkgLyogRGVidWdnZXJTY29wZS5jcHAgKi87IH07
CiAJCTBGMkQ0RERFMTk4MzJEMzQwMDdENEIxOSAvKiBEZWJ1Z2dlclNjb3BlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJENEREQzE5ODMyRDM0MDA3
RDRCMTkgLyogRGVidWdnZXJTY29wZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGMkQ0REU4MTk4MzJEQUMwMDdENEIxOSAvKiBUb1RoaXNTdGF0
dXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
RDRERTUxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhpc1N0YXR1cy5jcHAgKi87IH07CkBAIC02Mzcs
NiArNjM0LDcgQEAKIAkJMEZBNzYyMDUxREI5MjQyOTAwQjdBMkZEIC8qIENvbGxlY3Rpb25TY29w
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBNzYy
MDExREI5MjQyMzAwQjdBMkZEIC8qIENvbGxlY3Rpb25TY29wZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQTc2MjA2MURCOTI0MzEwMEI3QTJG
RCAvKiBNdXRhdG9yU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZBNzYyMDIxREI5MjQyMzAwQjdBMkZEIC8qIE11dGF0b3JTdGF0ZS5jcHAg
Ki87IH07CiAJCTBGQTc2MjA3MURCOTI0MzMwMEI3QTJGRCAvKiBNdXRhdG9yU3RhdGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTc2MjAzMURCOTI0
MjMwMEI3QTJGRCAvKiBNdXRhdG9yU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRkE3NjIwOTFEQjkyODNFMDBCN0EyRkQgLyogSGVscGlu
Z0dDU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQTc2MjA4MURCOTI4M0MwMEI3QTJGRCAvKiBIZWxwaW5nR0NTY29wZS5oICovOyB9OwogCQkw
RkE3NjIwQjFEQjk1OUY5MDBCN0EyRkQgLyogQWxsb2NhdGluZ1Njb3BlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE3NjIwQTFEQjk1OUY2MDBCN0Ey
RkQgLyogQWxsb2NhdGluZ1Njb3BlLmggKi87IH07CiAJCTBGQTdBOEVCMThCNDEzQzgwMDUyMzcx
RCAvKiBSZWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgKi87IH07CiAJCTBGQTdBOEVD
MThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQTdBOEVBMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzM3LDEzICs3MzUs
NiBAQAogCQkwRkNFRkFBQzE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUFBMTgwNEMx
M0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQ0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExM
b2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkNFRkFERDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwICovOyB9OwogCQkw
RkNFRkFFMDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQURFMTgwNzM4QzAwMDQ3MkNFNCAv
KiBGVExMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTBGRDBFNUU5MUU0M0QzNDkwMDA2QUIwOCAvKiBDb2xsZWN0b3JQaGFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMEU1RTYxRTQz
RDM0NzAwMDZBQjA4IC8qIENvbGxlY3RvclBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZEMEU1RUExRTQzRDM0RDAwMDZBQjA4IC8qIEdD
Q29uZHVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkQwRTVFODFFNDNEMzQ3MDAwNkFCMDggLyogR0NDb25kdWN0b3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRkQwRTVFQjFFNDNEMzUwMDAw
NkFCMDggLyogQ29sbGVjdG9yUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEMEU1RTUxRTQzRDM0NzAwMDZBQjA4IC8qIENvbGxlY3RvclBo
YXNlLmNwcCAqLzsgfTsKLQkJMEZEMEU1RUMxRTQzRDM1MzAwMDZBQjA4IC8qIEdDQ29uZHVjdG9y
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDBF
NUU3MUU0M0QzNDcwMDA2QUIwOCAvKiBHQ0NvbmR1Y3Rvci5jcHAgKi87IH07Ci0JCTBGRDBFNUVF
MUU0NjhBNTcwMDA2QUIwOCAvKiBTd2VlcGluZ1Njb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQwRTVFRDFFNDY4QTU0MDAwNkFCMDggLyogU3dl
ZXBpbmdTY29wZS5oICovOyB9OwotCQkwRkQwRTVGMDFFNDZCRjI1MDAwNkFCMDggLyogUmVnaXN0
ZXJTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZEMEU1RUYxRTQ2QkYyMzAwMDZBQjA4IC8qIFJlZ2lzdGVyU3RhdGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRkQwRTVGMjFFNDZDOEFGMDAw
NkFCMDggLyogQ29sbGVjdGluZ1Njb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkQwRTVGMTFFNDZDOEFEMDAwNkFCMDggLyogQ29sbGVjdGluZ1Nj
b3BlLmggKi87IH07CiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxp
bmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQy
QzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZE
ODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87
IH07CiAJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZE
ODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKQEAgLTEyMTQsNyArMTIwNSw3IEBACiAJCTE0Qjcy
M0I4MTJEN0RBNkYwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QjcyMzQwMTJEN0QwREEwMDNCRDVF
RCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNEI4RUM3MjBBNTY1MjA5MDA2MkJFNTQgLyogQ29yZUZvdW5k
YXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNjU2MEE0Q0YwNEIzQjNFNzAwOEFFOTUyIC8qIENvcmVGb3VuZGF0aW9uLmZyYW1l
d29yayAqLzsgfTsKIAkJMTRCQTc4RjExM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEJBNzhGMDEz
QUFCODhGMDA1QjdDMkMgLyogU2xvdFZpc2l0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxNEJBN0E5NzEzQUFERkY4MDA1QjdDMkMgLyogSGVh
cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEJB
N0E5NTEzQUFERkY4MDA1QjdDMkMgLyogSGVhcC5jcHAgKi87IHNldHRpbmdzID0ge0NPTVBJTEVS
X0ZMQUdTID0gIi1mbm8tb3B0aW1pemUtc2libGluZy1jYWxscyI7IH07IH07CisJCTE0QkE3QTk3
MTNBQURGRjgwMDVCN0MyQyAvKiBIZWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0QkE3QTk1MTNBQURGRjgwMDVCN0MyQyAvKiBIZWFwLmNwcCAq
LzsgfTsKIAkJMTRCQTdBOTgxM0FBREZGODAwNUI3QzJDIC8qIEhlYXAuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QkE3QTk2MTNBQURGRjgwMDVCN0My
QyAvKiBIZWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMTRCRDU5QzUwQTNFOEY5RjAwQkFGNTlDIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29y
ayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1
QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CiAJ
CTE0QkQ1QTMwMEEzRTkxRjYwMEJBRjU5QyAvKiBKU0NvbnRleHRSZWYuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRCRDVBMjkwQTNFOTFGNjAwQkFG
NTlDIC8qIEpTQ29udGV4dFJlZi5jcHAgKi87IH07CkBAIC0yMTg2LDYgKzIxNzcsOCBAQAogCQlD
MjE4MUZDMjE4QTk0OEZCMDAyNUEyMzUgLyogSlNFeHBvcnRUZXN0cy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTgxRkMxMThBOTQ4RkIwMDI1QTIz
NSAvKiBKU0V4cG9ydFRlc3RzLm1tICovOyB9OwogCQlDMjI1NDk0MzE1RjdEQkFBMDA2NUU4OTgg
LyogU2xvdFZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLzsg
fTsKIAkJQzIyQjMxQjkxNDA1NzdENzAwREI0NzVBIC8qIFNhbXBsaW5nQ291bnRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOEUxNDAyRkRE
NjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUMyNEQzMUUyMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFw
U3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMjREMzFFMDE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3MuY3BwICovOyB9
OworCQlDMjREMzFFMzE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3MuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyNEQzMUUxMTYxQ0Q2OTUw
MDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUMyNUQ3MDlCMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFn
ZWRWYWx1ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEMyNUQ3MDk5MTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5tbSAqLzsgfTsKIAkJ
QzI1RDcwOUMxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjVENzA5QTE2REU5OUY0MDBGQ0E2
QkMgLyogSlNNYW5hZ2VkVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJs
aWMsICk7IH07IH07CiAJCUMyNUY4QkNEMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3
ZWVwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzI1RjhCQ0IxNTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5jcHAgKi87IH07
CkBAIC0yNzUyLDkgKzI3NDUsNiBAQAogCQkwRjJCREM0QzE1MjI4MTgzMDBDRDg5MTAgLyogREZH
TWluaWZpZWROb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R01pbmlmaWVkTm9kZS5jcHA7IHBhdGggPSBkZmcvREZHTWluaWZpZWROb2RlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDNEUxNTIyOEJFNzAwQ0Q4OTEwIC8qIERGR1Zh
bHVlU291cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1Zh
bHVlU291cmNlLmNwcDsgcGF0aCA9IGRmZy9ERkdWYWx1ZVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzUwMTUyMjhGRkEwMENEODkxMCAvKiBERkdWYXJpYWJs
ZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1Zhcmlh
YmxlRXZlbnQuY3BwOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRjJDNjNBNTFFNEY4RkQxMDBDMTM4MzkgLyogR0NGaW5hbGl6
YXRpb25DYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBH
Q0ZpbmFsaXphdGlvbkNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MEYyQzYzQTYxRTRGOEZEMTAwQzEzODM5IC8qIEdDRmluYWxpemF0aW9uQ2FsbGJhY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NGaW5hbGl6YXRpb25DYWxsYmFjay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjJDNjNBOTFFNEZBNDJDMDBDMTM4MzkgLyog
UnVubmluZ1Njb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJ1bm5pbmdT
Y29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJENEREQjE5ODMyRDM0MDA3
RDRCMTkgLyogRGVidWdnZXJTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBEZWJ1Z2dlclNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYyRDREREMxOTgzMkQzNDAwN0Q0QjE5IC8qIERlYnVnZ2VyU2NvcGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGVidWdnZXJTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjJENERERjE5ODMyRDkxMDA3RDRCMTkgLyogVHlwZVByb2ZpbGVyTG9nLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFR5cGVQcm9maWxlckxvZy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zMTE0LDYgKzMxMDQsNyBAQAogCQkwRkE3NjIwMTFEQjkyNDIzMDBC
N0EyRkQgLyogQ29sbGVjdGlvblNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENvbGxlY3Rpb25TY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkE3
NjIwMjFEQjkyNDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE11dGF0b3JTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQTc2MjAzMURCOTI0MjMwMEI3QTJGRCAvKiBNdXRhdG9yU3RhdGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTXV0YXRvclN0YXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQTc2MjA4MURCOTI4M0MwMEI3QTJGRCAvKiBIZWxwaW5n
R0NTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWxwaW5nR0NTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkE3NjIwQTFEQjk1OUY2MDBCN0Ey
RkQgLyogQWxsb2NhdGluZ1Njb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEFsbG9jYXRpbmdTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkE3QThF
OTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTdBOEVB
MThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMjI2LDEzICszMjE3LDYg
QEAKIAkJMEZDRUZBQUExODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFNhdmVSZXN0b3JlLmg7IHBhdGggPSBmdGwv
RlRMU2F2ZVJlc3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDRUZBREQx
ODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEZUTExvY2F0aW9uLmNwcDsgcGF0aCA9IGZ0bC9GVExMb2NhdGlvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0VGQURFMTgwNzM4QzAwMDQ3MkNF
NCAvKiBGVExMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExM
b2NhdGlvbi5oOyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGRDBFNUU1MUU0M0QzNDcwMDA2QUIwOCAvKiBDb2xsZWN0b3JQaGFzZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2xsZWN0b3JQaGFzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRDBFNUU2MUU0M0QzNDcwMDA2QUIwOCAv
KiBDb2xsZWN0b3JQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2xs
ZWN0b3JQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkQwRTVFNzFFNDNE
MzQ3MDAwNkFCMDggLyogR0NDb25kdWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gR0NDb25kdWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwRkQwRTVFODFFNDNEMzQ3MDAwNkFCMDggLyogR0NDb25kdWN0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gR0NDb25kdWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMEZEMEU1RUQxRTQ2OEE1NDAwMDZBQjA4IC8qIFN3ZWVwaW5nU2NvcGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3dlZXBpbmdTY29wZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRkQwRTVFRjFFNDZCRjIzMDAwNkFCMDggLyogUmVnaXN0ZXJT
dGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWdpc3RlclN0YXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRDBFNUYxMUU0NkM4QUQwMDA2QUIwOCAv
KiBDb2xsZWN0aW5nU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29s
bGVjdGluZ1Njb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDJDOTIzMTZE
MDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN0cnVjdHVyZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEcml2ZXIuY3BwOyBwYXRoID0gZGZnL0RG
R0RyaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIyMTQxMTVE
MEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcvREZHRHJpdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC00NzA2LDYgKzQ2OTAsOCBAQAogCQlDMjE4MUZDMDE4QTk0OEZCMDAyNUEy
MzUgLyogSlNFeHBvcnRUZXN0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBK
U0V4cG9ydFRlc3RzLmg7IHBhdGggPSBBUEkvdGVzdHMvSlNFeHBvcnRUZXN0cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDMjE4MUZDMTE4QTk0OEZCMDAyNUEyMzUgLyogSlNFeHBv
cnRUZXN0cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IEpTRXhw
b3J0VGVzdHMubW07IHBhdGggPSBBUEkvdGVzdHMvSlNFeHBvcnRUZXN0cy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNp
dG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNsb3RWaXNpdG9y
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzI0RDMxRTAxNjFDRDY5NTAwMkFB
NERCIC8qIEhlYXBTdGF0aXN0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEhlYXBTdGF0aXN0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzI0RDMxRTExNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBTdGF0aXN0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyNUQ3MDk5MTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEpTTWFuYWdlZFZhbHVl
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjVENzA5QTE2REU5OUY0MDBGQ0E2
QkMgLyogSlNNYW5hZ2VkVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNNYW5hZ2VkVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI1RjhCQ0Ix
NTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmNyZW1lbnRhbFN3ZWVwZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNTc2OCwxMSArNTc1NCw4IEBACiAJCQkJMEZEOEEzMTExN0Q0
MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5jcHAgKi8sCiAJCQkJMEZEOEEzMTIxN0Q0MzI2
QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5oICovLAogCQkJCTBGNjY0Q0U3MURBMzA0RUQwMEIw
MEExMSAvKiBDb2RlQmxvY2tTZXRJbmxpbmVzLmggKi8sCi0JCQkJMEZEMEU1RjExRTQ2QzhBRDAw
MDZBQjA4IC8qIENvbGxlY3RpbmdTY29wZS5oICovLAogCQkJCTBGQTc2MjAwMURCOTI0MjMwMEI3
QTJGRCAvKiBDb2xsZWN0aW9uU2NvcGUuY3BwICovLAogCQkJCTBGQTc2MjAxMURCOTI0MjMwMEI3
QTJGRCAvKiBDb2xsZWN0aW9uU2NvcGUuaCAqLywKLQkJCQkwRkQwRTVFNTFFNDNEMzQ3MDAwNkFC
MDggLyogQ29sbGVjdG9yUGhhc2UuY3BwICovLAotCQkJCTBGRDBFNUU2MUU0M0QzNDcwMDA2QUIw
OCAvKiBDb2xsZWN0b3JQaGFzZS5oICovLAogCQkJCTE0NkIxNERCMTJFQjVCMTIwMDFCRUMxQiAv
KiBDb25zZXJ2YXRpdmVSb290cy5jcHAgKi8sCiAJCQkJMTQ5REFBRjIxMkVCNTU5RDAwODNCMTJC
IC8qIENvbnNlcnZhdGl2ZVJvb3RzLmggKi8sCiAJCQkJMEY3REYxMkYxRTI5NzBENTAwOTU5NTFC
IC8qIENvbnN0cmFpbnRWb2xhdGlsaXR5LmggKi8sCkBAIC01NzkwLDEyICs1NzczLDggQEAKIAkJ
CQkyQUFDRTYzQTE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywK
IAkJCQkyQUFDRTYzQjE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8s
CiAJCQkJQkNCRTJDQUQxNEU5ODVBQTAwMDU5M0FEIC8qIEdDQXNzZXJ0aW9ucy5oICovLAotCQkJ
CTBGRDBFNUU3MUU0M0QzNDcwMDA2QUIwOCAvKiBHQ0NvbmR1Y3Rvci5jcHAgKi8sCi0JCQkJMEZE
MEU1RTgxRTQzRDM0NzAwMDZBQjA4IC8qIEdDQ29uZHVjdG9yLmggKi8sCiAJCQkJMEZCNDc2N0Mx
RDk5QUVBNzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0LmggKi8sCiAJCQkJMEZCNDc2N0Qx
RDk5QUVBNzAwOEVBNkNCIC8qIEdDRGVmZXJyYWxDb250ZXh0SW5saW5lcy5oICovLAotCQkJCTBG
MkM2M0E1MUU0RjhGRDEwMEMxMzgzOSAvKiBHQ0ZpbmFsaXphdGlvbkNhbGxiYWNrLmNwcCAqLywK
LQkJCQkwRjJDNjNBNjFFNEY4RkQxMDBDMTM4MzkgLyogR0NGaW5hbGl6YXRpb25DYWxsYmFjay5o
ICovLAogCQkJCTBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRl
ZC5oICovLAogCQkJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291
bnRlZElubGluZXMuaCAqLywKIAkJCQkwRjJCNjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNv
bWluZ1JlZkNvdW50ZWRTZXQuaCAqLywKQEAgLTU4MjksMTEgKzU4MDgsMTQgQEAKIAkJCQlBNTRD
MkFBRjFDNjU0NEQxMDBBMThENzggLyogSGVhcFNuYXBzaG90LmggKi8sCiAJCQkJQTUzMTFDMzQx
Qzc3Q0VBQzAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwICovLAogCQkJCUE1MzEx
QzM1MUM3N0NFQUMwMEU2QjFCNiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmggKi8sCisJCQkJQzI0
RDMxRTAxNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmNwcCAqLywKKwkJCQlDMjRE
MzFFMTE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3MuaCAqLywKIAkJCQlDMkU1MjZC
QjE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAqLywKIAkJCQlDMkU1MjZCQzE1OTBF
RjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmggKi8sCiAJCQkJMEZBREU2NzIxRDREMjNCQzAwNzY4
NDU3IC8qIEhlYXBVdGlsLmggKi8sCiAJCQkJRkU3QkE2MEQxQTFBN0NFQzAwRjFGN0I0IC8qIEhl
YXBWZXJpZmllci5jcHAgKi8sCiAJCQkJRkU3QkE2MEUxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBW
ZXJpZmllci5oICovLAorCQkJCTBGQTc2MjA4MURCOTI4M0MwMEI3QTJGRCAvKiBIZWxwaW5nR0NT
Y29wZS5oICovLAogCQkJCUMyNUY4QkNCMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3
ZWVwZXIuY3BwICovLAogCQkJCUMyNUY4QkNDMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRh
bFN3ZWVwZXIuaCAqLywKIAkJCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJv
dXRpbmVTZXQuY3BwICovLApAQCAtNTg3MSw5ICs1ODUzLDcgQEAKIAkJCQkwRkE3NjIwMzFEQjky
NDIzMDBCN0EyRkQgLyogTXV0YXRvclN0YXRlLmggKi8sCiAJCQkJQUREQjFGNjIxOEQ3N0RCNzAw
OUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKIAkJCQkwRkJCNzNCNjFERUYzQUFDMDAyQzAw
OUUgLyogUHJldmVudENvbGxlY3Rpb25TY29wZS5oICovLAotCQkJCTBGRDBFNUVGMUU0NkJGMjMw
MDA2QUIwOCAvKiBSZWdpc3RlclN0YXRlLmggKi8sCiAJCQkJMEY3Q0Y5NEUxREJFRUU4NjAwOThD
QzEyIC8qIFJlbGVhc2VIZWFwQWNjZXNzU2NvcGUuaCAqLywKLQkJCQkwRjJDNjNBOTFFNEZBNDJD
MDBDMTM4MzkgLyogUnVubmluZ1Njb3BlLmggKi8sCiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVF
ODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMg
LyogU2xvdFZpc2l0b3IuaCAqLywKIAkJCQkwRkNCNDA4NTE1QzBBM0MzMDA0ODkzMkIgLyogU2xv
dFZpc2l0b3JJbmxpbmVzLmggKi8sCkBAIC01ODg4LDcgKzU4NjgsNiBAQAogCQkJCTBGN0RGMTMx
MUUyOTcwRDUwMDk1OTUxQiAvKiBTdWJzcGFjZS5jcHAgKi8sCiAJCQkJMEY3REYxMzIxRTI5NzBE
NTAwOTU5NTFCIC8qIFN1YnNwYWNlLmggKi8sCiAJCQkJMEY3REYxMzMxRTI5NzBENTAwOTU5NTFC
IC8qIFN1YnNwYWNlSW5saW5lcy5oICovLAotCQkJCTBGRDBFNUVEMUU0NjhBNTQwMDA2QUIwOCAv
KiBTd2VlcGluZ1Njb3BlLmggKi8sCiAJCQkJMEYxRkIzOEExRTE3M0E2MjAwQTlCRTUwIC8qIFN5
bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5jcHAgKi8sCiAJCQkJMEYxRkIz
OEIxRTE3M0E2MjAwQTlCRTUwIC8qIFN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVk
dWxlci5oICovLAogCQkJCTE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0
ZXIuaCAqLywKQEAgLTgwMDksNyArNzk4OCw2IEBACiAJCQkJMEY2QjhBRTMxQzRFRkUxNzAwOTY5
MDUyIC8qIEIzQnJlYWtDcml0aWNhbEVkZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQlEQzlBMEMy
MDFEMkQ5Q0IzMDA4NTEyNEUgLyogQjNDYXNlQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJREM5QTBDMUYxRDJEOUNCMTAwODUxMjRFIC8qIEIzQ2FzZUNvbGxlY3Rpb25JbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkwRkQwRTVFRTFFNDY4QTU3MDAwNkFCMDggLyogU3dlZXBpbmdT
Y29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhERkExQkU5NkFBODAwMTNDODhGIC8qIEIz
Q0NhbGxWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzM0ZDRkIxQzE2MjVCRTAwMzIzRjY3
IC8qIEIzQ0ZHLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUwNjFCREFDREFDMDA4MEZGNzQg
LyogQjNDaGVja1NwZWNpYWwuaCBpbiBIZWFkZXJzICovLApAQCAtODI4NSw3ICs4MjYzLDYgQEAK
IAkJCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyMDE3ODAxRENBREMzNTAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMDE3ODIxRENBREQ0MjAwRUE1OTUwIC8qIERGR0Zsb3dN
YXAuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGMkM2M0FBMUU0RkE0MkUwMEMxMzgzOSAvKiBSdW5u
aW5nU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUQzMzk3MTdGRkM0RTYwMDczQzJCQyAv
KiBERkdGbHVzaGVkQXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0Y4MTdBMEI4Q0MwMDc3
M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyREQ4MTUxQUIz
RDhCRTAwQkJCOEU4IC8qIERGR0ZvckFsbEtpbGxzLmggaW4gSGVhZGVycyAqLywKQEAgLTg1Nzgs
MTAgKzg1NTUsMTEgQEAKIAkJCQlBNTM5OEZBQjFDNzUwREE0MDA2MEE5NjMgLyogSGVhcFByb2Zp
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTRDMkFCMTFDNjU0NEYyMDBBMThENzggLyogSGVh
cFNuYXBzaG90LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTMxMUMzNjFDNzdDRUM1MDBFNkIxQjYg
LyogSGVhcFNuYXBzaG90QnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzI0RDMxRTMxNjFD
RDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkU1
MjZCRTE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkw
RkQwRTVFQTFFNDNEMzREMDAwNkFCMDggLyogR0NDb25kdWN0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQURFNjczMUQ0RDIzQkUwMDc2ODQ1NyAvKiBIZWFwVXRpbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkU3QkE2MTAxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZBNzYyMDkxREI5MjgzRTAwQjdBMkZEIC8qIEhlbHBpbmdHQ1Njb3BlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBENTE0QkJEMjRCMDBCRkUyNzIgLyogSG9zdENhbGxS
ZXR1cm5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREMyMTQzMDcxQ0EzMkU1NTAwMEE4ODY5
IC8qIElDU3RhdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDBGMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTg2NDIsNyArODYyMCw2IEBACiAJ
CQkJQTFCOUUyM0UxQjRFMEQ2NzAwQkM3RkVEIC8qIEludGxDb2xsYXRvclByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTE4MTkzRTQxQjRFMENEQjAwRkMxMDI5IC8qIEludGxDb2xsYXRv
clByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNTg3RDZFMUI0REMxNDEwMEQ2
OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGRDBFNUU5
MUU0M0QzNDkwMDA2QUIwOCAvKiBDb2xsZWN0b3JQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTE1ODdENzAxQjREQzE0MTAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTU4N0Q3NTFCNERDMUM2MDBENjk4NDkgLyogSW50bERh
dGVUaW1lRm9ybWF0Q29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTU4N0Q3
MjFCNERDMTQxMDBENjk4NDkgLyogSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTg2NTIsNyArODYyOSw2IEBACiAJCQkJQTEyNTg0NkUxQjQ1QTM2MDAwQ0M3
RjZDIC8qIEludGxOdW1iZXJGb3JtYXRDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUExRDc5MzAxMUI0Mzg2NEIwMDQ1MTZGNSAvKiBJbnRsTnVtYmVyRm9ybWF0UHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTI1ODQ2RjFCNDVBMzYwMDBDQzdGNkMgLyogSW50bE51
bWJlckZvcm1hdFByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGRDBFNUYwMUU0
NkJGMjUwMDA2QUIwOCAvKiBSZWdpc3RlclN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTJC
QkZGMjFCMDQ0QThCMDA2NjRCNjkgLyogSW50bE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NzA4RUJFMjQxQ0U4RjM1ODAwNDUzMTQ2IC8qIEludGxPYmplY3RJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjBCRDgwMTE0OEVBNkYyMDAxMTJCMkYgLyogSW50cmluc2ljLmggaW4gSGVh
ZGVycyAqLywKQEAgLTkxMTgsNyArOTA5NCw2IEBACiAJCQkJMkFBQUEzMTIxOEJENDlEMTAwMzk0
Q0M4IC8qIFN0cnVjdHVyZUlEQmxvYi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFGNzM4MkQxOEJC
QkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKLQkJCQkwRjJDNjNBODFFNEY4RkQ1MDBDMTM4MzkgLyogR0NGaW5hbGl6YXRpb25DYWxsYmFj
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJGRTE4QTQxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVj
dHVyZVJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjBCQTkyRDE2QkIxQzE1MDBCM0FF
QTIgLyogU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkz
MzJBNTE0Q0E3REREMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKQEAg
LTkyMzQsNyArOTIwOSw2IEBACiAJCQkJQUQyRkNCRUQxREI1OERBRDAwQjNFNzM2IC8qIFdlYkFz
c2VtYmx5Q29tcGlsZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEMkZD
QzE2MURCNTlDQjIwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0cnVjdG9y
Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRUYxREI1OERBRDAwQjNFNzM2IC8qIFdl
YkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkQw
RTVGMjFFNDZDOEFGMDAwNkFCMDggLyogQ29sbGVjdGluZ1Njb3BlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBRDJGQ0MxNzFEQjU5Q0IyMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQ
cm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDQ5MzdENDFEREQyN0RFMDA3N0M4
MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQyRkNCRjEx
REI1OERBRDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5oIGluIEhl
YWRlcnMgKi8sCkBAIC0xMDIwOSw2ICsxMDE4Myw3IEBACiAJCQkJQTUzOThGQUMxQzc1MERBNjAw
NjBBOTYzIC8qIEhlYXBQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTRDMkFCMDFD
NjU0NEVFMDBBMThENzggLyogSGVhcFNuYXBzaG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
MzExQzM3MUM3N0NFQ0EwMEU2QjFCNiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUMyNEQzMUUyMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkU1MjZCRDE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRp
bWVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFN0JBNjBGMUExQTdDRUMwMEYxRjdCNCAvKiBI
ZWFwVmVyaWZpZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwRDQxNEJCRDI0OTAwQkZF
MjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDI3Myw3
ICsxMDI0OCw2IEBACiAJCQkJMEZBRjdFRkQxNjVCQTkxQjAwMEM4NDU1IC8qIEpJVERpc2Fzc2Vt
Ymxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTE4N0EwRTFDMDMwRDY0MDAzOEJCQ0EgLyog
SklURGl2R2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MDgzMTRCQTU3MzEw
MEJGRTI3MiAvKiBKSVRFeGNlcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGRDBFNUVC
MUU0M0QzNTAwMDA2QUIwOCAvKiBDb2xsZWN0b3JQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkIxNEUxRTE4MTI0QUNFMDA5QjZCNEQgLyogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkUzQTA2QkQxQzExMDQwRDAwMzkwRkREIC8qIEpJVExlZnRT
aGlmdEdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTE4N0EwMTFCRkJFNTVFMDAz
OEJCQ0EgLyogSklUTXVsR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTA1MjEsNyAr
MTA0OTUsNiBAQAogCQkJCTY1NDBDN0EwMUI4MkUxQzMwMDBGNkI3OSAvKiBSZWdpc3RlckF0T2Zm
c2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NDBDN0ExMUI4MkUxQzMwMDBGNkI3OSAvKiBS
ZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQxNTE4MTQ2
RDcwMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEZEMEU1
RUMxRTQzRDM1MzAwMDZBQjA4IC8qIEdDQ29uZHVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE1N0QyM0VEMTg5MUI1NTQwMDMxQzdGQSAvKiBSZWd1bGFyRXhwcmVzc2lvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5OTJBQkNGOTFCRUE5QkQyMDA2NDAzQTAgLyogUmVtb3RlQXV0b21hdGlv
blRhcmdldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTJGNTZCNDFFNEU4NEE0MDAzNTk1M0Ig
LyogUmVtb3RlQ29ubmVjdGlvblRvVGFyZ2V0Q29jb2EubW0gaW4gU291cmNlcyAqLywKQEAgLTEw
NTg0LDcgKzEwNTU3LDYgQEAKIAkJCQk3MDVCNDFBQjFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9s
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwNUI0MUFEMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1i
b2xDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDVCNDFBRjFBNkU1MDFFMDA3
MTY3NTcgLyogU3ltYm9sT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGMkM2M0E3MUU0
RjhGRDMwMEMxMzgzOSAvKiBHQ0ZpbmFsaXphdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTcwNUI0MUIxMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xQcm90b3R5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY5MTlEMjgxNTg1Njc3MzAwNEE0RTdEIC8qIFN5bWJvbFRhYmxl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMUZCMzhFMUUxNzNBNjUwMEE5QkU1MCAvKiBTeW5j
aHJvbm91c1N0b3BUaGVXb3JsZE11dGF0b3JTY2hlZHVsZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDFhYTQy
NDllZDVkODZiYTA4ZjIzZTIxYjk2ZmI3ZGJkZTljZGFkZjEuLjE2YzU4NzE4NjQyNGUyODYxZDM3
MzNiMWY2N2UyMTc5YWZmODUwZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCkBAIC0yNTMyLDEyICsyNTMyLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgICAgIHZpc2l0b3IucmVwb3J0
RXh0cmFNZW1vcnlWaXNpdGVkKG1faml0Q29kZS0+c2l6ZSgpKTsKICAgICBpZiAobV9pbnN0cnVj
dGlvbnMuc2l6ZSgpKSB7CiAgICAgICAgIHVuc2lnbmVkIHJlZkNvdW50ID0gbV9pbnN0cnVjdGlv
bnMucmVmQ291bnQoKTsKLSAgICAgICAgaWYgKCFyZWZDb3VudCkgewotICAgICAgICAgICAgZGF0
YUxvZygiQ29kZUJsb2NrOiAiLCBSYXdQb2ludGVyKHRoaXMpLCAiXG4iKTsKLSAgICAgICAgICAg
IGRhdGFMb2coIm1faW5zdHJ1Y3Rpb25zLmRhdGEoKTogIiwgUmF3UG9pbnRlcihtX2luc3RydWN0
aW9ucy5kYXRhKCkpLCAiXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coInJlZkNvdW50OiAiLCBy
ZWZDb3VudCwgIlxuIik7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlZkNvdW50KTsKICAgICAgICAg
dmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQobV9pbnN0cnVjdGlvbnMuc2l6ZSgpICog
c2l6ZW9mKEluc3RydWN0aW9uKSAvIHJlZkNvdW50KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKaW5kZXggY2VmOTkwY2I0ODMzYTZiYjk0NzFiZDA4
YTUwNGU1NWZiNDdkZjQ1OC4uYWYzYjYzZTA4MmRlOGI2OTI5Njc3NDczYjM2ZGVlYmMzOTNhZmFm
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKQEAgLTQwLDcg
KzQwLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBXb3JrbGlz
dDo6VGhyZWFkQm9keSA6IHB1YmxpYyBBdXRvbWF0aWNUaHJlYWQgewogcHVibGljOgotICAgIFRo
cmVhZEJvZHkoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgV29ya2xpc3QmIHdvcmtsaXN0
LCBUaHJlYWREYXRhJiBkYXRhLCBCb3g8TG9jaz4gbG9jaywgUmVmUHRyPEF1dG9tYXRpY1RocmVh
ZENvbmRpdGlvbj4gY29uZGl0aW9uLCBpbnQgcmVsYXRpdmVQcmlvcml0eSkKKyAgICBUaHJlYWRC
b2R5KGNvbnN0IExvY2tIb2xkZXImIGxvY2tlciwgV29ya2xpc3QmIHdvcmtsaXN0LCBUaHJlYWRE
YXRhJiBkYXRhLCBCb3g8TG9jaz4gbG9jaywgUmVmUHRyPEF1dG9tYXRpY1RocmVhZENvbmRpdGlv
bj4gY29uZGl0aW9uLCBpbnQgcmVsYXRpdmVQcmlvcml0eSkKICAgICAgICAgOiBBdXRvbWF0aWNU
aHJlYWQobG9ja2VyLCBsb2NrLCBjb25kaXRpb24pCiAgICAgICAgICwgbV93b3JrbGlzdCh3b3Jr
bGlzdCkKICAgICAgICAgLCBtX2RhdGEoZGF0YSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgog
ICAgIH0KICAgICAKIHByb3RlY3RlZDoKLSAgICBQb2xsUmVzdWx0IHBvbGwoY29uc3QgQWJzdHJh
Y3RMb2NrZXImIGxvY2tlcikgb3ZlcnJpZGUKKyAgICBQb2xsUmVzdWx0IHBvbGwoY29uc3QgTG9j
a0hvbGRlciYgbG9ja2VyKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgaWYgKG1fd29ya2xpc3Qu
bV9xdWV1ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V2FpdDsK
QEAgLTE1MCw3ICsxNTAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fbG9uZ0xpdmVkU3RhdGUg
PSBzdGQ6Om1ha2VfdW5pcXVlPExvbmdMaXZlZFN0YXRlPigpOwogICAgIH0KICAgICAKLSAgICB2
b2lkIHRocmVhZElzU3RvcHBpbmcoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBvdmVycmlkZQorICAg
IHZvaWQgdGhyZWFkSXNTdG9wcGluZyhjb25zdCBMb2NrSG9sZGVyJikgb3ZlcnJpZGUKICAgICB7
CiAgICAgICAgIC8vIFdlJ3JlIGhvbGRpbmcgdGhlIFdvcmtsaXN0OjptX2xvY2ssIHNvIHdlIHNo
b3VsZCBiZSBjYXJlZnVsIG5vdCB0byBkZWFkbG9jay4KICAgICAgICAgCkBAIC00NzksNyArNDc5
LDcgQEAgdm9pZCBXb3JrbGlzdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgIGR1
bXAobG9ja2VyLCBvdXQpOwogfQogCi12b2lkIFdvcmtsaXN0OjpkdW1wKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiwgUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3ZvaWQgV29ya2xpc3Q6OmR1bXAoY29u
c3QgTG9ja0hvbGRlciYsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50
KAogICAgICAgICAiV29ya2xpc3QoIiwgUmF3UG9pbnRlcih0aGlzKSwgIilbUXVldWUgTGVuZ3Ro
ID0gIiwgbV9xdWV1ZS5zaXplKCksCkBAIC01MzUsNDEgKzUzNSw2IEBAIFdvcmtsaXN0JiBlbnN1
cmVHbG9iYWxXb3JrbGlzdEZvcihDb21waWxhdGlvbk1vZGUgbW9kZSkKICAgICByZXR1cm4gZW5z
dXJlR2xvYmFsREZHV29ya2xpc3QoKTsKIH0KIAotdW5zaWduZWQgbnVtYmVyT2ZXb3JrbGlzdHMo
KSB7IHJldHVybiAyOyB9Ci0KLVdvcmtsaXN0JiBlbnN1cmVXb3JrbGlzdEZvckluZGV4KHVuc2ln
bmVkIGluZGV4KQotewotICAgIHN3aXRjaCAoaW5kZXgpIHsKLSAgICBjYXNlIDA6Ci0gICAgICAg
IHJldHVybiBlbnN1cmVHbG9iYWxERkdXb3JrbGlzdCgpOwotICAgIGNhc2UgMToKLSAgICAgICAg
cmV0dXJuIGVuc3VyZUdsb2JhbEZUTFdvcmtsaXN0KCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGVuc3VyZUdsb2Jh
bERGR1dvcmtsaXN0KCk7Ci0gICAgfQotfQotCi1Xb3JrbGlzdCogZXhpc3RpbmdXb3JrbGlzdEZv
ckluZGV4T3JOdWxsKHVuc2lnbmVkIGluZGV4KQotewotICAgIHN3aXRjaCAoaW5kZXgpIHsKLSAg
ICBjYXNlIDA6Ci0gICAgICAgIHJldHVybiBleGlzdGluZ0dsb2JhbERGR1dvcmtsaXN0T3JOdWxs
KCk7Ci0gICAgY2FzZSAxOgotICAgICAgICByZXR1cm4gZXhpc3RpbmdHbG9iYWxGVExXb3JrbGlz
dE9yTnVsbCgpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotV29ya2xpc3QmIGV4aXN0aW5n
V29ya2xpc3RGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICBXb3JrbGlzdCogcmVzdWx0
ID0gZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4T3JOdWxsKGluZGV4KTsKLSAgICBSRUxFQVNFX0FT
U0VSVChyZXN1bHQpOwotICAgIHJldHVybiAqcmVzdWx0OwotfQotCiB2b2lkIGNvbXBsZXRlQWxs
UGxhbnNGb3JWTShWTSYgdm0pCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJP
ZldvcmtsaXN0cygpOyBpLS07KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dvcmtsaXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0
LmgKaW5kZXggZWI4MjgyY2Q0ZTQxODAwMzAyNWEzMDkzZGMzYmIxYTkyMTAwMzIzNi4uMjhkOWFi
ZjRhMzhhMDNhZGZhYTMxZWZhYzJkMzQ2MWU0YjcwMjA1MiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuaApAQCAtOTMsNyArOTMsNyBAQCBwcml2YXRlOgogICAgIAogICAg
IHZvaWQgcmVtb3ZlQWxsUmVhZHlQbGFuc0ZvclZNKFZNJiwgVmVjdG9yPFJlZlB0cjxQbGFuPiwg
OD4mKTsKIAotICAgIHZvaWQgZHVtcChjb25zdCBBYnN0cmFjdExvY2tlciYsIFByaW50U3RyZWFt
JikgY29uc3Q7CisgICAgdm9pZCBkdW1wKGNvbnN0IExvY2tIb2xkZXImLCBQcmludFN0cmVhbSYp
IGNvbnN0OwogICAgIAogICAgIENTdHJpbmcgbV90aHJlYWROYW1lOwogICAgIApAQCAtMTMyLDEw
ICsxMzIsMzcgQEAgV29ya2xpc3QqIGV4aXN0aW5nR2xvYmFsRlRMV29ya2xpc3RPck51bGwoKTsK
IFdvcmtsaXN0JiBlbnN1cmVHbG9iYWxXb3JrbGlzdEZvcihDb21waWxhdGlvbk1vZGUpOwogCiAv
LyBTaW1wbGlmeSBkb2luZyB0aGluZ3MgZm9yIGFsbCB3b3JrbGlzdHMuCi11bnNpZ25lZCBudW1i
ZXJPZldvcmtsaXN0cygpOwotV29ya2xpc3QmIGVuc3VyZVdvcmtsaXN0Rm9ySW5kZXgodW5zaWdu
ZWQgaW5kZXgpOwotV29ya2xpc3QqIGV4aXN0aW5nV29ya2xpc3RGb3JJbmRleE9yTnVsbCh1bnNp
Z25lZCBpbmRleCk7Ci1Xb3JrbGlzdCYgZXhpc3RpbmdXb3JrbGlzdEZvckluZGV4KHVuc2lnbmVk
IGluZGV4KTsKK2lubGluZSB1bnNpZ25lZCBudW1iZXJPZldvcmtsaXN0cygpIHsgcmV0dXJuIDI7
IH0KK2lubGluZSBXb3JrbGlzdCYgZW5zdXJlV29ya2xpc3RGb3JJbmRleCh1bnNpZ25lZCBpbmRl
eCkKK3sKKyAgICBzd2l0Y2ggKGluZGV4KSB7CisgICAgY2FzZSAwOgorICAgICAgICByZXR1cm4g
ZW5zdXJlR2xvYmFsREZHV29ya2xpc3QoKTsKKyAgICBjYXNlIDE6CisgICAgICAgIHJldHVybiBl
bnN1cmVHbG9iYWxGVExXb3JrbGlzdCgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBlbnN1cmVHbG9iYWxERkdXb3Jr
bGlzdCgpOworICAgIH0KK30KK2lubGluZSBXb3JrbGlzdCogZXhpc3RpbmdXb3JrbGlzdEZvcklu
ZGV4T3JOdWxsKHVuc2lnbmVkIGluZGV4KQoreworICAgIHN3aXRjaCAoaW5kZXgpIHsKKyAgICBj
YXNlIDA6CisgICAgICAgIHJldHVybiBleGlzdGluZ0dsb2JhbERGR1dvcmtsaXN0T3JOdWxsKCk7
CisgICAgY2FzZSAxOgorICAgICAgICByZXR1cm4gZXhpc3RpbmdHbG9iYWxGVExXb3JrbGlzdE9y
TnVsbCgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KK2lubGluZSBXb3JrbGlzdCYgZXhpc3Rp
bmdXb3JrbGlzdEZvckluZGV4KHVuc2lnbmVkIGluZGV4KQoreworICAgIFdvcmtsaXN0KiByZXN1
bHQgPSBleGlzdGluZ1dvcmtsaXN0Rm9ySW5kZXhPck51bGwoaW5kZXgpOworICAgIFJFTEVBU0Vf
QVNTRVJUKHJlc3VsdCk7CisgICAgcmV0dXJuICpyZXN1bHQ7Cit9CiAKICNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29s
bGVjdGluZ1Njb3BlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2xsZWN0aW5nU2Nv
cGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFmODYwYWFiZWUzYzFkOTU3YmFj
MDg4MDlhMjNlYTU3NzE1MGU1OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2xsZWN0aW5nU2NvcGUuaAor
KysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgIkhlYXAuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvbGxlY3Rp
bmdTY29wZSB7Ci1wdWJsaWM6Ci0gICAgQ29sbGVjdGluZ1Njb3BlKEhlYXAmIGhlYXApCi0gICAg
ICAgIDogbV9oZWFwKGhlYXApCi0gICAgICAgICwgbV9vbGRTdGF0ZShtX2hlYXAubV9tdXRhdG9y
U3RhdGUpCi0gICAgewotICAgICAgICBtX2hlYXAubV9tdXRhdG9yU3RhdGUgPSBNdXRhdG9yU3Rh
dGU6OkNvbGxlY3Rpbmc7Ci0gICAgfQotICAgIAotICAgIH5Db2xsZWN0aW5nU2NvcGUoKQotICAg
IHsKLSAgICAgICAgbV9oZWFwLm1fbXV0YXRvclN0YXRlID0gbV9vbGRTdGF0ZTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgSGVhcCYgbV9oZWFwOwotICAgIE11dGF0b3JTdGF0ZSBtX29sZFN0YXRl
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvbGxlY3RvclBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvbGxlY3RvclBoYXNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjEw
ZmVkMWQwMzNjZTExMTczZTJjZDI0MmFjYmE1NGRmYzc0Y2FhZS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b2xsZWN0b3JQaGFzZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvbGxlY3RvclBoYXNlLmgiCi0K
LSNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWJvb2wg
d29ybGRTaG91bGRCZVN1c3BlbmRlZChDb2xsZWN0b3JQaGFzZSBwaGFzZSkKLXsKLSAgICBzd2l0
Y2ggKHBoYXNlKSB7Ci0gICAgY2FzZSBDb2xsZWN0b3JQaGFzZTo6Tm90UnVubmluZzoKLSAgICBj
YXNlIENvbGxlY3RvclBoYXNlOjpDb25jdXJyZW50OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIAotICAgIGNhc2UgQ29sbGVjdG9yUGhhc2U6OkJlZ2luOgotICAgIGNhc2UgQ29sbGVj
dG9yUGhhc2U6OkZpeHBvaW50OgotICAgIGNhc2UgQ29sbGVjdG9yUGhhc2U6OlJlbG9vcDoKLSAg
ICBjYXNlIENvbGxlY3RvclBoYXNlOjpFbmQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLW5hbWVzcGFjZSBXVEYgewotCi11c2luZyBu
YW1lc3BhY2UgSlNDOwotCi12b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlND
OjpDb2xsZWN0b3JQaGFzZSBwaGFzZSkKLXsKLSAgICBzd2l0Y2ggKHBoYXNlKSB7Ci0gICAgY2Fz
ZSBDb2xsZWN0b3JQaGFzZTo6Tm90UnVubmluZzoKLSAgICAgICAgb3V0LnByaW50KCJOb3RSdW5u
aW5nIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENvbGxlY3RvclBoYXNlOjpCZWdpbjoK
LSAgICAgICAgb3V0LnByaW50KCJCZWdpbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBD
b2xsZWN0b3JQaGFzZTo6Rml4cG9pbnQ6Ci0gICAgICAgIG91dC5wcmludCgiRml4cG9pbnQiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ29sbGVjdG9yUGhhc2U6OkNvbmN1cnJlbnQ6Ci0g
ICAgICAgIG91dC5wcmludCgiQ29uY3VycmVudCIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBDb2xsZWN0b3JQaGFzZTo6UmVsb29wOgotICAgICAgICBvdXQucHJpbnQoIlJlbG9vcCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDb2xsZWN0b3JQaGFzZTo6RW5kOgotICAgICAgICBv
dXQucHJpbnQoIkVuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2xsZWN0b3JQaGFzZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29sbGVjdG9yUGhhc2UuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZDVhMDAzNTZlNzczZmQyZTlkMjJiMmQ1YTI3Zjg2YTkwYTljNzZkYi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Db2xsZWN0b3JQaGFzZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi1uYW1lc3BhY2UgSlNDIHsKLQot
Ly8gV2UgdHJhY2sgY29sbGVjdG9yIHBoYXNlIGluIG9yZGVyIHRvIGFsbG93IGVpdGhlciB0aGUg
Y29sbGVjdG9yIHRocmVhZCBvciB0aGUgbXV0YXRvciB0aHJlYWQgdG8KLS8vIGp1bXAgaW4gYW5k
IGRvIHdvcmsuIFRoZSBjb2xsZWN0b3IgYW5kIG11dGF0b3IgdHJhZGUgdGhlIGNvbm4KLS8vICho
dHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db25uXyhuYXV0aWNhbCkpIHdpdGggZWFjaCBv
dGhlciBiYXNlZCBvbiB3aG8gaXMgYXZhaWxhYmxlIHRvIGRvIHdvcmssCi0vLyBhbmQgdGhleSB1
c2UgdGhlIHBoYXNlIHRvIGhlbHAgZWFjaCBvdGhlciBrbm93IHdoYXQgdG8gZG8gb25jZSB0aGV5
IHRha2UgdGhlIGNvbm4uCi0vLwotLy8gVGhlIGNvbGxlY3RvciByZWxpbnF1aXNoZXMgdGhlIGNv
bm4gd2hlbmV2ZXIgaXQgc3RvcFRoZU11dGF0b3IncyBhbmQgdGhlIG11dGF0b3IgaXMgcnVubmlu
Zy4gVGhlbiB0aGUKLS8vIGNvbGxlY3RvciB0aHJlYWQgZ29lcyB0byBzbGVlcC4KLS8vCi0vLyBU
aGUgbXV0YXRvciByZWxpbnF1aXNoZXMgdGhlIGNvbm4gd2hlbmV2ZXIgaXQgcmVsZWFzZUFjY2Vz
cydzLiBUaGF0IHdha2VzIHVwIHRoZSBjb2xsZWN0b3IgdGhyZWFkLgotZW51bSBjbGFzcyBDb2xs
ZWN0b3JQaGFzZSA6IHVpbnQ4X3QgewotICAgIC8vIFdlIHVzZSB0aGlzIHBoYXNlIHdoZW4gdGhl
IGNvbGxlY3RvciBpcyBub3QgcnVubmluZyBhdCBhbGwuIEFmdGVyIHRoaXMgc3RhdGUgaXMgQmVn
aW4uCi0gICAgTm90UnVubmluZywKLSAgICAKLSAgICAvLyBUaGlzIGlzIGV2ZXJ5dGhpbmcgZnJv
bSB3aGVuIHRoZSBjb2xsZWN0b3IgYmVnaW5zIHRvIHdoZW4gaXQgZmlyc3QgeWllbGRzIHRvIHRo
ZSBtdXRhdG9yIGZvcgotICAgIC8vIG1hcmtpbmcuIEFmdGVyIHRoaXMgaXMgRml4cG9pbnQuCi0g
ICAgQmVnaW4sCi0gICAgCi0gICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIHNob3VsZCB0cnkgdG8g
ZG8gc29tZSBwcm9ncmVzcyB3aXRoIHRoZSB3b3JsZCBzdG9wcGVkLiBUaGlzIHVzdWFsbHkgbWVh
bnMKLSAgICAvLyBkb2luZyBhbiBpdGVyYXRpb24gb2YgTWFya2luZ0NvbnN0cmFpbnRTZXQ6OmV4
ZWN1dGVDb252ZXJnZW5jZSwgYnV0IGl0IGNvdWxkIGFsc28gbWVhbiBtYXJraW5nCi0gICAgLy8g
d2l0aCB0aGUgd29ybGQgc3RvcHBlZC4gQWZ0ZXIgdGhpcyBpcyBlaXRoZXIgQ29uY3VycmVudCBv
ciBFbmQuCi0gICAgRml4cG9pbnQsCi0gICAgCi0gICAgLy8gSW4gdGhpcyBzdGF0ZSB0aGUgY29s
bGVjdG9yIGlzIHJlbHlpbmcgb24gdGhlIHBhcmFsbGVsIGhlbHBlcnMgYW5kIGluY3JlbWVudGFs
IG11dGF0b3Igd29yayB0bwotICAgIC8vIG1ha2UgcHJvZ3Jlc3MuIEFmdGVyIHRoaXMgaXMgUmVs
b29wLCBvbmNlIG1hcmtpbmcgc3RhbGxzLgotICAgIENvbmN1cnJlbnQsCi0gICAgICAgIAotICAg
IC8vIFdlIGRpZCBzb21lIGNvbmN1cnJlbnQgbWFya2luZyBhbmQgbm93IHdlIHJhbiBvdXQgb2Yg
d29yay4gVGhpcyBwaGFzZSBwcmVwYXJlcyB0aGUgR0MgZm9yIGFub3RoZXIKLSAgICAvLyBGaXhw
b2ludC4gQWZ0ZXIgdGhpcyBpcyBGaXhwb2ludC4KLSAgICBSZWxvb3AsCi0gICAgCi0gICAgLy8g
VGhlIGNvbGxlY3RvciBpcyB0cnlpbmcgdG8gZmluaXNoIHVwLiBBZnRlciB0aGlzIHN0YXRlIGlz
IE5vdFJ1bm5pbmcuCi0gICAgRW5kCi19OwotCi1ib29sIHdvcmxkU2hvdWxkQmVTdXNwZW5kZWQo
Q29sbGVjdG9yUGhhc2UgcGhhc2UpOwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotbmFtZXNwYWNl
IFdURiB7Ci0KLWNsYXNzIFByaW50U3RyZWFtOwotCi12b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mLCBKU0M6OkNvbGxlY3RvclBoYXNlKTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0VkZW5HQ0FjdGl2aXR5Q2FsbGJh
Y2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRWRlbkdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAKaW5kZXggMDdlNmM3YTNmMDg1NzZlMTQzN2YyODFlNTM3NWVjMzYwYzNjZDhlNy4uMDE0
OTA1YTI0NzdiN2UwOTI5YjI1YjdiZWU0ZTQ0NjViMzRmOGY4YSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5jcHAKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDUsNyArNDUsNyBAQCB2b2lkIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2s6OmRvQ29sbGVjdGlvbigp
CiAKIGRvdWJsZSBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrOjpsYXN0R0NMZW5ndGgoKQogewotICAg
IHJldHVybiBtX3ZtLT5oZWFwLmxhc3RFZGVuR0NMZW5ndGgoKS5zZWNvbmRzKCk7CisgICAgcmV0
dXJuIG1fdm0tPmhlYXAubGFzdEVkZW5HQ0xlbmd0aCgpOwogfQogCiBkb3VibGUgRWRlbkdDQWN0
aXZpdHlDYWxsYmFjazo6ZGVhdGhSYXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0Z1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5jcHAKaW5kZXggZTU3ZGQzYTFjNzk3MTBm
MTI1ODZhOTAzODcxN2FkZDRkYjY2MTM5ZC4uM2QxNTQ1ZmYwZWU1MGVhYzZiZWE2MGE3ZjE4NjBm
MzIxNWY3NGFlYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnVsbEdD
QWN0aXZpdHlDYWxsYmFjay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnVs
bEdDQWN0aXZpdHlDYWxsYmFjay5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE0LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNyArNTAsNyBAQCB2b2lkIEZ1bGxHQ0Fj
dGl2aXR5Q2FsbGJhY2s6OmRvQ29sbGVjdGlvbigpCiAgICAgZG91YmxlIHN0YXJ0VGltZSA9IFdU
Rjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAgICAgaWYgKGhlYXAuaXNQYWdlZE91
dChzdGFydFRpbWUgKyBwYWdpbmdUaW1lT3V0KSkgewogICAgICAgICBjYW5jZWwoKTsKLSAgICAg
ICAgaGVhcC5pbmNyZWFzZUxhc3RGdWxsR0NMZW5ndGgoU2Vjb25kcyhwYWdpbmdUaW1lT3V0KSk7
CisgICAgICAgIGhlYXAuaW5jcmVhc2VMYXN0RnVsbEdDTGVuZ3RoKHBhZ2luZ1RpbWVPdXQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgRnVs
bEdDQWN0aXZpdHlDYWxsYmFjazo6ZG9Db2xsZWN0aW9uKCkKIAogZG91YmxlIEZ1bGxHQ0FjdGl2
aXR5Q2FsbGJhY2s6Omxhc3RHQ0xlbmd0aCgpCiB7Ci0gICAgcmV0dXJuIG1fdm0tPmhlYXAubGFz
dEZ1bGxHQ0xlbmd0aCgpLnNlY29uZHMoKTsKKyAgICByZXR1cm4gbV92bS0+aGVhcC5sYXN0RnVs
bEdDTGVuZ3RoKCk7CiB9CiAKIGRvdWJsZSBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrOjpkZWF0aFJh
dGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NDb25kdWN0b3Iu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NDb25kdWN0b3IuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDI0NDM2NzEzMWU3N2I0ZjUzNjM3MjVlZDc1NTZmNDRh
ZWQwMmM2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQ29uZHVjdG9yLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiR0NDb25kdWN0b3IuaCIKLQotI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgotCi1uYW1l
c3BhY2UgSlNDIHsKLQotY29uc3QgY2hhciogZ2NDb25kdWN0b3JTaG9ydE5hbWUoR0NDb25kdWN0
b3IgY29ubikKLXsKLSAgICBzd2l0Y2ggKGNvbm4pIHsKLSAgICBjYXNlIEdDQ29uZHVjdG9yOjpN
dXRhdG9yOgotICAgICAgICByZXR1cm4gIk0iOwotICAgIGNhc2UgR0NDb25kdWN0b3I6OkNvbGxl
Y3RvcjoKLSAgICAgICAgcmV0dXJuICJDIjsKLSAgICB9Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLW5hbWVzcGFjZSBX
VEYgewotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi12b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mIG91dCwgR0NDb25kdWN0b3IgY29ubikKLXsKLSAgICBzd2l0Y2ggKGNvbm4pIHsKLSAg
ICBjYXNlIEdDQ29uZHVjdG9yOjpNdXRhdG9yOgotICAgICAgICBvdXQucHJpbnQoIk11dGF0b3Ii
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgR0NDb25kdWN0b3I6OkNvbGxlY3RvcjoKLSAg
ICAgICAgb3V0LnByaW50KCJDb2xsZWN0b3IiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXVEYKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NDb25kdWN0
b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDQ29uZHVjdG9yLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkYzE4Y2FkZTk2MTM3YWI0M2MzN2M0MmJiMmM1ZmRkYzc5
N2Q4NTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NDb25kdWN0b3IuaAorKysgL2Rldi9udWxsCkBAIC0x
LDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLS8vIEVpdGhlciB0aGUgbXV0YXRvciBoYXMgdGhlIGNvbm4gKGh0dHBzOi8vZW4ud2lraXBl
ZGlhLm9yZy93aWtpL0Nvbm5fKG5hdXRpY2FsKSksIG1lYW5pbmcgdGhhdCB0aGUKLS8vIG11dGF0
b3Igd2lsbCBpbmNyZW1lbnRhbGx5IGRyaXZlIHRoZSBjb2xsZWN0b3Igd2hlbiBpdCBjYWxscyBp
bnRvIHNsb3cgcGF0aHM7IG9yIHRoZSBjb2xsZWN0b3IgaGFzIHRoZQotLy8gY29ubiwgbWVhbmlu
ZyB0aGF0IHRoZSBjb2xsZWN0b3IgdGhyZWFkIHdpbGwgZHJpdmUgdGhlIGNvbGxlY3Rvci4KLWVu
dW0gY2xhc3MgR0NDb25kdWN0b3IgOiB1aW50OF90IHsKLSAgICBNdXRhdG9yLAotICAgIENvbGxl
Y3RvcgotfTsKLQotY29uc3QgY2hhciogZ2NDb25kdWN0b3JTaG9ydE5hbWUoR0NDb25kdWN0b3Ig
b2ZmaWNlcik7Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi1uYW1lc3BhY2UgV1RGIHsKLQotY2xh
c3MgUHJpbnRTdHJlYW07Ci0KLXZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6
R0NDb25kdWN0b3IpOwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NGaW5hbGl6YXRpb25DYWxsYmFjay5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9HQ0ZpbmFsaXphdGlvbkNhbGxiYWNrLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDFhZmM3MGUwNzBlODg5MDJkNGM1NDcyMzBlMTAyMDVlZjJm
YzkyYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0ZpbmFsaXphdGlvbkNhbGxiYWNrLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiR0NGaW5hbGl6YXRpb25DYWxsYmFjay5oIgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotR0NGaW5hbGl6YXRpb25DYWxsYmFjazo6R0NGaW5hbGl6YXRpb25DYWxsYmFjaygpCi17Ci19
Ci0KLUdDRmluYWxpemF0aW9uQ2FsbGJhY2s6On5HQ0ZpbmFsaXphdGlvbkNhbGxiYWNrKCkKLXsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0dDRmluYWxpemF0aW9uQ2FsbGJhY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0dDRmluYWxpemF0aW9uQ2FsbGJhY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMWMwN2ZkOGM2ZTlkNzRiNjJkZTQ5NjhkNjNmNjZiOTcwYmYxYjM4Mi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9HQ0ZpbmFsaXphdGlvbkNhbGxiYWNrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBK
U0MgewotCi1jbGFzcyBIZWFwOwotCi1jbGFzcyBKU19FWFBPUlRfUFJJVkFURSBHQ0ZpbmFsaXph
dGlvbkNhbGxiYWNrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEdDRmluYWxpemF0aW9u
Q2FsbGJhY2s+IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHQ0ZpbmFsaXphdGlvbkNhbGxi
YWNrKTsKLQotcHVibGljOgotICAgIEdDRmluYWxpemF0aW9uQ2FsbGJhY2soKTsKLSAgICB2aXJ0
dWFsIH5HQ0ZpbmFsaXphdGlvbkNhbGxiYWNrKCk7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGRp
ZEZpbmFsaXplKEhlYXAmKSA9IDA7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotY2xh
c3MgR0NGaW5hbGl6YXRpb25DYWxsYmFja0Z1bmNBZGFwdG9yIDogcHVibGljIEdDRmluYWxpemF0
aW9uQ2FsbGJhY2sgewotcHVibGljOgotICAgIEdDRmluYWxpemF0aW9uQ2FsbGJhY2tGdW5jQWRh
cHRvcihjb25zdCBGdW5jJiBmdW5jKQotICAgICAgICA6IG1fZnVuYyhmdW5jKQotICAgIHsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBkaWRGaW5hbGl6ZShIZWFwJiBoZWFwKSBvdmVycmlkZQotICAg
IHsKLSAgICAgICAgbV9mdW5jKHRoaXMsIGhlYXApOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBG
dW5jIG1fZnVuYzsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci1SZWZQdHI8R0NGaW5h
bGl6YXRpb25DYWxsYmFja0Z1bmNBZGFwdG9yPEZ1bmM+PiBjcmVhdGVHQ0ZpbmFsaXphdGlvbkNh
bGxiYWNrKGNvbnN0IEZ1bmMmIGZ1bmMpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHQ0Zp
bmFsaXphdGlvbkNhbGxiYWNrRnVuY0FkYXB0b3I8RnVuYz4oZnVuYykpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAppbmRleCBmMDY0NWNl
M2NkNzc0MWMyNjI1NmY0MzkzZmIzYzUyZTg5M2I5MGNkLi4xNDYyN2EzNzBlNzJjZDFmMzFmOWMz
YjY5YTc0MDcwZmQ1ZWQ2ODFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcApAQCAt
MjMsMTQgKzIzLDEyIEBACiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb2Rl
QmxvY2tTZXRJbmxpbmVzLmgiCi0jaW5jbHVkZSAiQ29sbGVjdGluZ1Njb3BlLmgiCiAjaW5jbHVk
ZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKICNpbmNsdWRlICJERkdXb3JrbGlzdElubGluZXMuaCIK
ICNpbmNsdWRlICJFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9u
LmgiCiAjaW5jbHVkZSAiRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5oIgogI2luY2x1ZGUgIkdDQWN0
aXZpdHlDYWxsYmFjay5oIgotI2luY2x1ZGUgIkdDRmluYWxpemF0aW9uQ2FsbGJhY2suaCIKICNp
bmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCIKICNpbmNsdWRlICJHQ1Nl
Z21lbnRlZEFycmF5SW5saW5lcy5oIgogI2luY2x1ZGUgIkdDVHlwZU1hcC5oIgpAQCAtMzksNyAr
MzcsOSBAQAogI2luY2x1ZGUgIkhlYXBJdGVyYXRpb25TY29wZS5oIgogI2luY2x1ZGUgIkhlYXBQ
cm9maWxlci5oIgogI2luY2x1ZGUgIkhlYXBTbmFwc2hvdC5oIgorI2luY2x1ZGUgIkhlYXBTdGF0
aXN0aWNzLmgiCiAjaW5jbHVkZSAiSGVhcFZlcmlmaWVyLmgiCisjaW5jbHVkZSAiSGVscGluZ0dD
U2NvcGUuaCIKICNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKICNpbmNsdWRlICJJbnRl
cnByZXRlci5oIgogI2luY2x1ZGUgIkpJVFN0dWJSb3V0aW5lU2V0LmgiCkBAIC00OCw3ICs0OCw2
IEBACiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKICNp
bmNsdWRlICJKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCIKLSNpbmNsdWRlICJNYWNoaW5lU3Rh
Y2tNYXJrZXIuaCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJN
YXJraW5nQ29uc3RyYWludFNldC5oIgogI2luY2x1ZGUgIlByZXZlbnRDb2xsZWN0aW9uU2NvcGUu
aCIKQEAgLTU4LDcgKzU3LDYgQEAKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKICNpbmNsdWRl
ICJTdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNjaGVkdWxlci5oIgogI2luY2x1ZGUgIlN0b3BJ
Zk5lY2Vzc2FyeVRpbWVyLmgiCi0jaW5jbHVkZSAiU3dlZXBpbmdTY29wZS5oIgogI2luY2x1ZGUg
IlN5bmNocm9ub3VzU3RvcFRoZVdvcmxkTXV0YXRvclNjaGVkdWxlci5oIgogI2luY2x1ZGUgIlR5
cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCkBAIC0yMDgs
MjcgKzIwNiwyNyBAQCBwcml2YXRlOgogCiBjbGFzcyBIZWFwOjpUaHJlYWQgOiBwdWJsaWMgQXV0
b21hdGljVGhyZWFkIHsKIHB1YmxpYzoKLSAgICBUaHJlYWQoY29uc3QgQWJzdHJhY3RMb2NrZXIm
IGxvY2tlciwgSGVhcCYgaGVhcCkKKyAgICBUaHJlYWQoY29uc3QgTG9ja0hvbGRlciYgbG9ja2Vy
LCBIZWFwJiBoZWFwKQogICAgICAgICA6IEF1dG9tYXRpY1RocmVhZChsb2NrZXIsIGhlYXAubV90
aHJlYWRMb2NrLCBoZWFwLm1fdGhyZWFkQ29uZGl0aW9uKQogICAgICAgICAsIG1faGVhcChoZWFw
KQogICAgIHsKICAgICB9CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgUG9sbFJlc3VsdCBwb2xsKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpIG92ZXJyaWRlCisgICAgUG9sbFJlc3VsdCBwb2xs
KGNvbnN0IExvY2tIb2xkZXImIGxvY2tlcikgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGlmICht
X2hlYXAubV90aHJlYWRTaG91bGRTdG9wKSB7CiAgICAgICAgICAgICBtX2hlYXAubm90aWZ5VGhy
ZWFkU3RvcHBpbmcobG9ja2VyKTsKICAgICAgICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpTdG9w
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChtX2hlYXAuc2hvdWxkQ29sbGVjdEluQ29sbGVjdG9y
VGhyZWFkKGxvY2tlcikpCisgICAgICAgIGlmIChtX2hlYXAuc2hvdWxkQ29sbGVjdEluVGhyZWFk
KGxvY2tlcikpCiAgICAgICAgICAgICByZXR1cm4gUG9sbFJlc3VsdDo6V29yazsKICAgICAgICAg
cmV0dXJuIFBvbGxSZXN1bHQ6OldhaXQ7CiAgICAgfQogICAgIAogICAgIFdvcmtSZXN1bHQgd29y
aygpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBtX2hlYXAuY29sbGVjdEluQ29sbGVjdG9yVGhy
ZWFkKCk7CisgICAgICAgIG1faGVhcC5jb2xsZWN0SW5UaHJlYWQoKTsKICAgICAgICAgcmV0dXJu
IFdvcmtSZXN1bHQ6OkNvbnRpbnVlOwogICAgIH0KICAgICAKQEAgLTI1OSw5ICsyNTcsOSBAQCBI
ZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX29iamVjdFNwYWNl
KHRoaXMpCiAgICAgLCBtX2V4dHJhTWVtb3J5U2l6ZSgwKQogICAgICwgbV9kZXByZWNhdGVkRXh0
cmFNZW1vcnlTaXplKDApCi0gICAgLCBtX21hY2hpbmVUaHJlYWRzKHN0ZDo6bWFrZV91bmlxdWU8
TWFjaGluZVRocmVhZHM+KHRoaXMpKQotICAgICwgbV9jb2xsZWN0b3JTbG90VmlzaXRvcihzdGQ6
Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhpcywgIkMiKSkKLSAgICAsIG1fbXV0YXRvclNs
b3RWaXNpdG9yKHN0ZDo6bWFrZV91bmlxdWU8U2xvdFZpc2l0b3I+KCp0aGlzLCAiTSIpKQorICAg
ICwgbV9tYWNoaW5lVGhyZWFkcyh0aGlzKQorICAgICwgbV9jb2xsZWN0b3JTbG90VmlzaXRvcihz
dGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhpcykpCisgICAgLCBtX211dGF0b3JTbG90
VmlzaXRvcihzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhpcykpCiAgICAgLCBtX211
dGF0b3JNYXJrU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxNYXJrU3RhY2tBcnJheT4oKSkKICAgICAs
IG1fcmFjZU1hcmtTdGFjayhzdGQ6Om1ha2VfdW5pcXVlPE1hcmtTdGFja0FycmF5PigpKQogICAg
ICwgbV9jb25zdHJhaW50U2V0KHN0ZDo6bWFrZV91bmlxdWU8TWFya2luZ0NvbnN0cmFpbnRTZXQ+
KCkpCkBAIC0zMzUsMTIgKzMzMyw2IEBAIGJvb2wgSGVhcDo6aXNQYWdlZE91dChkb3VibGUgZGVh
ZGxpbmUpCiAvLyBSdW4gYWxsIHBlbmRpbmcgZmluYWxpemVycyBub3cgYmVjYXVzZSB3ZSB3b24n
dCBnZXQgYW5vdGhlciBjaGFuY2UuCiB2b2lkIEhlYXA6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkK
IHsKLSAgICBNb25vdG9uaWNUaW1lIGJlZm9yZTsKLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkg
ewotICAgICAgICBiZWZvcmUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSAgICAgICAgZGF0YUxv
ZygiW0dDPCIsIFJhd1BvaW50ZXIodGhpcyksICI+OiBzaHV0ZG93biAiKTsKLSAgICB9Ci0gICAg
CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fdm0tPmVudHJ5U2NvcGUpOwogICAgIFJFTEVBU0VfQVNT
RVJUKG1fbXV0YXRvclN0YXRlID09IE11dGF0b3JTdGF0ZTo6UnVubmluZyk7CiAgICAgCkBAIC0z
NTMsNjEgKzM0NSwyNSBAQCB2b2lkIEhlYXA6Omxhc3RDaGFuY2VUb0ZpbmFsaXplKCkKICAgICAg
ICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9jb2xsZWN0Q29udGludW91c2x5VGhyZWFkKTsK
ICAgICB9CiAgICAgCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCi0gICAgICAgIGRhdGFMb2co
IjEiKTsKLSAgICAKLSAgICAvLyBQcmV2ZW50IG5ldyBjb2xsZWN0aW9ucyBmcm9tIGJlaW5nIHN0
YXJ0ZWQuIFRoaXMgaXMgcHJvYmFibHkgbm90IGV2ZW4gbmVjZXNzYXJ5LCBzaW5jZSB3ZSdyZSBu
b3QKLSAgICAvLyBnb2luZyB0byBjYWxsIGludG8gYW55dGhpbmcgdGhhdCBzdGFydHMgY29sbGVj
dGlvbnMuIFN0aWxsLCB0aGlzIG1ha2VzIHRoZSBhbGdvcml0aG0gbW9yZQotICAgIC8vIG9idmlv
dXNseSBzb3VuZC4KLSAgICBtX2lzU2FmZVRvQ29sbGVjdCA9IGZhbHNlOwotICAgIAotICAgIGlm
IChPcHRpb25zOjpsb2dHQygpKQotICAgICAgICBkYXRhTG9nKCIyIik7Ci0KLSAgICBib29sIGlz
Q29sbGVjdGluZzsKLSAgICB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soKm1fdGhy
ZWFkTG9jayk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fbGFzdFNlcnZlZFRpY2tldCA8PSBt
X2xhc3RHcmFudGVkVGlja2V0KTsKLSAgICAgICAgaXNDb2xsZWN0aW5nID0gbV9sYXN0U2VydmVk
VGlja2V0IDwgbV9sYXN0R3JhbnRlZFRpY2tldDsKLSAgICB9Ci0gICAgaWYgKGlzQ29sbGVjdGlu
ZykgewotICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAgICAgIGRhdGFMb2co
Ii4uLl1cbiIpOwotICAgICAgICAKLSAgICAgICAgLy8gV2FpdCBmb3IgdGhlIGN1cnJlbnQgY29s
bGVjdGlvbiB0byBmaW5pc2guCi0gICAgICAgIHdhaXRGb3JDb2xsZWN0b3IoCi0gICAgICAgICAg
ICBbJl0gKGNvbnN0IEFic3RyYWN0TG9ja2VyJikgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQobV9sYXN0U2VydmVkVGlja2V0IDw9IG1fbGFzdEdyYW50ZWRUaWNrZXQp
OwotICAgICAgICAgICAgICAgIHJldHVybiBtX2xhc3RTZXJ2ZWRUaWNrZXQgPT0gbV9sYXN0R3Jh
bnRlZFRpY2tldDsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAKLSAgICAgICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCJbR0M8IiwgUmF3UG9pbnRlcih0aGlz
KSwgIj46IHNodXRkb3duICIpOwotICAgIH0KLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAg
ICAgICAgZGF0YUxvZygiMyIpOwotCi0gICAgUkVMRUFTRV9BU1NFUlQobV9yZXF1ZXN0cy5pc0Vt
cHR5KCkpOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fbGFzdFNlcnZlZFRpY2tldCA9PSBtX2xhc3RH
cmFudGVkVGlja2V0KTsKLSAgICAKLSAgICAvLyBDYXJlZnVsbHkgYnJpbmcgdGhlIHRocmVhZCBk
b3duLgorICAgIC8vIENhcmVmdWxseSBicmluZyB0aGUgdGhyZWFkIGRvd24uIFdlIG5lZWQgdG8g
dXNlIHdhaXRGb3JDb2xsZWN0b3IoKSB1bnRpbCB3ZSBrbm93IHRoYXQgdGhlcmUKKyAgICAvLyB3
b24ndCBiZSBhbnkgb3RoZXIgY29sbGVjdGlvbnMuCiAgICAgYm9vbCBzdG9wcGVkID0gZmFsc2U7
CiAgICAgewogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV90aHJlYWRMb2NrKTsKICAgICAg
ICAgc3RvcHBlZCA9IG1fdGhyZWFkLT50cnlTdG9wKGxvY2tlcik7Ci0gICAgICAgIG1fdGhyZWFk
U2hvdWxkU3RvcCA9IHRydWU7Ci0gICAgICAgIGlmICghc3RvcHBlZCkKKyAgICAgICAgaWYgKCFz
dG9wcGVkKSB7CisgICAgICAgICAgICBtX3RocmVhZFNob3VsZFN0b3AgPSB0cnVlOwogICAgICAg
ICAgICAgbV90aHJlYWRDb25kaXRpb24tPm5vdGlmeU9uZShsb2NrZXIpOworICAgICAgICB9CiAg
ICAgfQotCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCi0gICAgICAgIGRhdGFMb2coIjQiKTsK
LSAgICAKLSAgICBpZiAoIXN0b3BwZWQpCisgICAgaWYgKCFzdG9wcGVkKSB7CisgICAgICAgIHdh
aXRGb3JDb2xsZWN0b3IoCisgICAgICAgICAgICBbJl0gKGNvbnN0IExvY2tIb2xkZXImKSAtPiBi
b29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV90aHJlYWRJc1N0b3BwaW5nOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIC8vIEl0J3Mgbm93IHNhZmUgdG8gam9pbiB0aGUgdGhyZWFkLCBz
aW5jZSB3ZSBrbm93IHRoYXQgdGhlcmUgd2lsbCBub3QgYmUgYW55IG1vcmUgY29sbGVjdGlvbnMu
CiAgICAgICAgIG1fdGhyZWFkLT5qb2luKCk7Ci0gICAgCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dD
KCkpCi0gICAgICAgIGRhdGFMb2coIjUgIik7CisgICAgfQogICAgIAogICAgIG1fYXJyYXlCdWZm
ZXJzLmxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CiAgICAgbV9jb2RlQmxvY2tzLT5sYXN0Q2hhbmNl
VG9GaW5hbGl6ZSgqbV92bSk7CkBAIC00MTYsOSArMzcyLDYgQEAgdm9pZCBIZWFwOjpsYXN0Q2hh
bmNlVG9GaW5hbGl6ZSgpCiAgICAgcmVsZWFzZURlbGF5ZWRSZWxlYXNlZE9iamVjdHMoKTsKIAog
ICAgIHN3ZWVwQWxsTG9naWNhbGx5RW1wdHlXZWFrQmxvY2tzKCk7Ci0gICAgCi0gICAgaWYgKE9w
dGlvbnM6OmxvZ0dDKCkpCi0gICAgICAgIGRhdGFMb2coKE1vbm90b25pY1RpbWU6Om5vdygpIC0g
YmVmb3JlKS5taWxsaXNlY29uZHMoKSwgIm1zXVxuIik7CiB9CiAKIHZvaWQgSGVhcDo6cmVsZWFz
ZURlbGF5ZWRSZWxlYXNlZE9iamVjdHMoKQpAQCAtNTcyLDkgKzUyNSwxODYgQEAgdm9pZCBIZWFw
Ojphc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHkoKQogICAgIFJFTEVBU0VfQVNTRVJUKG9rKTsK
IH0KIAordm9pZCBIZWFwOjptYXJrVG9GaXhwb2ludChkb3VibGUgZ2NTdGFydFRpbWUpCit7Cisg
ICAgVGltaW5nU2NvcGUgbWFya1RvRml4cG9pbnRUaW1pbmdTY29wZSgqdGhpcywgIkhlYXA6Om1h
cmtUb0ZpeHBvaW50Iik7CisgICAgCisgICAgaWYgKG1fY29sbGVjdGlvblNjb3BlID09IENvbGxl
Y3Rpb25TY29wZTo6RnVsbCkgeworICAgICAgICBtX29wYXF1ZVJvb3RzLmNsZWFyKCk7CisgICAg
ICAgIG1fY29sbGVjdG9yU2xvdFZpc2l0b3ItPmNsZWFyTWFya1N0YWNrcygpOworICAgICAgICBt
X211dGF0b3JNYXJrU3RhY2stPmNsZWFyKCk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQo
bV9yYWNlTWFya1N0YWNrLT5pc0VtcHR5KCkpOworCisgICAgYmVnaW5NYXJraW5nKCk7CisKKyAg
ICBmb3JFYWNoU2xvdFZpc2l0b3IoCisgICAgICAgIFsmXSAoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
IHsKKyAgICAgICAgICAgIHZpc2l0b3IuZGlkU3RhcnRNYXJraW5nKCk7CisgICAgICAgIH0pOwor
CisgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7CisKKyAgICBtX2hlbHBl
ckNsaWVudC5zZXRGdW5jdGlvbigKKyAgICAgICAgW3RoaXNdICgpIHsKKyAgICAgICAgICAgIFNs
b3RWaXNpdG9yKiBzbG90VmlzaXRvcjsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrKTsKKyAgICAgICAgICAg
ICAgICBpZiAobV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiBuZXdWaXNpdG9y
ID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8U2xvdFZpc2l0b3I+
KCp0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChP
cHRpb25zOjpvcHRpbWl6ZVBhcmFsbGVsU2xvdFZpc2l0b3JzRm9yU3RvcHBlZE11dGF0b3IoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Zpc2l0b3ItPm9wdGltaXplRm9yU3RvcHBlZE11
dGF0b3IoKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG5ld1Zp
c2l0b3ItPmRpZFN0YXJ0TWFya2luZygpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgc2xvdFZpc2l0b3IgPSBuZXdWaXNpdG9yLmdldCgpOworICAgICAgICAgICAg
ICAgICAgICBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzLmFwcGVuZChXVEZNb3ZlKG5ld1Zpc2l0b3Ip
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0
b3IgPSBtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLnRha2VMYXN0KCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIFdURjo6cmVnaXN0ZXJHQ1RocmVhZChHQ1RocmVhZFR5cGU6
OkhlbHBlcik7CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQYXJhbGxlbE1vZGVF
bmFibGVyIHBhcmFsbGVsTW9kZUVuYWJsZXIoKnNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAg
ICBzbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9yOjpTbGF2ZURyYWluKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAgICAgICAgICAgICAgIG1f
YXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKHNsb3RWaXNpdG9yKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IgPSAq
bV9jb2xsZWN0b3JTbG90VmlzaXRvcjsKKworICAgIG1fY29uc3RyYWludFNldC0+ZGlkU3RhcnRN
YXJraW5nKCk7CisgICAgCisgICAgbV9zY2hlZHVsZXItPmJlZ2luQ29sbGVjdGlvbigpOworICAg
IGlmIChPcHRpb25zOjpsb2dHQygpKQorICAgICAgICBtX3NjaGVkdWxlci0+bG9nKCk7CisgICAg
CisgICAgLy8gQWZ0ZXIgdGhpcywgd2Ugd2lsbCBhbG1vc3QgY2VydGFpbmx5IGZhbGwgdGhyb3Vn
aCBhbGwgb2YgdGhlICJzbG90VmlzaXRvci5pc0VtcHR5KCkiCisgICAgLy8gY2hlY2tzIGJlY2F1
c2UgYm9vdHN0cmFwIHdvdWxkIGhhdmUgcHV0IHRoaW5ncyBpbnRvIHRoZSB2aXNpdG9yLiBTbywg
d2Ugc2hvdWxkIGZhbGwKKyAgICAvLyB0aHJvdWdoIHRvIGRyYWluaW5nLgorICAgIAorICAgIGlm
ICghc2xvdFZpc2l0b3IuZGlkUmVhY2hUZXJtaW5hdGlvbigpKSB7CisgICAgICAgIGRhdGFMb2co
IkZhdGFsOiBTbG90VmlzaXRvciBzaG91bGQgdGhpbmsgdGhhdCBHQyBzaG91bGQgdGVybWluYXRl
IGJlZm9yZSBjb25zdHJhaW50IHNvbHZpbmcsIGJ1dCBpdCBkb2VzIG5vdCB0aGluayB0aGlzLlxu
Iik7CisgICAgICAgIGRhdGFMb2coInNsb3RWaXNpdG9yLmlzRW1wdHkoKTogIiwgc2xvdFZpc2l0
b3IuaXNFbXB0eSgpLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygic2xvdFZpc2l0b3IuY29sbGVj
dG9yTWFya1N0YWNrKCkuaXNFbXB0eSgpOiAiLCBzbG90VmlzaXRvci5jb2xsZWN0b3JNYXJrU3Rh
Y2soKS5pc0VtcHR5KCksICJcbiIpOworICAgICAgICBkYXRhTG9nKCJzbG90VmlzaXRvci5tdXRh
dG9yTWFya1N0YWNrKCkuaXNFbXB0eSgpOiAiLCBzbG90VmlzaXRvci5tdXRhdG9yTWFya1N0YWNr
KCkuaXNFbXB0eSgpLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygibV9udW1iZXJPZkFjdGl2ZVBh
cmFsbGVsTWFya2VyczogIiwgbV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycywgIlxuIik7
CisgICAgICAgIGRhdGFMb2coIm1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCk6
ICIsIG1fc2hhcmVkQ29sbGVjdG9yTWFya1N0YWNrLT5pc0VtcHR5KCksICJcbiIpOworICAgICAg
ICBkYXRhTG9nKCJtX3NoYXJlZE11dGF0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTogIiwgbV9zaGFy
ZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5KCksICJcbiIpOworICAgICAgICBkYXRhTG9nKCJz
bG90VmlzaXRvci5kaWRSZWFjaFRlcm1pbmF0aW9uKCk6ICIsIHNsb3RWaXNpdG9yLmRpZFJlYWNo
VGVybWluYXRpb24oKSwgIlxuIik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6Omxv
Z0dDKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJ2PSIsIGJ5dGVzVmlzaXRlZCgpIC8gMTAyNCwg
ImtiIG89IiwgbV9vcGFxdWVSb290cy5zaXplKCksICIgYj0iLCBtX2JhcnJpZXJzRXhlY3V0ZWQs
ICIgIik7CisgICAgICAgIAorICAgICAgICBpZiAoc2xvdFZpc2l0b3IuZGlkUmVhY2hUZXJtaW5h
dGlvbigpKSB7CisgICAgICAgICAgICBtX3NjaGVkdWxlci0+ZGlkUmVhY2hUZXJtaW5hdGlvbigp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBhc3NlcnRTaGFyZWRNYXJrU3RhY2tzRW1wdHko
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2xvdFZpc2l0b3IubWVyZ2VJZk5lY2Vzc2Fy
eSgpOworICAgICAgICAgICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVs
U2xvdFZpc2l0b3JzKQorICAgICAgICAgICAgICAgIHBhcmFsbGVsVmlzaXRvci0+bWVyZ2VJZk5l
Y2Vzc2FyeSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTogVGFrZSBtX211
dGF0b3JEaWRSdW4gaW50byBhY2NvdW50IHdoZW4gc2NoZWR1bGluZyBjb25zdHJhaW50cy4gTW9z
dCBsaWtlbHksCisgICAgICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIHRvIGV4ZWN1dGUgcm9vdCBj
b25zdHJhaW50cyBhZ2FpbiB1bmxlc3MgdGhlIG11dGF0b3IgZGlkIHJ1bi4gQXQgYQorICAgICAg
ICAgICAgLy8gbWluaW11bSwgd2UgY291bGQgdXNlIHRoaXMgZm9yIHdvcmsgZXN0aW1hdGVzIC0g
YnV0IGl0J3MgcHJvYmFibHkgbW9yZSB0aGFuIGp1c3QgYW4KKyAgICAgICAgICAgIC8vIGVzdGlt
YXRlLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NjgyOAorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHRha2UgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQgd2UgY291bGQgdGltZW91dC4gVGhpcyBv
bmx5IGNvbWVzCisgICAgICAgICAgICAvLyBpbnRvIHBsYXkgaWYgd2UncmUgZXhlY3V0aW5nIGNv
bnN0cmFpbnRzIGZvciB0aGUgZmlyc3QgdGltZS4gQnV0IHRoYXQgd2lsbCBtYXR0ZXIKKyAgICAg
ICAgICAgIC8vIHdoZW4gd2UgaGF2ZSBkZWVwIHN0YWNrcyBvciBhIGxvdCBvZiBET00gc3R1ZmYu
CisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY2ODMxCisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdvbmRlcmluZyB3aGF0IHRoaXMg
ZG9lcz8gTG9vayBhdCBIZWFwOjphZGRDb3JlQ29uc3RyYWludHMoKS4gVGhlIERPTSBhbmQgb3Ro
ZXJzIGNhbiBhbHNvCisgICAgICAgICAgICAvLyBhZGQgdGhlaXIgb3duIHVzaW5nIEhlYXA6OmFk
ZE1hcmtpbmdDb25zdHJhaW50KCkuCisgICAgICAgICAgICBib29sIGNvbnZlcmdlZCA9CisgICAg
ICAgICAgICAgICAgbV9jb25zdHJhaW50U2V0LT5leGVjdXRlQ29udmVyZ2VuY2Uoc2xvdFZpc2l0
b3IsIE1vbm90b25pY1RpbWU6OmluZmluaXR5KCkpOworICAgICAgICAgICAgaWYgKGNvbnZlcmdl
ZCAmJiBzbG90VmlzaXRvci5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRTaGFy
ZWRNYXJrU3RhY2tzRW1wdHkoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9zY2hlZHVsZXItPmRpZEV4ZWN1dGVDb25z
dHJhaW50cygpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2coc2xvdFZpc2l0b3IuY29sbGVjdG9yTWFya1N0YWNr
KCkuc2l6ZSgpLCAiKyIsIG1fbXV0YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgc2xvdFZpc2l0b3Iu
bXV0YXRvck1hcmtTdGFjaygpLnNpemUoKSwgIiAiKTsKKyAgICAgICAgCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxlcihzbG90VmlzaXRvcik7CisgICAg
ICAgICAgICBzbG90VmlzaXRvci5kcmFpbkluUGFyYWxsZWwobV9zY2hlZHVsZXItPnRpbWVUb1Jl
c3VtZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9zY2hlZHVsZXItPnN5bmNo
cm9ub3VzRHJhaW5pbmdEaWRTdGFsbCgpOworCisgICAgICAgIGlmIChzbG90VmlzaXRvci5kaWRS
ZWFjaFRlcm1pbmF0aW9uKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAg
ICAgIGlmICghbV9zY2hlZHVsZXItPnNob3VsZFJlc3VtZSgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIAorICAgICAgICBtX3NjaGVkdWxlci0+d2lsbFJlc3VtZSgpOworICAgICAg
ICAKKyAgICAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpIHsKKyAgICAgICAgICAgIGRvdWJsZSB0
aGlzUGF1c2VNUyA9IChNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fc3RvcFRpbWUpLm1pbGxpc2Vj
b25kcygpOworICAgICAgICAgICAgZGF0YUxvZygicD0iLCB0aGlzUGF1c2VNUywgIm1zIChtYXgg
IiwgbWF4UGF1c2VNUyh0aGlzUGF1c2VNUyksICIpLi4uXVxuIik7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBGb3JnaXZlIHRoZSBtdXRhdG9yIGZvciBpdHMgcGFzdCBmYWlsdXJlcyB0byBrZWVw
IHVwLgorICAgICAgICAvLyBGSVhNRTogRmlndXJlIG91dCBpZiBtb3ZpbmcgdGhpcyB0byBkaWZm
ZXJlbnQgcGxhY2VzIHJlc3VsdHMgaW4gcGVyZiBjaGFuZ2VzLgorICAgICAgICBtX2luY3JlbWVu
dEJhbGFuY2UgPSAwOworICAgICAgICAKKyAgICAgICAgcmVzdW1lVGhlV29ybGQoKTsKKyAgICAg
ICAgCisgICAgICAgIHsKKyAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxlcihz
bG90VmlzaXRvcik7CisgICAgICAgICAgICBzbG90VmlzaXRvci5kcmFpbkluUGFyYWxsZWxQYXNz
aXZlbHkobV9zY2hlZHVsZXItPnRpbWVUb1N0b3AoKSk7CisgICAgICAgIH0KKworICAgICAgICBz
dG9wVGhlV29ybGQoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChPcHRpb25zOjpsb2dHQygpKQor
ICAgICAgICAgICAgZGF0YUxvZygiW0dDOiAiKTsKKyAgICAgICAgCisgICAgICAgIG1fc2NoZWR1
bGVyLT5kaWRTdG9wKCk7CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkK
KyAgICAgICAgICAgIG1fc2NoZWR1bGVyLT5sb2coKTsKKyAgICB9CisgICAgCisgICAgbV9zY2hl
ZHVsZXItPmVuZENvbGxlY3Rpb24oKTsKKworICAgIHsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJk
PExvY2s+IGxvY2sobV9tYXJraW5nTXV0ZXgpOworICAgICAgICBtX3BhcmFsbGVsTWFya2Vyc1No
b3VsZEV4aXQgPSB0cnVlOworICAgICAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3Rp
ZnlBbGwoKTsKKyAgICB9CisgICAgbV9oZWxwZXJDbGllbnQuZmluaXNoKCk7CisKKyAgICBpdGVy
YXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygKKyAgICAgICAgWyZdIChDb2RlQmxv
Y2sqIGNvZGVCbG9jaykgeworICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Cisg
ICAgICAgIH0pOworICAgICAgICAKKyAgICB1cGRhdGVPYmplY3RDb3VudHMoZ2NTdGFydFRpbWUp
OworICAgIGVuZE1hcmtpbmcoKTsKK30KKwogdm9pZCBIZWFwOjpnYXRoZXJTdGFja1Jvb3RzKENv
bnNlcnZhdGl2ZVJvb3RzJiByb290cykKIHsKLSAgICBtX21hY2hpbmVUaHJlYWRzLT5nYXRoZXJD
b25zZXJ2YXRpdmVSb290cyhyb290cywgKm1faml0U3R1YlJvdXRpbmVzLCAqbV9jb2RlQmxvY2tz
LCBtX2N1cnJlbnRUaHJlYWRTdGF0ZSk7CisgICAgbV9tYWNoaW5lVGhyZWFkcy5nYXRoZXJDb25z
ZXJ2YXRpdmVSb290cyhyb290cywgKm1faml0U3R1YlJvdXRpbmVzLCAqbV9jb2RlQmxvY2tzKTsK
IH0KIAogdm9pZCBIZWFwOjpnYXRoZXJKU1N0YWNrUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIHJv
b3RzKQpAQCAtNjc0LDggKzgwNCwxMiBAQCB2b2lkIEhlYXA6OnJlbW92ZURlYWRIZWFwU25hcHNo
b3ROb2RlcyhIZWFwUHJvZmlsZXImIGhlYXBQcm9maWxlcikKICAgICB9CiB9CiAKLXZvaWQgSGVh
cDo6dXBkYXRlT2JqZWN0Q291bnRzKCkKK3ZvaWQgSGVhcDo6dXBkYXRlT2JqZWN0Q291bnRzKGRv
dWJsZSBnY1N0YXJ0VGltZSkKIHsKKyAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSA9PSBHQ0xvZ2dp
bmc6OlZlcmJvc2UpIHsKKyAgICAgICAgZGF0YUxvZ0YoIlxuTnVtYmVyIG9mIGxpdmUgT2JqZWN0
cyBhZnRlciBHQyAlbHUsIHRvb2sgJS42ZiBzZWNzXG4iLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nPih2aXNpdENvdW50KCkpLCBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpIC0g
Z2NTdGFydFRpbWUpOworICAgIH0KKyAgICAKICAgICBpZiAobV9jb2xsZWN0aW9uU2NvcGUgPT0g
Q29sbGVjdGlvblNjb3BlOjpGdWxsKQogICAgICAgICBtX3RvdGFsQnl0ZXNWaXNpdGVkID0gMDsK
IApAQCAtODk5LDE0ICsxMDMzLDE0IEBAIHZvaWQgSGVhcDo6c3dlZXBTeW5jaHJvbm91c2x5KCkK
IHsKICAgICBkb3VibGUgYmVmb3JlID0gMDsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkgewot
ICAgICAgICBkYXRhTG9nKCJGdWxsIHN3ZWVwOiAiLCBjYXBhY2l0eSgpIC8gMTAyNCwgImtiICIp
OworICAgICAgICBkYXRhTG9nKCJbRnVsbCBzd2VlcDogIiwgY2FwYWNpdHkoKSAvIDEwMjQsICJr
YiAiKTsKICAgICAgICAgYmVmb3JlID0gY3VycmVudFRpbWVNUygpOwogICAgIH0KICAgICBtX29i
amVjdFNwYWNlLnN3ZWVwKCk7CiAgICAgbV9vYmplY3RTcGFjZS5zaHJpbmsoKTsKICAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSkgewogICAgICAgICBkb3VibGUgYWZ0ZXIgPSBjdXJyZW50VGltZU1T
KCk7Ci0gICAgICAgIGRhdGFMb2coIj0+ICIsIGNhcGFjaXR5KCkgLyAxMDI0LCAia2IsICIsIGFm
dGVyIC0gYmVmb3JlLCAibXMiKTsKKyAgICAgICAgZGF0YUxvZygiPT4gIiwgY2FwYWNpdHkoKSAv
IDEwMjQsICJrYiwgIiwgYWZ0ZXIgLSBiZWZvcmUsICJtc10gIik7CiAgICAgfQogfQogCkBAIC05
MTUsNDIzICsxMDQ5LDEyNyBAQCB2b2lkIEhlYXA6OmNvbGxlY3RBbGxHYXJiYWdlKCkKICAgICBp
ZiAoIW1faXNTYWZlVG9Db2xsZWN0KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgY29sbGVj
dFN5bmMoQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsKLQotICAgIERlZmVyR0NGb3JBV2hpbGUgZGVm
ZXJHQygqdGhpcyk7Ci0gICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnVzZUltbW9ydGFsT2JqZWN0
cygpKSkKLSAgICAgICAgc3dlZXBlcigpLT5zdG9wU3dlZXBpbmcoKTsKLQotICAgIGJvb2wgYWxy
ZWFkeVN3ZXB0SW5Db2xsZWN0U3luYyA9IE9wdGlvbnM6OnN3ZWVwU3luY2hyb25vdXNseSgpOwot
ICAgIGlmICghYWxyZWFkeVN3ZXB0SW5Db2xsZWN0U3luYykgewotICAgICAgICBpZiAoT3B0aW9u
czo6bG9nR0MoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIltHQzwiLCBSYXdQb2ludGVyKHRoaXMp
LCAiPjogIik7Ci0gICAgICAgIHN3ZWVwU3luY2hyb25vdXNseSgpOwotICAgICAgICBpZiAoT3B0
aW9uczo6bG9nR0MoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIl1cbiIpOwotICAgIH0KLSAgICBt
X29iamVjdFNwYWNlLmFzc2VydE5vVW5zd2VwdCgpOwotCi0gICAgc3dlZXBBbGxMb2dpY2FsbHlF
bXB0eVdlYWtCbG9ja3MoKTsKLX0KLQotdm9pZCBIZWFwOjpjb2xsZWN0QXN5bmMoc3RkOjpvcHRp
b25hbDxDb2xsZWN0aW9uU2NvcGU+IHNjb3BlKQotewotICAgIGlmICghbV9pc1NhZmVUb0NvbGxl
Y3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgYWxyZWFkeVJlcXVlc3RlZCA9IGZhbHNl
OwotICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fdGhyZWFkTG9jayk7Ci0gICAg
ICAgIGZvciAoc3RkOjpvcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+IHJlcXVlc3QgOiBtX3JlcXVl
c3RzKSB7Ci0gICAgICAgICAgICBpZiAoc2NvcGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoc2Nv
cGUgPT0gQ29sbGVjdGlvblNjb3BlOjpFZGVuKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFscmVh
ZHlSZXF1ZXN0ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzY29w
ZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmVx
dWVzdCA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGFscmVhZHlSZXF1ZXN0ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0ID09IENvbGxl
Y3Rpb25TY29wZTo6RnVsbCkgewotICAgICAgICAgICAgICAgICAgICBhbHJlYWR5UmVxdWVzdGVk
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChhbHJlYWR5UmVxdWVzdGVk
KQotICAgICAgICByZXR1cm47Ci0KLSAgICByZXF1ZXN0Q29sbGVjdGlvbihzY29wZSk7Ci19Ci0K
LXZvaWQgSGVhcDo6Y29sbGVjdFN5bmMoc3RkOjpvcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+IHNj
b3BlKQotewotICAgIGlmICghbV9pc1NhZmVUb0NvbGxlY3QpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICB3YWl0Rm9yQ29sbGVjdGlvbihyZXF1ZXN0Q29sbGVjdGlvbihzY29wZSkpOwotfQot
Ci1ib29sIEhlYXA6OnNob3VsZENvbGxlY3RJbkNvbGxlY3RvclRocmVhZChjb25zdCBBYnN0cmFj
dExvY2tlciYpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9yZXF1ZXN0cy5pc0VtcHR5KCkgPT0g
KG1fbGFzdFNlcnZlZFRpY2tldCA9PSBtX2xhc3RHcmFudGVkVGlja2V0KSk7Ci0gICAgUkVMRUFT
RV9BU1NFUlQobV9sYXN0U2VydmVkVGlja2V0IDw9IG1fbGFzdEdyYW50ZWRUaWNrZXQpOwotICAg
IAotICAgIGlmIChmYWxzZSkKLSAgICAgICAgZGF0YUxvZygiTXV0YXRvciBoYXMgdGhlIGNvbm4g
PSAiLCAhIShtX3dvcmxkU3RhdGUubG9hZCgpICYgbXV0YXRvckhhc0Nvbm5CaXQpLCAiXG4iKTsK
LSAgICAKLSAgICByZXR1cm4gIW1fcmVxdWVzdHMuaXNFbXB0eSgpICYmICEobV93b3JsZFN0YXRl
LmxvYWQoKSAmIG11dGF0b3JIYXNDb25uQml0KTsKLX0KLQotdm9pZCBIZWFwOjpjb2xsZWN0SW5D
b2xsZWN0b3JUaHJlYWQoKQotewotICAgIGZvciAoOzspIHsKLSAgICAgICAgUnVuQ3VycmVudFBo
YXNlUmVzdWx0IHJlc3VsdCA9IHJ1bkN1cnJlbnRQaGFzZShHQ0NvbmR1Y3Rvcjo6Q29sbGVjdG9y
LCBudWxscHRyKTsKLSAgICAgICAgc3dpdGNoIChyZXN1bHQpIHsKLSAgICAgICAgY2FzZSBSdW5D
dXJyZW50UGhhc2VSZXN1bHQ6OkZpbmlzaGVkOgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBjYXNlIFJ1bkN1cnJlbnRQaGFzZVJlc3VsdDo6Q29udGludWU6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBSdW5DdXJyZW50UGhhc2VSZXN1bHQ6Ok5lZWRDdXJyZW50VGhyZWFk
U3RhdGU6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSGVhcDo6Y2hlY2tDb25u
KEdDQ29uZHVjdG9yIGNvbm4pCi17Ci0gICAgc3dpdGNoIChjb25uKSB7Ci0gICAgY2FzZSBHQ0Nv
bmR1Y3Rvcjo6TXV0YXRvcjoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobV93b3JsZFN0YXRlLmxv
YWQoKSAmIG11dGF0b3JIYXNDb25uQml0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgR0ND
b25kdWN0b3I6OkNvbGxlY3RvcjoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShtX3dvcmxkU3Rh
dGUubG9hZCgpICYgbXV0YXRvckhhc0Nvbm5CaXQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi1hdXRvIEhlYXA6OnJ1bkN1
cnJlbnRQaGFzZShHQ0NvbmR1Y3RvciBjb25uLCBDdXJyZW50VGhyZWFkU3RhdGUqIGN1cnJlbnRU
aHJlYWRTdGF0ZSkgLT4gUnVuQ3VycmVudFBoYXNlUmVzdWx0Ci17Ci0gICAgY2hlY2tDb25uKGNv
bm4pOwotICAgIG1fY3VycmVudFRocmVhZFN0YXRlID0gY3VycmVudFRocmVhZFN0YXRlOwotICAg
IAotICAgIC8vIElmIHRoZSBjb2xsZWN0b3IgdHJhbnNmZXJzIHRoZSBjb25uIHRvIHRoZSBtdXRh
dG9yLCBpdCBsZWF2ZXMgdXMgaW4gYmV0d2VlbiBwaGFzZXMuCi0gICAgaWYgKCFmaW5pc2hDaGFu
Z2luZ1BoYXNlKGNvbm4pKSB7Ci0gICAgICAgIC8vIEEgbWlzY2hldmlvdXMgbXV0YXRvciBjb3Vs
ZCByZXBlYXRlZGx5IHJlbGlucXVpc2ggdGhlIGNvbm4gYmFjayB0byB1cy4gV2UgdHJ5IHRvIGF2
b2lkIGRvaW5nCi0gICAgICAgIC8vIHRoaXMsIGJ1dCBpdCdzIHByb2JhYmx5IG5vdCB0aGUgZW5k
IG9mIHRoZSB3b3JsZCBpZiBpdCBkaWQgaGFwcGVuLgotICAgICAgICBpZiAoZmFsc2UpCi0gICAg
ICAgICAgICBkYXRhTG9nKCJDb25uIGJvdW5jZS1iYWNrLlxuIik7Ci0gICAgICAgIHJldHVybiBS
dW5DdXJyZW50UGhhc2VSZXN1bHQ6OkZpbmlzaGVkOwotICAgIH0KLSAgICAKLSAgICBib29sIHJl
c3VsdCA9IGZhbHNlOwotICAgIHN3aXRjaCAobV9jdXJyZW50UGhhc2UpIHsKLSAgICBjYXNlIENv
bGxlY3RvclBoYXNlOjpOb3RSdW5uaW5nOgotICAgICAgICByZXN1bHQgPSBydW5Ob3RSdW5uaW5n
UGhhc2UoY29ubik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBjYXNlIENvbGxlY3Rv
clBoYXNlOjpCZWdpbjoKLSAgICAgICAgcmVzdWx0ID0gcnVuQmVnaW5QaGFzZShjb25uKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2UgQ29sbGVjdG9yUGhhc2U6OkZpeHBvaW50
OgotICAgICAgICBpZiAoIWN1cnJlbnRUaHJlYWRTdGF0ZSAmJiBjb25uID09IEdDQ29uZHVjdG9y
OjpNdXRhdG9yKQotICAgICAgICAgICAgcmV0dXJuIFJ1bkN1cnJlbnRQaGFzZVJlc3VsdDo6TmVl
ZEN1cnJlbnRUaHJlYWRTdGF0ZTsKLSAgICAgICAgCi0gICAgICAgIHJlc3VsdCA9IHJ1bkZpeHBv
aW50UGhhc2UoY29ubik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBjYXNlIENvbGxl
Y3RvclBoYXNlOjpDb25jdXJyZW50OgotICAgICAgICByZXN1bHQgPSBydW5Db25jdXJyZW50UGhh
c2UoY29ubik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBjYXNlIENvbGxlY3RvclBo
YXNlOjpSZWxvb3A6Ci0gICAgICAgIHJlc3VsdCA9IHJ1blJlbG9vcFBoYXNlKGNvbm4pOwotICAg
ICAgICBicmVhazsKLSAgICAgICAgCi0gICAgY2FzZSBDb2xsZWN0b3JQaGFzZTo6RW5kOgotICAg
ICAgICByZXN1bHQgPSBydW5FbmRQaGFzZShjb25uKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHJlc3VsdCA/IFJ1bkN1cnJlbnRQaGFzZVJlc3VsdDo6Q29udGludWUgOiBS
dW5DdXJyZW50UGhhc2VSZXN1bHQ6OkZpbmlzaGVkOwotfQotCi1ORVZFUl9JTkxJTkUgYm9vbCBI
ZWFwOjpydW5Ob3RSdW5uaW5nUGhhc2UoR0NDb25kdWN0b3IgY29ubikKLXsKLSAgICAvLyBDaGVj
ayBtX3JlcXVlc3RzIHNpbmNlIHRoZSBtdXRhdG9yIGNhbGxzIHRoaXMgdG8gcG9sbCB3aGF0J3Mg
Z29pbmcgb24uCi0gICAgewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKCptX3RocmVh
ZExvY2spOwotICAgICAgICBpZiAobV9yZXF1ZXN0cy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjaGFuZ2VQaGFzZShjb25uLCBD
b2xsZWN0b3JQaGFzZTo6QmVnaW4pOwotfQotCi1ORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5C
ZWdpblBoYXNlKEdDQ29uZHVjdG9yIGNvbm4pCi17Ci0gICAgbV9jdXJyZW50R0NTdGFydFRpbWUg
PSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSAgICAgICAgCi0gICAgc3RkOjpvcHRpb25hbDxDb2xs
ZWN0aW9uU2NvcGU+IHNjb3BlOwotICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1f
dGhyZWFkTG9jayk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3JlcXVlc3RzLmlzRW1wdHko
KSk7Ci0gICAgICAgIHNjb3BlID0gbV9yZXF1ZXN0cy5maXJzdCgpOwotICAgIH0KLSAgICAgICAg
Ci0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCi0gICAgICAgIGRhdGFMb2coIltHQzwiLCBSYXdQ
b2ludGVyKHRoaXMpLCAiPjogU1RBUlQgIiwgZ2NDb25kdWN0b3JTaG9ydE5hbWUoY29ubiksICIg
IiwgY2FwYWNpdHkoKSAvIDEwMjQsICJrYiAiKTsKLQotICAgIG1fYmVmb3JlR0MgPSBNb25vdG9u
aWNUaW1lOjpub3coKTsKLQotICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSkgewotICAgICAgICBk
YXRhTG9nKCJDb2xsZWN0aW9uIHNjb3BlIGFscmVhZHkgc2V0IGR1cmluZyBHQzogIiwgKm1fY29s
bGVjdGlvblNjb3BlLCAiXG4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICB9Ci0gICAgICAgIAotICAgIHdpbGxTdGFydENvbGxlY3Rpb24oc2NvcGUpOwotICAg
ICAgICAKLSAgICBpZiAobV92ZXJpZmllcikgewotICAgICAgICAvLyBWZXJpZnkgdGhhdCBsaXZl
IG9iamVjdHMgZnJvbSB0aGUgbGFzdCBHQyBjeWNsZSBoYXZlbid0IGJlZW4gY29ycnVwdGVkIGJ5
Ci0gICAgICAgIC8vIG11dGF0b3JzIGJlZm9yZSB3ZSBiZWdpbiB0aGlzIG5ldyBHQyBjeWNsZS4K
LSAgICAgICAgbV92ZXJpZmllci0+dmVyaWZ5KEhlYXBWZXJpZmllcjo6UGhhc2U6OkJlZm9yZUdD
KTsKLSAgICAgICAgICAgIAotICAgICAgICBtX3ZlcmlmaWVyLT5pbml0aWFsaXplR0NDeWNsZSgp
OwotICAgICAgICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZlT2JqZWN0cyhIZWFwVmVyaWZpZXI6OlBo
YXNlOjpCZWZvcmVNYXJraW5nKTsKLSAgICB9Ci0gICAgICAgIAotICAgIHByZXBhcmVGb3JNYXJr
aW5nKCk7Ci0gICAgICAgIAotICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9u
U2NvcGU6OkZ1bGwpIHsKLSAgICAgICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwotICAgICAgICBt
X2NvbGxlY3RvclNsb3RWaXNpdG9yLT5jbGVhck1hcmtTdGFja3MoKTsKLSAgICAgICAgbV9tdXRh
dG9yTWFya1N0YWNrLT5jbGVhcigpOwotICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJUKG1fcmFj
ZU1hcmtTdGFjay0+aXNFbXB0eSgpKTsKLQotICAgIGJlZ2luTWFya2luZygpOwotCi0gICAgZm9y
RWFjaFNsb3RWaXNpdG9yKAotICAgICAgICBbJl0gKFNsb3RWaXNpdG9yJiB2aXNpdG9yKSB7Ci0g
ICAgICAgICAgICB2aXNpdG9yLmRpZFN0YXJ0TWFya2luZygpOwotICAgICAgICB9KTsKLQotICAg
IG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCA9IGZhbHNlOwotCi0gICAgbV9oZWxwZXJDbGll
bnQuc2V0RnVuY3Rpb24oCi0gICAgICAgIFt0aGlzXSAoKSB7Ci0gICAgICAgICAgICBTbG90Vmlz
aXRvciogc2xvdFZpc2l0b3I7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9ja0hv
bGRlciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbmV3VmlzaXRvciA9IHN0
ZDo6bWFrZV91bmlxdWU8U2xvdFZpc2l0b3I+KAotICAgICAgICAgICAgICAgICAgICAgICAgKnRo
aXMsIHRvQ1N0cmluZygiUCIsIG1fcGFyYWxsZWxTbG90VmlzaXRvcnMuc2l6ZSgpICsgMSkpOwot
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6Om9w
dGltaXplUGFyYWxsZWxTbG90VmlzaXRvcnNGb3JTdG9wcGVkTXV0YXRvcigpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3VmlzaXRvci0+b3B0aW1pemVGb3JTdG9wcGVkTXV0YXRvcigpOwot
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbmV3VmlzaXRvci0+ZGlk
U3RhcnRNYXJraW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBzbG90VmlzaXRvciA9IG5ld1Zpc2l0b3IuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
cGFyYWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKFdURk1vdmUobmV3VmlzaXRvcikpOwotICAgICAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG1fYXZh
aWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMudGFrZUxhc3QoKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgV1RGOjpyZWdpc3RlckdDVGhyZWFkKEdDVGhyZWFkVHlwZTo6SGVscGVyKTsK
LQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgcGFy
YWxsZWxNb2RlRW5hYmxlcigqc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgICAgIHNsb3RWaXNp
dG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6OlNsYXZlRHJhaW4pOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7Ci0gICAgICAgICAgICAgICAgbV9hdmFpbGFibGVQ
YXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoc2xvdFZpc2l0b3IpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9KTsKLQotICAgIFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvciA9ICptX2NvbGxlY3Rv
clNsb3RWaXNpdG9yOwotCi0gICAgbV9jb25zdHJhaW50U2V0LT5kaWRTdGFydE1hcmtpbmcoKTsK
LSAgICAKLSAgICBtX3NjaGVkdWxlci0+YmVnaW5Db2xsZWN0aW9uKCk7Ci0gICAgaWYgKE9wdGlv
bnM6OmxvZ0dDKCkpCi0gICAgICAgIG1fc2NoZWR1bGVyLT5sb2coKTsKLSAgICAKLSAgICAvLyBB
ZnRlciB0aGlzLCB3ZSB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgZmFsbCB0aHJvdWdoIGFsbCBvZiB0
aGUgInNsb3RWaXNpdG9yLmlzRW1wdHkoKSIKLSAgICAvLyBjaGVja3MgYmVjYXVzZSBib290c3Ry
YXAgd291bGQgaGF2ZSBwdXQgdGhpbmdzIGludG8gdGhlIHZpc2l0b3IuIFNvLCB3ZSBzaG91bGQg
ZmFsbAotICAgIC8vIHRocm91Z2ggdG8gZHJhaW5pbmcuCi0gICAgCi0gICAgaWYgKCFzbG90Vmlz
aXRvci5kaWRSZWFjaFRlcm1pbmF0aW9uKCkpIHsKLSAgICAgICAgZGF0YUxvZygiRmF0YWw6IFNs
b3RWaXNpdG9yIHNob3VsZCB0aGluayB0aGF0IEdDIHNob3VsZCB0ZXJtaW5hdGUgYmVmb3JlIGNv
bnN0cmFpbnQgc29sdmluZywgYnV0IGl0IGRvZXMgbm90IHRoaW5rIHRoaXMuXG4iKTsKLSAgICAg
ICAgZGF0YUxvZygic2xvdFZpc2l0b3IuaXNFbXB0eSgpOiAiLCBzbG90VmlzaXRvci5pc0VtcHR5
KCksICJcbiIpOwotICAgICAgICBkYXRhTG9nKCJzbG90VmlzaXRvci5jb2xsZWN0b3JNYXJrU3Rh
Y2soKS5pc0VtcHR5KCk6ICIsIHNsb3RWaXNpdG9yLmNvbGxlY3Rvck1hcmtTdGFjaygpLmlzRW1w
dHkoKSwgIlxuIik7Ci0gICAgICAgIGRhdGFMb2coInNsb3RWaXNpdG9yLm11dGF0b3JNYXJrU3Rh
Y2soKS5pc0VtcHR5KCk6ICIsIHNsb3RWaXNpdG9yLm11dGF0b3JNYXJrU3RhY2soKS5pc0VtcHR5
KCksICJcbiIpOwotICAgICAgICBkYXRhTG9nKCJtX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJr
ZXJzOiAiLCBtX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzLCAiXG4iKTsKLSAgICAgICAg
ZGF0YUxvZygibV9zaGFyZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKTogIiwgbV9zaGFy
ZWRDb2xsZWN0b3JNYXJrU3RhY2stPmlzRW1wdHkoKSwgIlxuIik7Ci0gICAgICAgIGRhdGFMb2co
Im1fc2hhcmVkTXV0YXRvck1hcmtTdGFjay0+aXNFbXB0eSgpOiAiLCBtX3NoYXJlZE11dGF0b3JN
YXJrU3RhY2stPmlzRW1wdHkoKSwgIlxuIik7Ci0gICAgICAgIGRhdGFMb2coInNsb3RWaXNpdG9y
LmRpZFJlYWNoVGVybWluYXRpb24oKTogIiwgc2xvdFZpc2l0b3IuZGlkUmVhY2hUZXJtaW5hdGlv
bigpLCAiXG4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9
Ci0gICAgICAgIAotICAgIHJldHVybiBjaGFuZ2VQaGFzZShjb25uLCBDb2xsZWN0b3JQaGFzZTo6
Rml4cG9pbnQpOwotfQotCi1ORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5GaXhwb2ludFBoYXNl
KEdDQ29uZHVjdG9yIGNvbm4pCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoY29ubiA9PSBHQ0NvbmR1
Y3Rvcjo6Q29sbGVjdG9yIHx8IG1fY3VycmVudFRocmVhZFN0YXRlKTsKLSAgICAKLSAgICBTbG90
VmlzaXRvciYgc2xvdFZpc2l0b3IgPSAqbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsKLSAgICAKLSAg
ICBpZiAoT3B0aW9uczo6bG9nR0MoKSkgewotICAgICAgICBIYXNoTWFwPGNvbnN0IGNoYXIqLCBz
aXplX3Q+IHZpc2l0TWFwOwotICAgICAgICBmb3JFYWNoU2xvdFZpc2l0b3IoCi0gICAgICAgICAg
ICBbJl0gKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikgewotICAgICAgICAgICAgICAgIHZpc2l0
TWFwLmFkZChzbG90VmlzaXRvci5jb2RlTmFtZSgpLCBzbG90VmlzaXRvci5ieXRlc1Zpc2l0ZWQo
KSAvIDEwMjQpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIAotICAgICAgICBhdXRvIHBlclZp
c2l0b3JEdW1wID0gc29ydGVkTWFwRHVtcCgKLSAgICAgICAgICAgIHZpc2l0TWFwLAotICAgICAg
ICAgICAgW10gKGNvbnN0IGNoYXIqIGEsIGNvbnN0IGNoYXIqIGIpIC0+IGJvb2wgewotICAgICAg
ICAgICAgICAgIHJldHVybiBzdHJjbXAoYSwgYikgPCAwOwotICAgICAgICAgICAgfSwKLSAgICAg
ICAgICAgICI6IiwgIiAiKTsKLSAgICAgICAgCi0gICAgICAgIGRhdGFMb2coInY9IiwgYnl0ZXNW
aXNpdGVkKCkgLyAxMDI0LCAia2IgKCIsIHBlclZpc2l0b3JEdW1wLCAiKSBvPSIsIG1fb3BhcXVl
Um9vdHMuc2l6ZSgpLCAiIGI9IiwgbV9iYXJyaWVyc0V4ZWN1dGVkLCAiICIpOwotICAgIH0KLSAg
ICAgICAgCi0gICAgaWYgKHNsb3RWaXNpdG9yLmRpZFJlYWNoVGVybWluYXRpb24oKSkgewotICAg
ICAgICBtX3NjaGVkdWxlci0+ZGlkUmVhY2hUZXJtaW5hdGlvbigpOwotICAgICAgICAgICAgCi0g
ICAgICAgIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwotICAgICAgICAgICAgCi0gICAg
ICAgIHNsb3RWaXNpdG9yLm1lcmdlSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgZm9yIChhdXRvJiBw
YXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQotICAgICAgICAgICAgcGFy
YWxsZWxWaXNpdG9yLT5tZXJnZUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
Ly8gRklYTUU6IFRha2UgbV9tdXRhdG9yRGlkUnVuIGludG8gYWNjb3VudCB3aGVuIHNjaGVkdWxp
bmcgY29uc3RyYWludHMuIE1vc3QgbGlrZWx5LAotICAgICAgICAvLyB3ZSBkb24ndCBoYXZlIHRv
IGV4ZWN1dGUgcm9vdCBjb25zdHJhaW50cyBhZ2FpbiB1bmxlc3MgdGhlIG11dGF0b3IgZGlkIHJ1
bi4gQXQgYQotICAgICAgICAvLyBtaW5pbXVtLCB3ZSBjb3VsZCB1c2UgdGhpcyBmb3Igd29yayBl
c3RpbWF0ZXMgLSBidXQgaXQncyBwcm9iYWJseSBtb3JlIHRoYW4ganVzdCBhbgotICAgICAgICAv
LyBlc3RpbWF0ZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NjgyOAotICAgICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
dGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCB3ZSBjb3VsZCB0aW1lb3V0LiBUaGlzIG9u
bHkgY29tZXMKLSAgICAgICAgLy8gaW50byBwbGF5IGlmIHdlJ3JlIGV4ZWN1dGluZyBjb25zdHJh
aW50cyBmb3IgdGhlIGZpcnN0IHRpbWUuIEJ1dCB0aGF0IHdpbGwgbWF0dGVyCi0gICAgICAgIC8v
IHdoZW4gd2UgaGF2ZSBkZWVwIHN0YWNrcyBvciBhIGxvdCBvZiBET00gc3R1ZmYuCi0gICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY4MzEKLSAgICAg
ICAgICAgIAotICAgICAgICAvLyBXb25kZXJpbmcgd2hhdCB0aGlzIGRvZXM/IExvb2sgYXQgSGVh
cDo6YWRkQ29yZUNvbnN0cmFpbnRzKCkuIFRoZSBET00gYW5kIG90aGVycyBjYW4gYWxzbwotICAg
ICAgICAvLyBhZGQgdGhlaXIgb3duIHVzaW5nIEhlYXA6OmFkZE1hcmtpbmdDb25zdHJhaW50KCku
Ci0gICAgICAgIGJvb2wgY29udmVyZ2VkID0KLSAgICAgICAgICAgIG1fY29uc3RyYWludFNldC0+
ZXhlY3V0ZUNvbnZlcmdlbmNlKHNsb3RWaXNpdG9yLCBNb25vdG9uaWNUaW1lOjppbmZpbml0eSgp
KTsKLSAgICAgICAgaWYgKGNvbnZlcmdlZCAmJiBzbG90VmlzaXRvci5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgICAgIGFzc2VydFNoYXJlZE1hcmtTdGFja3NFbXB0eSgpOwotICAgICAgICAgICAgcmV0
dXJuIGNoYW5nZVBoYXNlKGNvbm4sIENvbGxlY3RvclBoYXNlOjpFbmQpOwotICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgbV9zY2hlZHVsZXItPmRpZEV4ZWN1dGVDb25zdHJhaW50cygp
OwotICAgIH0KLSAgICAgICAgCi0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCi0gICAgICAgIGRh
dGFMb2coc2xvdFZpc2l0b3IuY29sbGVjdG9yTWFya1N0YWNrKCkuc2l6ZSgpLCAiKyIsIG1fbXV0
YXRvck1hcmtTdGFjay0+c2l6ZSgpICsgc2xvdFZpc2l0b3IubXV0YXRvck1hcmtTdGFjaygpLnNp
emUoKSwgIiAiKTsKLSAgICAgICAgCi0gICAgewotICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVy
IGVuYWJsZXIoc2xvdFZpc2l0b3IpOwotICAgICAgICBzbG90VmlzaXRvci5kcmFpbkluUGFyYWxs
ZWwobV9zY2hlZHVsZXItPnRpbWVUb1Jlc3VtZSgpKTsKLSAgICB9Ci0gICAgICAgIAotICAgIG1f
c2NoZWR1bGVyLT5zeW5jaHJvbm91c0RyYWluaW5nRGlkU3RhbGwoKTsKKyAgICBjb2xsZWN0U3lu
YyhDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpOwogCi0gICAgaWYgKHNsb3RWaXNpdG9yLmRpZFJlYWNo
VGVybWluYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIHRydWU7IC8vIFRoaXMgaXMgbGlrZSByZWxv
b3BpbmcgdG8gdGhlIHRvcCBpZiBydW5GaXhwb2ludFBoYXNlKCkuCi0gICAgICAgIAotICAgIGlm
ICghbV9zY2hlZHVsZXItPnNob3VsZFJlc3VtZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyR0MoKnRoaXMpOworICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjp1c2VJbW1vcnRhbE9iamVjdHMoKSkpCisgICAgICAgIHN3ZWVwZXIoKS0+d2lsbEZpbmlz
aFN3ZWVwaW5nKCk7CiAKLSAgICBtX3NjaGVkdWxlci0+d2lsbFJlc3VtZSgpOwotICAgICAgICAK
LSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkgewotICAgICAgICBkb3VibGUgdGhpc1BhdXNlTVMg
PSAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX3N0b3BUaW1lKS5taWxsaXNlY29uZHMoKTsKLSAg
ICAgICAgZGF0YUxvZygicD0iLCB0aGlzUGF1c2VNUywgIm1zIChtYXggIiwgbWF4UGF1c2VNUyh0
aGlzUGF1c2VNUyksICIpLi4uXVxuIik7CisgICAgYm9vbCBhbHJlYWR5U3dlcHRJbkNvbGxlY3RT
eW5jID0gT3B0aW9uczo6c3dlZXBTeW5jaHJvbm91c2x5KCk7CisgICAgaWYgKCFhbHJlYWR5U3dl
cHRJbkNvbGxlY3RTeW5jKSB7CisgICAgICAgIHN3ZWVwU3luY2hyb25vdXNseSgpOworICAgICAg
ICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIlxuIik7CiAgICAg
fQorICAgIG1fb2JqZWN0U3BhY2UuYXNzZXJ0Tm9VbnN3ZXB0KCk7CiAKLSAgICAvLyBGb3JnaXZl
IHRoZSBtdXRhdG9yIGZvciBpdHMgcGFzdCBmYWlsdXJlcyB0byBrZWVwIHVwLgotICAgIC8vIEZJ
WE1FOiBGaWd1cmUgb3V0IGlmIG1vdmluZyB0aGlzIHRvIGRpZmZlcmVudCBwbGFjZXMgcmVzdWx0
cyBpbiBwZXJmIGNoYW5nZXMuCi0gICAgbV9pbmNyZW1lbnRCYWxhbmNlID0gMDsKLSAgICAgICAg
Ci0gICAgcmV0dXJuIGNoYW5nZVBoYXNlKGNvbm4sIENvbGxlY3RvclBoYXNlOjpDb25jdXJyZW50
KTsKKyAgICBzd2VlcEFsbExvZ2ljYWxseUVtcHR5V2Vha0Jsb2NrcygpOwogfQogCi1ORVZFUl9J
TkxJTkUgYm9vbCBIZWFwOjpydW5Db25jdXJyZW50UGhhc2UoR0NDb25kdWN0b3IgY29ubikKK3Zv
aWQgSGVhcDo6Y29sbGVjdEFzeW5jKHN0ZDo6b3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPiBzY29w
ZSkKIHsKLSAgICBTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IgPSAqbV9jb2xsZWN0b3JTbG90Vmlz
aXRvcjsKKyAgICBpZiAoIW1faXNTYWZlVG9Db2xsZWN0KQorICAgICAgICByZXR1cm47CiAKLSAg
ICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIoc2xvdFZpc2l0b3IpOwotICAgICAgICAKLSAg
ICBzd2l0Y2ggKGNvbm4pIHsKLSAgICBjYXNlIEdDQ29uZHVjdG9yOjpNdXRhdG9yOiB7Ci0gICAg
ICAgIC8vIFdoZW4gdGhlIG11dGF0b3IgaGFzIHRoZSBjb25uLCB3ZSBwb2xsIHJ1bkNvbmN1cnJl
bnRQaGFzZSgpIG9uIGV2ZXJ5IHRpbWUgc29tZW9uZSBzYXlzCi0gICAgICAgIC8vIHN0b3BJZk5l
Y2Vzc2FyeSgpLCBzbyBvbiBldmVyeSBhbGxvY2F0aW9uIHNsb3cgcGF0aC4gV2hlbiB0aGF0IGhh
cHBlbnMgd2UgcG9sbCBpZiBpdCdzIHRpbWUKLSAgICAgICAgLy8gdG8gc3RvcCBhbmQgZG8gc29t
ZSB3b3JrLgotICAgICAgICBpZiAoc2xvdFZpc2l0b3IuZGlkUmVhY2hUZXJtaW5hdGlvbigpCi0g
ICAgICAgICAgICB8fCBtX3NjaGVkdWxlci0+c2hvdWxkU3RvcCgpKQotICAgICAgICAgICAgcmV0
dXJuIGNoYW5nZVBoYXNlKGNvbm4sIENvbGxlY3RvclBoYXNlOjpSZWxvb3ApOwotICAgICAgICAK
LSAgICAgICAgLy8gV2UgY291bGQgYmUgY29taW5nIGZyb20gYSBjb2xsZWN0b3IgcGhhc2UgdGhh
dCBzdHVmZmVkIG91ciBTbG90VmlzaXRvciwgc28gbWFrZSBzdXJlIHdlIGRvbmF0ZQotICAgICAg
ICAvLyBldmVyeXRoaW5nLiBUaGlzIGlzIHN1cGVyIGNoZWFwIGlmIHRoZSBTbG90VmlzaXRvciBp
cyBhbHJlYWR5IGVtcHR5LgotICAgICAgICBzbG90VmlzaXRvci5kb25hdGVBbGwoKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGJvb2wgYWxyZWFkeVJlcXVlc3RlZCA9IGZhbHNlOworICAg
IHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoKm1fdGhyZWFkTG9jayk7CisgICAgICAgIGZv
ciAoc3RkOjpvcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+IHJlcXVlc3QgOiBtX3JlcXVlc3RzKSB7
CisgICAgICAgICAgICBpZiAoc2NvcGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2NvcGUgPT0g
Q29sbGVjdGlvblNjb3BlOjpFZGVuKSB7CisgICAgICAgICAgICAgICAgICAgIGFscmVhZHlSZXF1
ZXN0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzY29wZSA9PSBD
b2xsZWN0aW9uU2NvcGU6OkZ1bGwpOworICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdCA9
PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFscmVh
ZHlSZXF1ZXN0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0ID09IENvbGxlY3Rpb25T
Y29wZTo6RnVsbCkgeworICAgICAgICAgICAgICAgICAgICBhbHJlYWR5UmVxdWVzdGVkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIGNhc2UgR0NDb25kdWN0b3I6OkNvbGxlY3Rv
cjogewotICAgICAgICBzbG90VmlzaXRvci5kcmFpbkluUGFyYWxsZWxQYXNzaXZlbHkobV9zY2hl
ZHVsZXItPnRpbWVUb1N0b3AoKSk7Ci0gICAgICAgIHJldHVybiBjaGFuZ2VQaGFzZShjb25uLCBD
b2xsZWN0b3JQaGFzZTo6UmVsb29wKTsKLSAgICB9IH0KLSAgICAKLSAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYWxyZWFkeVJlcXVl
c3RlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVxdWVzdENvbGxlY3Rpb24oc2NvcGUpOwog
fQogCi1ORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5SZWxvb3BQaGFzZShHQ0NvbmR1Y3RvciBj
b25uKQordm9pZCBIZWFwOjpjb2xsZWN0U3luYyhzdGQ6Om9wdGlvbmFsPENvbGxlY3Rpb25TY29w
ZT4gc2NvcGUpCiB7Ci0gICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpCi0gICAgICAgIGRhdGFMb2co
IltHQzwiLCBSYXdQb2ludGVyKHRoaXMpLCAiPjogIiwgZ2NDb25kdWN0b3JTaG9ydE5hbWUoY29u
biksICIgIik7Ci0gICAgCi0gICAgbV9zY2hlZHVsZXItPmRpZFN0b3AoKTsKKyAgICBpZiAoIW1f
aXNTYWZlVG9Db2xsZWN0KQorICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKE9wdGlvbnM6
OmxvZ0dDKCkpCi0gICAgICAgIG1fc2NoZWR1bGVyLT5sb2coKTsKKyAgICB3YWl0Rm9yQ29sbGVj
dGlvbihyZXF1ZXN0Q29sbGVjdGlvbihzY29wZSkpOworfQorCitib29sIEhlYXA6OnNob3VsZENv
bGxlY3RJblRocmVhZChjb25zdCBMb2NrSG9sZGVyJikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCht
X3JlcXVlc3RzLmlzRW1wdHkoKSA9PSAobV9sYXN0U2VydmVkVGlja2V0ID09IG1fbGFzdEdyYW50
ZWRUaWNrZXQpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2xhc3RTZXJ2ZWRUaWNrZXQgPD0gbV9s
YXN0R3JhbnRlZFRpY2tldCk7CiAgICAgCi0gICAgcmV0dXJuIGNoYW5nZVBoYXNlKGNvbm4sIENv
bGxlY3RvclBoYXNlOjpGaXhwb2ludCk7CisgICAgcmV0dXJuICFtX3JlcXVlc3RzLmlzRW1wdHko
KTsKIH0KIAotTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRW5kUGhhc2UoR0NDb25kdWN0b3Ig
Y29ubikKK3ZvaWQgSGVhcDo6Y29sbGVjdEluVGhyZWFkKCkKIHsKLSAgICBtX3NjaGVkdWxlci0+
ZW5kQ29sbGVjdGlvbigpOwotICAgICAgICAKKyAgICBtX2N1cnJlbnRHQ1N0YXJ0VGltZSA9IE1v
bm90b25pY1RpbWU6Om5vdygpOworICAgIAorICAgIHN0ZDo6b3B0aW9uYWw8Q29sbGVjdGlvblNj
b3BlPiBzY29wZTsKICAgICB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9tYXJr
aW5nTXV0ZXgpOwotICAgICAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgPSB0cnVlOwot
ICAgICAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKKyAgICAgICAg
TG9ja0hvbGRlciBsb2NrZXIoKm1fdGhyZWFkTG9jayk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFtX3JlcXVlc3RzLmlzRW1wdHkoKSk7CisgICAgICAgIHNjb3BlID0gbV9yZXF1ZXN0cy5maXJz
dCgpOwogICAgIH0KLSAgICBtX2hlbHBlckNsaWVudC5maW5pc2goKTsKICAgICAKLSAgICBpdGVy
YXRlRXhlY3V0aW5nQW5kQ29tcGlsaW5nQ29kZUJsb2NrcygKLSAgICAgICAgWyZdIChDb2RlQmxv
Y2sqIGNvZGVCbG9jaykgewotICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGNvZGVCbG9jayk7Ci0g
ICAgICAgIH0pOwotICAgICAgICAKLSAgICB1cGRhdGVPYmplY3RDb3VudHMoKTsKLSAgICBlbmRN
YXJraW5nKCk7Ci0gICAgICAgIAorICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2FtcGxlclNj
b3BlKGZhbHNlKTsKKyAgICBUaW1pbmdTY29wZSBjb2xsZWN0SW1wbFRpbWluZ1Njb3BlKHNjb3Bl
LCAiSGVhcDo6Y29sbGVjdEluVGhyZWFkIik7CisgICAgCisjaWYgRU5BQkxFKEFMTE9DQVRJT05f
TE9HR0lORykKKyAgICBkYXRhTG9nRigiSlNDIEdDIHN0YXJ0aW5nIGNvbGxlY3Rpb24uXG4iKTsK
KyNlbmRpZgorICAgIAorICAgIHN0b3BUaGVXb3JsZCgpOworICAgIAorICAgIGlmIChmYWxzZSkK
KyAgICAgICAgZGF0YUxvZygiR0MgU1RBUlQhXG4iKTsKKworICAgIE1vbm90b25pY1RpbWUgYmVm
b3JlOworICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7CisgICAgICAgIGRhdGFMb2coIltHQzog
U1RBUlQgIiwgY2FwYWNpdHkoKSAvIDEwMjQsICJrYiAiKTsKKyAgICAgICAgYmVmb3JlID0gTW9u
b3RvbmljVGltZTo6bm93KCk7CisgICAgfQorICAgIAorICAgIGRvdWJsZSBnY1N0YXJ0VGltZTsK
KyAgICAKKyAgICBBU1NFUlQobV9pc1NhZmVUb0NvbGxlY3QpOworICAgIGlmIChtX2NvbGxlY3Rp
b25TY29wZSkgeworICAgICAgICBkYXRhTG9nKCJDb2xsZWN0aW9uIHNjb3BlIGFscmVhZHkgc2V0
IGR1cmluZyBHQzogIiwgKm1fY29sbGVjdGlvblNjb3BlLCAiXG4iKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgd2lsbFN0YXJ0Q29sbGVj
dGlvbihzY29wZSk7CisgICAgY29sbGVjdEltcGxUaW1pbmdTY29wZS5zZXRTY29wZSgqdGhpcyk7
CisgICAgCisgICAgZ2NTdGFydFRpbWUgPSBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGlt
ZSgpOworICAgIGlmIChtX3ZlcmlmaWVyKSB7CisgICAgICAgIC8vIFZlcmlmeSB0aGF0IGxpdmUg
b2JqZWN0cyBmcm9tIHRoZSBsYXN0IEdDIGN5Y2xlIGhhdmVuJ3QgYmVlbiBjb3JydXB0ZWQgYnkK
KyAgICAgICAgLy8gbXV0YXRvcnMgYmVmb3JlIHdlIGJlZ2luIHRoaXMgbmV3IEdDIGN5Y2xlLgor
ICAgICAgICBtX3ZlcmlmaWVyLT52ZXJpZnkoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QmVmb3JlR0Mp
OworICAgICAgICAgICAgCisgICAgICAgIG1fdmVyaWZpZXItPmluaXRpYWxpemVHQ0N5Y2xlKCk7
CisgICAgICAgIG1fdmVyaWZpZXItPmdhdGhlckxpdmVPYmplY3RzKEhlYXBWZXJpZmllcjo6UGhh
c2U6OkJlZm9yZU1hcmtpbmcpOworICAgIH0KKyAgICAKKyAgICBwcmVwYXJlRm9yTWFya2luZygp
OworICAgIAorICAgIG1hcmtUb0ZpeHBvaW50KGdjU3RhcnRUaW1lKTsKKyAgICAKICAgICBpZiAo
bV92ZXJpZmllcikgewogICAgICAgICBtX3ZlcmlmaWVyLT5nYXRoZXJMaXZlT2JqZWN0cyhIZWFw
VmVyaWZpZXI6OlBoYXNlOjpBZnRlck1hcmtpbmcpOwogICAgICAgICBtX3ZlcmlmaWVyLT52ZXJp
ZnkoSGVhcFZlcmlmaWVyOjpQaGFzZTo6QWZ0ZXJNYXJraW5nKTsKQEAgLTEzNTcsNyArMTE5NSw3
IEBAIE5FVkVSX0lOTElORSBib29sIEhlYXA6OnJ1bkVuZFBoYXNlKEdDQ29uZHVjdG9yIGNvbm4p
CiAgICAgbV9vYmplY3RTcGFjZS5wcmVwYXJlRm9yQWxsb2NhdGlvbigpOwogICAgIHVwZGF0ZUFs
bG9jYXRpb25MaW1pdHMoKTsKIAotICAgIGRpZEZpbmlzaENvbGxlY3Rpb24oKTsKKyAgICBkaWRG
aW5pc2hDb2xsZWN0aW9uKGdjU3RhcnRUaW1lKTsKICAgICAKICAgICBpZiAobV92ZXJpZmllcikg
ewogICAgICAgICBtX3ZlcmlmaWVyLT50cmltRGVhZE9iamVjdHMoKTsKQEAgLTEzNzAsMTIgKzEy
MDgsMTMgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSGVhcDo6cnVuRW5kUGhhc2UoR0NDb25kdWN0b3Ig
Y29ubikKICAgICB9CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpIHsKLSAgICAgICAg
ZG91YmxlIHRoaXNQYXVzZU1TID0gKG1fYWZ0ZXJHQyAtIG1fc3RvcFRpbWUpLm1pbGxpc2Vjb25k
cygpOwotICAgICAgICBkYXRhTG9nKCJwPSIsIHRoaXNQYXVzZU1TLCAibXMgKG1heCAiLCBtYXhQ
YXVzZU1TKHRoaXNQYXVzZU1TKSwgIiksIGN5Y2xlICIsIChtX2FmdGVyR0MgLSBtX2JlZm9yZUdD
KS5taWxsaXNlY29uZHMoKSwgIm1zIEVORF1cbiIpOworICAgICAgICBNb25vdG9uaWNUaW1lIGFm
dGVyID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgICAgIGRvdWJsZSB0aGlzUGF1c2VNUyA9
IChhZnRlciAtIG1fc3RvcFRpbWUpLm1pbGxpc2Vjb25kcygpOworICAgICAgICBkYXRhTG9nKCJw
PSIsIHRoaXNQYXVzZU1TLCAibXMgKG1heCAiLCBtYXhQYXVzZU1TKHRoaXNQYXVzZU1TKSwgIiks
IGN5Y2xlICIsIChhZnRlciAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICJtcyBFTkRdXG4iKTsK
ICAgICB9CiAgICAgCiAgICAgewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKCptX3Ro
cmVhZExvY2spOworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcigqbV90aHJlYWRMb2NrKTsKICAg
ICAgICAgbV9yZXF1ZXN0cy5yZW1vdmVGaXJzdCgpOwogICAgICAgICBtX2xhc3RTZXJ2ZWRUaWNr
ZXQrKzsKICAgICAgICAgY2xlYXJNdXRhdG9yV2FpdGluZygpOwpAQCAtMTM4Niw3OSArMTIyNSwy
MyBAQCBORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpydW5FbmRQaGFzZShHQ0NvbmR1Y3RvciBjb25u
KQogICAgICAgICBkYXRhTG9nKCJHQyBFTkQhXG4iKTsKIAogICAgIHNldE5lZWRGaW5hbGl6ZSgp
OwotCisgICAgcmVzdW1lVGhlV29ybGQoKTsKKyAgICAKICAgICBtX2xhc3RHQ1N0YXJ0VGltZSA9
IG1fY3VycmVudEdDU3RhcnRUaW1lOwogICAgIG1fbGFzdEdDRW5kVGltZSA9IE1vbm90b25pY1Rp
bWU6Om5vdygpOwotICAgICAgICAKLSAgICByZXR1cm4gY2hhbmdlUGhhc2UoY29ubiwgQ29sbGVj
dG9yUGhhc2U6Ok5vdFJ1bm5pbmcpOwotfQotCi1ib29sIEhlYXA6OmNoYW5nZVBoYXNlKEdDQ29u
ZHVjdG9yIGNvbm4sIENvbGxlY3RvclBoYXNlIG5leHRQaGFzZSkKLXsKLSAgICBjaGVja0Nvbm4o
Y29ubik7Ci0KLSAgICBtX25leHRQaGFzZSA9IG5leHRQaGFzZTsKLQotICAgIHJldHVybiBmaW5p
c2hDaGFuZ2luZ1BoYXNlKGNvbm4pOwotfQotCi1ORVZFUl9JTkxJTkUgYm9vbCBIZWFwOjpmaW5p
c2hDaGFuZ2luZ1BoYXNlKEdDQ29uZHVjdG9yIGNvbm4pCi17Ci0gICAgY2hlY2tDb25uKGNvbm4p
OwotICAgIAotICAgIGlmIChtX25leHRQaGFzZSA9PSBtX2N1cnJlbnRQaGFzZSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoZmFsc2UpCi0gICAgICAgIGRhdGFMb2coY29ubiwgIjog
R29pbmcgdG8gcGhhc2U6ICIsIG1fbmV4dFBoYXNlLCAiIChmcm9tICIsIG1fY3VycmVudFBoYXNl
LCAiKVxuIik7Ci0gICAgCi0gICAgYm9vbCBzdXNwZW5kZWRCZWZvcmUgPSB3b3JsZFNob3VsZEJl
U3VzcGVuZGVkKG1fY3VycmVudFBoYXNlKTsKLSAgICBib29sIHN1c3BlbmRlZEFmdGVyID0gd29y
bGRTaG91bGRCZVN1c3BlbmRlZChtX25leHRQaGFzZSk7Ci0gICAgCi0gICAgaWYgKHN1c3BlbmRl
ZEJlZm9yZSAhPSBzdXNwZW5kZWRBZnRlcikgewotICAgICAgICBpZiAoc3VzcGVuZGVkQmVmb3Jl
KSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghc3VzcGVuZGVkQWZ0ZXIpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICByZXN1bWVUaGVQZXJpcGhlcnkoKTsKLSAgICAgICAgICAgIGlm
IChjb25uID09IEdDQ29uZHVjdG9yOjpDb2xsZWN0b3IpCi0gICAgICAgICAgICAgICAgcmVzdW1l
VGhlTXV0YXRvcigpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGhhbmRsZU5l
ZWRGaW5hbGl6ZSgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIXN1c3BlbmRlZEJlZm9yZSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdXNwZW5k
ZWRBZnRlcik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChjb25uID09IEdDQ29uZHVj
dG9yOjpDb2xsZWN0b3IpIHsKLSAgICAgICAgICAgICAgICB3YWl0V2hpbGVOZWVkRmluYWxpemUo
KTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0b3BUaGVNdXRhdG9yKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGZhbHNlKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiUmV0
dXJuaW5nIGZhbHNlLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNh
bml0aXplU3RhY2tGb3JWTShtX3ZtKTsKLSAgICAgICAgICAgICAgICBoYW5kbGVOZWVkRmluYWxp
emUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0b3BUaGVQZXJpcGhlcnkoY29ubik7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgbV9jdXJyZW50UGhhc2UgPSBtX25leHRQaGFz
ZTsKLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBIZWFwOjpzdG9wVGhlUGVyaXBoZXJ5KEdD
Q29uZHVjdG9yIGNvbm4pCit2b2lkIEhlYXA6OnN0b3BUaGVXb3JsZCgpCiB7Ci0gICAgaWYgKG1f
Y29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQpIHsKLSAgICAgICAgZGF0YUxv
ZygiRkFUQUw6IHdvcmxkIGFscmVhZHkgc3RvcHBlZC5cbiIpOwotICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVCghbV9jb2xsZWN0
b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCk7CisgICAgd2FpdFdoaWxlTmVlZEZpbmFs
aXplKCk7CisgICAgc3RvcFRoZU11dGF0b3IoKTsKICAgICAKICAgICBpZiAobV9tdXRhdG9yRGlk
UnVuKQogICAgICAgICBtX211dGF0b3JFeGVjdXRpb25WZXJzaW9uKys7CiAgICAgCiAgICAgbV9t
dXRhdG9yRGlkUnVuID0gZmFsc2U7Ci0KKyAgICAKICAgICBzdXNwZW5kQ29tcGlsZXJUaHJlYWRz
KCk7CiAgICAgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCA9IHRydWU7
CiAKQEAgLTE0NzAsOCArMTI1Myw3IEBAIHZvaWQgSGVhcDo6c3RvcFRoZVBlcmlwaGVyeShHQ0Nv
bmR1Y3RvciBjb25uKQogI2lmIEVOQUJMRShKSVQpCiAgICAgewogICAgICAgICBEZWZlckdDRm9y
QVdoaWxlIGF3aGlsZSgqdGhpcyk7Ci0gICAgICAgIGlmIChKSVRXb3JrbGlzdDo6aW5zdGFuY2Uo
KS0+Y29tcGxldGVBbGxGb3JWTSgqbV92bSkKLSAgICAgICAgICAgICYmIGNvbm4gPT0gR0NDb25k
dWN0b3I6OkNvbGxlY3RvcikKKyAgICAgICAgaWYgKEpJVFdvcmtsaXN0OjppbnN0YW5jZSgpLT5j
b21wbGV0ZUFsbEZvclZNKCptX3ZtKSkKICAgICAgICAgICAgIHNldEdDRGlkSklUKCk7CiAgICAg
fQogI2Vsc2UKQEAgLTE0ODYsNyArMTI2OCw3IEBAIHZvaWQgSGVhcDo6c3RvcFRoZVBlcmlwaGVy
eShHQ0NvbmR1Y3RvciBjb25uKQogICAgIG1fc3RvcFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3co
KTsKIH0KIAotTkVWRVJfSU5MSU5FIHZvaWQgSGVhcDo6cmVzdW1lVGhlUGVyaXBoZXJ5KCkKK3Zv
aWQgSGVhcDo6cmVzdW1lVGhlV29ybGQoKQogewogICAgIC8vIENhbGxpbmcgcmVzdW1lQWxsb2Nh
dGluZyBkb2VzIHRoZSBSaWdodCBUaGluZyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIGlzIHRo
ZSBlbmQgb2YgYQogICAgIC8vIGNvbGxlY3Rpb24gY3ljbGUgb3IgdGhpcyBpcyBqdXN0IGEgY29u
Y3VycmVudCBwaGFzZSB3aXRoaW4gYSBjb2xsZWN0aW9uIGN5Y2xlOgpAQCAtMTQ5NywxMCArMTI3
OSw3IEBAIE5FVkVSX0lOTElORSB2b2lkIEhlYXA6OnJlc3VtZVRoZVBlcmlwaGVyeSgpCiAgICAg
CiAgICAgbV9iYXJyaWVyc0V4ZWN1dGVkID0gMDsKICAgICAKLSAgICBpZiAoIW1fY29sbGVjdG9y
QmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQpIHsKLSAgICAgICAgZGF0YUxvZygiRmF0YWw6
IGNvbGxlY3RvciBkb2VzIG5vdCBiZWxpZXZlIHRoYXQgdGhlIHdvcmxkIGlzIHN0b3BwZWQuXG4i
KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlQobV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCk7CiAg
ICAgbV9jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCA9IGZhbHNlOwogICAg
IAogICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIHZhc3RseSBpbXByb3ZlZDogd2Ugd2FudCB0
byBncmFiIHRoZSBsb2NrcyBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleQpAQCAtMTUzOCw3MiAr
MTMxNyw1OSBAQCBORVZFUl9JTkxJTkUgdm9pZCBIZWFwOjpyZXN1bWVUaGVQZXJpcGhlcnkoKQog
ICAgICAgICBzbG90VmlzaXRvci0+dXBkYXRlTXV0YXRvcklzU3RvcHBlZCgpOwogICAgIAogICAg
IHJlc3VtZUNvbXBpbGVyVGhyZWFkcygpOworICAgIHJlc3VtZVRoZU11dGF0b3IoKTsKIH0KIAot
Ym9vbCBIZWFwOjpzdG9wVGhlTXV0YXRvcigpCit2b2lkIEhlYXA6OnN0b3BUaGVNdXRhdG9yKCkK
IHsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIHVuc2lnbmVkIG9sZFN0YXRlID0gbV93b3JsZFN0
YXRlLmxvYWQoKTsKLSAgICAgICAgaWYgKG9sZFN0YXRlICYgc3RvcHBlZEJpdCkgewotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIShvbGRTdGF0ZSAmIGhhc0FjY2Vzc0JpdCkpOwotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIShvbGRTdGF0ZSAmIG11dGF0b3JXYWl0aW5nQml0KSk7Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghKG9sZFN0YXRlICYgbXV0YXRvckhhc0Nvbm5CaXQp
KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgICAgIGlmICgob2xk
U3RhdGUgJiBzdG9wcGVkQml0KQorICAgICAgICAgICAgJiYgKG9sZFN0YXRlICYgc2hvdWxkU3Rv
cEJpdCkpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAgICBpZiAob2xkU3Rh
dGUgJiBtdXRhdG9ySGFzQ29ubkJpdCkgewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShv
bGRTdGF0ZSAmIGhhc0FjY2Vzc0JpdCkpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShv
bGRTdGF0ZSAmIHN0b3BwZWRCaXQpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgLy8gTm90ZTogV2UgY291bGQganVzdCBoYXZlIHRoZSBtdXRhdG9yIHN0b3AgaW4tcGxhY2Ug
bGlrZSB3ZSBkbyB3aGVuICFoYXNBY2Nlc3NCaXQuIFdlIGNvdWxkCisgICAgICAgIC8vIHN3aXRj
aCB0byB0aGF0IGlmIGl0IHR1cm5lZCBvdXQgdG8gYmUgbGVzcyBjb25mdXNpbmcsIGJ1dCB0aGVu
IGl0IHdvdWxkIG5vdCBnaXZlIHRoZQorICAgICAgICAvLyBtdXRhdG9yIHRoZSBvcHBvcnR1bml0
eSB0byByZWFjdCB0byB0aGUgd29ybGQgYmVpbmcgc3RvcHBlZC4KKyAgICAgICAgaWYgKG9sZFN0
YXRlICYgbXV0YXRvcldhaXRpbmdCaXQpIHsKKyAgICAgICAgICAgIGlmIChtX3dvcmxkU3RhdGUu
Y29tcGFyZUV4Y2hhbmdlV2VhayhvbGRTdGF0ZSwgb2xkU3RhdGUgJiB+bXV0YXRvcldhaXRpbmdC
aXQpKQorICAgICAgICAgICAgICAgIFBhcmtpbmdMb3Q6OnVucGFya0FsbCgmbV93b3JsZFN0YXRl
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCEob2xk
U3RhdGUgJiBoYXNBY2Nlc3NCaXQpKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghKG9s
ZFN0YXRlICYgbXV0YXRvckhhc0Nvbm5CaXQpKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCEob2xkU3RhdGUgJiBtdXRhdG9yV2FpdGluZ0JpdCkpOworICAgICAgICAKKyAgICAgICAgaWYg
KCEob2xkU3RhdGUgJiBoYXNBY2Nlc3NCaXQpCisgICAgICAgICAgICB8fCAob2xkU3RhdGUgJiBz
dG9wcGVkQml0KSkgewogICAgICAgICAgICAgLy8gV2UgY2FuIHN0b3AgdGhlIHdvcmxkIGluc3Rh
bnRseS4KLSAgICAgICAgICAgIGlmIChtX3dvcmxkU3RhdGUuY29tcGFyZUV4Y2hhbmdlV2Vhayhv
bGRTdGF0ZSwgb2xkU3RhdGUgfCBzdG9wcGVkQml0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIGlmIChtX3dvcmxkU3RhdGUuY29tcGFyZUV4Y2hhbmdlV2Vhayhv
bGRTdGF0ZSwgb2xkU3RhdGUgfCBzdG9wcGVkQml0IHwgc2hvdWxkU3RvcEJpdCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIC8vIFRyYW5zZmVyIHRoZSBjb25uIHRvIHRoZSBtdXRhdG9yIGFuZCBiYWls
LgogICAgICAgICBSRUxFQVNFX0FTU0VSVChvbGRTdGF0ZSAmIGhhc0FjY2Vzc0JpdCk7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCEob2xkU3RhdGUgJiBzdG9wcGVkQml0KSk7Ci0gICAgICAgIHVu
c2lnbmVkIG5ld1N0YXRlID0gKG9sZFN0YXRlIHwgbXV0YXRvckhhc0Nvbm5CaXQpICYgfm11dGF0
b3JXYWl0aW5nQml0OwotICAgICAgICBpZiAobV93b3JsZFN0YXRlLmNvbXBhcmVFeGNoYW5nZVdl
YWsob2xkU3RhdGUsIG5ld1N0YXRlKSkgewotICAgICAgICAgICAgaWYgKGZhbHNlKQotICAgICAg
ICAgICAgICAgIGRhdGFMb2coIkhhbmRlZCBvZmYgdGhlIGNvbm4uXG4iKTsKLSAgICAgICAgICAg
IG1fc3RvcElmTmVjZXNzYXJ5VGltZXItPnNjaGVkdWxlU29vbigpOwotICAgICAgICAgICAgUGFy
a2luZ0xvdDo6dW5wYXJrQWxsKCZtX3dvcmxkU3RhdGUpOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9CisgICAgICAgIG1fd29ybGRTdGF0ZS5jb21wYXJlRXhjaGFuZ2VTdHJv
bmcob2xkU3RhdGUsIG9sZFN0YXRlIHwgc2hvdWxkU3RvcEJpdCk7CisgICAgICAgIG1fc3RvcElm
TmVjZXNzYXJ5VGltZXItPnNjaGVkdWxlU29vbigpOworICAgICAgICBQYXJraW5nTG90Ojpjb21w
YXJlQW5kUGFyaygmbV93b3JsZFN0YXRlLCBvbGRTdGF0ZSB8IHNob3VsZFN0b3BCaXQpOwogICAg
IH0KIH0KIAotTkVWRVJfSU5MSU5FIHZvaWQgSGVhcDo6cmVzdW1lVGhlTXV0YXRvcigpCit2b2lk
IEhlYXA6OnJlc3VtZVRoZU11dGF0b3IoKQogewotICAgIGlmIChmYWxzZSkKLSAgICAgICAgZGF0
YUxvZygiUmVzdW1pbmcgdGhlIG11dGF0b3IuXG4iKTsKICAgICBmb3IgKDs7KSB7CiAgICAgICAg
IHVuc2lnbmVkIG9sZFN0YXRlID0gbV93b3JsZFN0YXRlLmxvYWQoKTsKLSAgICAgICAgaWYgKCEh
KG9sZFN0YXRlICYgaGFzQWNjZXNzQml0KSAhPSAhKG9sZFN0YXRlICYgc3RvcHBlZEJpdCkpIHsK
LSAgICAgICAgICAgIGRhdGFMb2coIkZhdGFsOiBoYXNBY2Nlc3MgPSAiLCAhIShvbGRTdGF0ZSAm
IGhhc0FjY2Vzc0JpdCksICIsIHN0b3BwZWQgPSAiLCAhIShvbGRTdGF0ZSAmIHN0b3BwZWRCaXQp
LCAiXG4iKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKG9sZFN0YXRlICYgbXV0YXRvckhhc0Nvbm5CaXQpIHsKLSAgICAg
ICAgICAgIGRhdGFMb2coIkZhdGFsOiBtdXRhdG9yIGhhcyB0aGUgY29ubi5cbiIpOwotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQorICAgICAgICBS
RUxFQVNFX0FTU0VSVChvbGRTdGF0ZSAmIHNob3VsZFN0b3BCaXQpOwogICAgICAgICAKLSAgICAg
ICAgaWYgKCEob2xkU3RhdGUgJiBzdG9wcGVkQml0KSkgewotICAgICAgICAgICAgaWYgKGZhbHNl
KQotICAgICAgICAgICAgICAgIGRhdGFMb2coIlJldHVybmluZyBiZWNhdXNlIG5vdCBzdG9wcGVk
LlxuIik7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghKG9sZFN0YXRlICYgaGFz
QWNjZXNzQml0KSkgeworICAgICAgICAgICAgLy8gV2UgY2FuIHJlc3VtZSB0aGUgd29ybGQgaW5z
dGFudGx5LgorICAgICAgICAgICAgaWYgKG1fd29ybGRTdGF0ZS5jb21wYXJlRXhjaGFuZ2VXZWFr
KG9sZFN0YXRlLCBvbGRTdGF0ZSAmIH4oc3RvcHBlZEJpdCB8IHNob3VsZFN0b3BCaXQpKSkgewor
ICAgICAgICAgICAgICAgIFBhcmtpbmdMb3Q6OnVucGFya0FsbCgmbV93b3JsZFN0YXRlKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG1fd29ybGRTdGF0ZS5jb21wYXJl
RXhjaGFuZ2VXZWFrKG9sZFN0YXRlLCBvbGRTdGF0ZSAmIH5zdG9wcGVkQml0KSkgewotICAgICAg
ICAgICAgaWYgKGZhbHNlKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIkNBU2luZyBhbmQgcmV0
dXJuaW5nLlxuIik7CisgICAgICAgIC8vIFdlIGNhbiB0ZWxsIHRoZSB3b3JsZCB0byByZXN1bWUu
CisgICAgICAgIGlmIChtX3dvcmxkU3RhdGUuY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRTdGF0ZSwg
b2xkU3RhdGUgJiB+c2hvdWxkU3RvcEJpdCkpIHsKICAgICAgICAgICAgIFBhcmtpbmdMb3Q6OnVu
cGFya0FsbCgmbV93b3JsZFN0YXRlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpA
QCAtMTYyNSw1NCArMTM5MSwzMCBAQCB2b2lkIEhlYXA6OnN0b3BJZk5lY2Vzc2FyeVNsb3coKQog
Ym9vbCBIZWFwOjpzdG9wSWZOZWNlc3NhcnlTbG93KHVuc2lnbmVkIG9sZFN0YXRlKQogewogICAg
IFJFTEVBU0VfQVNTRVJUKG9sZFN0YXRlICYgaGFzQWNjZXNzQml0KTsKLSAgICBSRUxFQVNFX0FT
U0VSVCghKG9sZFN0YXRlICYgc3RvcHBlZEJpdCkpOwogICAgIAogICAgIC8vIEl0J3MgcG9zc2li
bGUgZm9yIHVzIHRvIHdha2UgdXAgd2l0aCBmaW5hbGl6YXRpb24gYWxyZWFkeSByZXF1ZXN0ZWQg
YnV0IHRoZSB3b3JsZCBub3QgeWV0CiAgICAgLy8gcmVzdW1lZC4gSWYgdGhhdCBoYXBwZW5zLCB3
ZSBjYW4ndCBydW4gZmluYWxpemF0aW9uIHlldC4KLSAgICBpZiAoaGFuZGxlTmVlZEZpbmFsaXpl
KG9sZFN0YXRlKSkKKyAgICBpZiAoIShvbGRTdGF0ZSAmIHN0b3BwZWRCaXQpCisgICAgICAgICYm
IGhhbmRsZU5lZWRGaW5hbGl6ZShvbGRTdGF0ZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgLy8gRklYTUU6IFdoZW4gZW50ZXJpbmcgdGhlIGNvbmN1cnJlbnQgcGhhc2UsIHdlIGNvdWxk
IGFycmFuZ2UgZm9yIHRoaXMgYnJhbmNoIG5vdCB0byBmaXJlLCBhbmQgdGhlbgotICAgIC8vIGhh
dmUgdGhlIFNsb3RWaXNpdG9yIGRvIHRoaW5ncyB0byB0aGUgbV93b3JsZFN0YXRlIHRvIG1ha2Ug
dGhpcyBicmFuY2ggZmlyZSBhZ2Fpbi4gVGhhdCB3b3VsZAotICAgIC8vIHByZXZlbnQgdXMgZnJv
bSBwb2xsaW5nIHRoaXMgc28gbXVjaC4gSWRlYWxseSwgc3RvcElmTmVjZXNzYXJ5IHdvdWxkIGln
bm9yZSB0aGUgbXV0YXRvckhhc0Nvbm5CaXQKLSAgICAvLyBhbmQgdGhlcmUgd291bGQgYmUgc29t
ZSBvdGhlciBiaXQgaW5kaWNhdGluZyB3aGV0aGVyIHdlIHdlcmUgaW4gc29tZSBHQyBwaGFzZSBv
dGhlciB0aGFuIHRoZQotICAgIC8vIE5vdFJ1bm5pbmcgb3IgQ29uY3VycmVudCBvbmVzLgotICAg
IGlmIChvbGRTdGF0ZSAmIG11dGF0b3JIYXNDb25uQml0KQotICAgICAgICBjb2xsZWN0SW5NdXRh
dG9yVGhyZWFkKCk7CiAgICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQorICAgIGlmICghKG9sZFN0
YXRlICYgc2hvdWxkU3RvcEJpdCkgJiYgIW1fc2NoZWR1bGVyLT5zaG91bGRTdG9wKCkpIHsKKyAg
ICAgICAgaWYgKCEob2xkU3RhdGUgJiBzdG9wcGVkQml0KSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgbV93b3JsZFN0YXRlLmNvbXBhcmVFeGNoYW5nZVN0cm9uZyhvbGRTdGF0
ZSwgb2xkU3RhdGUgJiB+c3RvcHBlZEJpdCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKKyAgICBzYW5pdGl6ZVN0YWNrRm9yVk0obV92bSk7CiAKLU5FVkVSX0lOTElORSB2b2lk
IEhlYXA6OmNvbGxlY3RJbk11dGF0b3JUaHJlYWQoKQotewotICAgIENvbGxlY3RpbmdTY29wZSBj
b2xsZWN0aW5nU2NvcGUoKnRoaXMpOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgUnVuQ3VycmVu
dFBoYXNlUmVzdWx0IHJlc3VsdCA9IHJ1bkN1cnJlbnRQaGFzZShHQ0NvbmR1Y3Rvcjo6TXV0YXRv
ciwgbnVsbHB0cik7Ci0gICAgICAgIHN3aXRjaCAocmVzdWx0KSB7Ci0gICAgICAgIGNhc2UgUnVu
Q3VycmVudFBoYXNlUmVzdWx0OjpGaW5pc2hlZDoKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgY2FzZSBSdW5DdXJyZW50UGhhc2VSZXN1bHQ6OkNvbnRpbnVlOgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgUnVuQ3VycmVudFBoYXNlUmVzdWx0OjpOZWVkQ3VycmVudFRocmVh
ZFN0YXRlOgotICAgICAgICAgICAgc2FuaXRpemVTdGFja0ZvclZNKG1fdm0pOwotICAgICAgICAg
ICAgYXV0byBsYW1iZGEgPSBbJl0gKEN1cnJlbnRUaHJlYWRTdGF0ZSYgc3RhdGUpIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJ1bkN1cnJlbnRQaGFz
ZVJlc3VsdCByZXN1bHQgPSBydW5DdXJyZW50UGhhc2UoR0NDb25kdWN0b3I6Ok11dGF0b3IsICZz
dGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVzdWx0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgUnVuQ3VycmVudFBoYXNlUmVzdWx0OjpGaW5pc2hlZDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBSdW5DdXJy
ZW50UGhhc2VSZXN1bHQ6OkNvbnRpbnVlOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgUnVuQ3VycmVudFBoYXNlUmVzdWx0OjpOZWVkQ3Vy
cmVudFRocmVhZFN0YXRlOgotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgIGNhbGxXaXRoQ3VycmVudFRocmVhZFN0YXRlKHNjb3BlZExhbWJkYTx2b2lkKEN1cnJlbnRU
aHJlYWRTdGF0ZSYpPihXVEZNb3ZlKGxhbWJkYSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQorICAgIGlmICh2ZXJib3NlU3RvcCkgeworICAgICAgICBkYXRhTG9nKCJTdG9wcGlu
ZyFcbiIpOworICAgICAgICBXVEZSZXBvcnRCYWNrdHJhY2UoKTsKICAgICB9CisgICAgbV93b3Js
ZFN0YXRlLmNvbXBhcmVFeGNoYW5nZVN0cm9uZyhvbGRTdGF0ZSwgb2xkU3RhdGUgfCBzdG9wcGVk
Qml0KTsKKyAgICBQYXJraW5nTG90Ojp1bnBhcmtBbGwoJm1fd29ybGRTdGF0ZSk7CisgICAgUGFy
a2luZ0xvdDo6Y29tcGFyZUFuZFBhcmsoJm1fd29ybGRTdGF0ZSwgb2xkU3RhdGUgfCBzdG9wcGVk
Qml0KTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KQEAg
LTE2ODUsMjMgKzE0MjcsMTggQEAgdm9pZCBIZWFwOjp3YWl0Rm9yQ29sbGVjdG9yKGNvbnN0IEZ1
bmMmIGZ1bmMpCiAgICAgICAgICAgICBkb25lID0gZnVuYyhsb2NrZXIpOwogICAgICAgICAgICAg
aWYgKCFkb25lKSB7CiAgICAgICAgICAgICAgICAgc2V0TXV0YXRvcldhaXRpbmcoKTsKLSAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgY29sbGVj
dG9yIGtub3dzIHRoYXQgd2UgaW50ZW5kIHRvIHdhaXQsIGFuZCBoZSB3aWxsIGNsZWFyIHRoZQog
ICAgICAgICAgICAgICAgIC8vIHdhaXRpbmcgYml0IGFuZCB0aGVuIHVucGFya0FsbCB3aGVuIHRo
ZSBHQyBjeWNsZSBmaW5pc2hlcy4gQ2xlYXJpbmcgdGhlIGJpdAogICAgICAgICAgICAgICAgIC8v
IHByZXZlbnRzIHVzIGZyb20gcGFya2luZyBleGNlcHQgaWYgdGhlcmUgaXMgYWxzbyBzdG9wLXRo
ZS13b3JsZC4gVW5wYXJraW5nIGFmdGVyCiAgICAgICAgICAgICAgICAgLy8gY2xlYXJpbmcgbWVh
bnMgdGhhdCBpZiB0aGUgY2xlYXJpbmcgaGFwcGVucyBhZnRlciB3ZSBwYXJrLCB0aGVuIHdlIHdp
bGwgdW5wYXJrLgogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAg
IC8vIElmIHdlJ3JlIGluIGEgc3RvcC10aGUtd29ybGQgc2NlbmFyaW8sIHdlIG5lZWQgdG8gd2Fp
dCBmb3IgdGhhdCBldmVuIGlmIGRvbmUgaXMgdHJ1ZS4KICAgICAgICAgdW5zaWduZWQgb2xkU3Rh
dGUgPSBtX3dvcmxkU3RhdGUubG9hZCgpOwogICAgICAgICBpZiAoc3RvcElmTmVjZXNzYXJ5U2xv
dyhvbGRTdGF0ZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0gICAgICAgIC8v
IEZJWE1FOiBXZSB3b3VsZG4ndCBuZWVkIHRoaXMgaWYgc3RvcElmTmVjZXNzYXJ5U2xvdygpIGhh
ZCBhIG1vZGUgd2hlcmUgaXQga25ldyB0byBqdXN0Ci0gICAgICAgIC8vIGRvIHRoZSBjb2xsZWN0
aW9uLgotICAgICAgICByZWxpbnF1aXNoQ29ubigpOwotICAgICAgICAKICAgICAgICAgaWYgKGRv
bmUpIHsKICAgICAgICAgICAgIGNsZWFyTXV0YXRvcldhaXRpbmcoKTsgLy8gQ2xlYW4gdXAganVz
dCBpbiBjYXNlLgogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTcxOCw3ICsxNDU1LDggQEAgdm9p
ZCBIZWFwOjphY3F1aXJlQWNjZXNzU2xvdygpCiAgICAgICAgIHVuc2lnbmVkIG9sZFN0YXRlID0g
bV93b3JsZFN0YXRlLmxvYWQoKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShvbGRTdGF0ZSAm
IGhhc0FjY2Vzc0JpdCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG9sZFN0YXRlICYgc3RvcHBl
ZEJpdCkgeworICAgICAgICBpZiAob2xkU3RhdGUgJiBzaG91bGRTdG9wQml0KSB7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChvbGRTdGF0ZSAmIHN0b3BwZWRCaXQpOwogICAgICAgICAgICAg
aWYgKHZlcmJvc2VTdG9wKSB7CiAgICAgICAgICAgICAgICAgZGF0YUxvZygiU3RvcHBpbmcgaW4g
YWNxdWlyZUFjY2VzcyFcbiIpOwogICAgICAgICAgICAgICAgIFdURlJlcG9ydEJhY2t0cmFjZSgp
OwpAQCAtMTczNCw3ICsxNDcyLDYgQEAgdm9pZCBIZWFwOjphY3F1aXJlQWNjZXNzU2xvdygpCiAg
ICAgICAgICAgICBoYW5kbGVHQ0RpZEpJVCgpOwogICAgICAgICAgICAgaGFuZGxlTmVlZEZpbmFs
aXplKCk7CiAgICAgICAgICAgICBtX211dGF0b3JEaWRSdW4gPSB0cnVlOwotICAgICAgICAgICAg
c3RvcElmTmVjZXNzYXJ5KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9
CkBAIC0xNzQ0LDczICsxNDgxLDI4IEBAIHZvaWQgSGVhcDo6cmVsZWFzZUFjY2Vzc1Nsb3coKQog
ewogICAgIGZvciAoOzspIHsKICAgICAgICAgdW5zaWduZWQgb2xkU3RhdGUgPSBtX3dvcmxkU3Rh
dGUubG9hZCgpOwotICAgICAgICBpZiAoIShvbGRTdGF0ZSAmIGhhc0FjY2Vzc0JpdCkpIHsKLSAg
ICAgICAgICAgIGRhdGFMb2coIkZBVEFMOiBBdHRlbXB0aW5nIHRvIHJlbGVhc2UgYWNjZXNzIGJ1
dCB0aGUgbXV0YXRvciBkb2VzIG5vdCBoYXZlIGFjY2Vzcy5cbiIpOwotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAob2xkU3Rh
dGUgJiBzdG9wcGVkQml0KSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJGQVRBTDogQXR0ZW1wdGlu
ZyB0byByZWxlYXNlIGFjY2VzcyBidXQgdGhlIG11dGF0b3IgaXMgc3RvcHBlZC5cbiIpOwotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQorICAgICAg
ICBSRUxFQVNFX0FTU0VSVChvbGRTdGF0ZSAmIGhhc0FjY2Vzc0JpdCk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCEob2xkU3RhdGUgJiBzdG9wcGVkQml0KSk7CiAgICAgICAgIAogICAgICAgICBp
ZiAoaGFuZGxlTmVlZEZpbmFsaXplKG9sZFN0YXRlKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbmV3U3RhdGUgPSBvbGRTdGF0ZSAmIH4oaGFzQWNj
ZXNzQml0IHwgbXV0YXRvckhhc0Nvbm5CaXQpOwotICAgICAgICAKLSAgICAgICAgaWYgKChvbGRT
dGF0ZSAmIG11dGF0b3JIYXNDb25uQml0KQotICAgICAgICAgICAgJiYgbV9uZXh0UGhhc2UgIT0g
bV9jdXJyZW50UGhhc2UpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29s
bGVjdG9yIHRocmVhZCBoYWQgZ2l2ZW4gdXMgdGhlIGNvbm4gc28gdGhhdCB3ZSB3b3VsZCBkbyBz
b21ldGhpbmcKLSAgICAgICAgICAgIC8vIGZvciBpdC4gU3RvcCBvdXJzZWx2ZXMgYXMgd2UgcmVs
ZWFzZSBhY2Nlc3MuIFRoaXMgZW5zdXJlcyB0aGF0IGFjcXVpcmVBY2Nlc3MgYmxvY2tzLiBJbgot
ICAgICAgICAgICAgLy8gdGhlIG1lYW50aW1lLCBzaW5jZSB3ZSdyZSBoYW5kaW5nIHRoZSBjb25u
IG92ZXIsIHRoZSBjb2xsZWN0b3Igd2lsbCBiZSBhd29rZW4gYW5kIGl0IGlzCi0gICAgICAgICAg
ICAvLyBzdXJlIHRvIGhhdmUgd29yayB0byBkby4KLSAgICAgICAgICAgIG5ld1N0YXRlIHw9IHN0
b3BwZWRCaXQ7CisgICAgICAgIGlmIChvbGRTdGF0ZSAmIHNob3VsZFN0b3BCaXQpIHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIG5ld1N0YXRlID0gKG9sZFN0YXRlICYgfmhhc0FjY2Vzc0JpdCkgfCBz
dG9wcGVkQml0OworICAgICAgICAgICAgaWYgKG1fd29ybGRTdGF0ZS5jb21wYXJlRXhjaGFuZ2VX
ZWFrKG9sZFN0YXRlLCBuZXdTdGF0ZSkpIHsKKyAgICAgICAgICAgICAgICBQYXJraW5nTG90Ojp1
bnBhcmtBbGwoJm1fd29ybGRTdGF0ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAo
bV93b3JsZFN0YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkU3RhdGUsIG5ld1N0YXRlKSkgewot
ICAgICAgICAgICAgaWYgKG9sZFN0YXRlICYgbXV0YXRvckhhc0Nvbm5CaXQpCi0gICAgICAgICAg
ICAgICAgZmluaXNoUmVsaW5xdWlzaGluZ0Nvbm4oKTsKKyAgICAgICAgCisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCEob2xkU3RhdGUgJiBzaG91bGRTdG9wQml0KSk7CisgICAgICAgIAorICAgICAg
ICBpZiAobV93b3JsZFN0YXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkU3RhdGUsIG9sZFN0YXRl
ICYgfmhhc0FjY2Vzc0JpdCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KICAgICB9
CiB9CiAKLWJvb2wgSGVhcDo6cmVsaW5xdWlzaENvbm4odW5zaWduZWQgb2xkU3RhdGUpCi17Ci0g
ICAgUkVMRUFTRV9BU1NFUlQob2xkU3RhdGUgJiBoYXNBY2Nlc3NCaXQpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKCEob2xkU3RhdGUgJiBzdG9wcGVkQml0KSk7Ci0gICAgCi0gICAgaWYgKCEob2xkU3Rh
dGUgJiBtdXRhdG9ySGFzQ29ubkJpdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gRG9uZS4K
LSAgICAKLSAgICBpZiAobV90aHJlYWRTaG91bGRTdG9wKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCi0gICAgaWYgKCFtX3dvcmxkU3RhdGUuY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRTdGF0
ZSwgb2xkU3RhdGUgJiB+bXV0YXRvckhhc0Nvbm5CaXQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsg
Ly8gTG9vcCBhcm91bmQuCi0gICAgCi0gICAgZmluaXNoUmVsaW5xdWlzaGluZ0Nvbm4oKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBIZWFwOjpmaW5pc2hSZWxpbnF1aXNoaW5nQ29ubigp
Ci17Ci0gICAgaWYgKGZhbHNlKQotICAgICAgICBkYXRhTG9nKCJSZWxpbnF1aXNoZWQgdGhlIGNv
bm4uXG4iKTsKLSAgICAKLSAgICBzYW5pdGl6ZVN0YWNrRm9yVk0obV92bSk7Ci0gICAgCi0gICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jaygqbV90aHJlYWRMb2NrKTsKLSAgICBpZiAoIW1fcmVxdWVz
dHMuaXNFbXB0eSgpKQotICAgICAgICBtX3RocmVhZENvbmRpdGlvbi0+bm90aWZ5T25lKGxvY2tl
cik7Ci0gICAgUGFya2luZ0xvdDo6dW5wYXJrQWxsKCZtX3dvcmxkU3RhdGUpOwotfQotCi12b2lk
IEhlYXA6OnJlbGlucXVpc2hDb25uKCkKLXsKLSAgICB3aGlsZSAocmVsaW5xdWlzaENvbm4obV93
b3JsZFN0YXRlLmxvYWQoKSkpIHsgfQotfQotCiBib29sIEhlYXA6OmhhbmRsZUdDRGlkSklUKHVu
c2lnbmVkIG9sZFN0YXRlKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG9sZFN0YXRlICYgaGFzQWNj
ZXNzQml0KTsKQEAgLTE4MjMsNyArMTUxNSw3IEBAIGJvb2wgSGVhcDo6aGFuZGxlR0NEaWRKSVQo
dW5zaWduZWQgb2xkU3RhdGUpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLU5FVkVSX0lOTElORSBi
b29sIEhlYXA6OmhhbmRsZU5lZWRGaW5hbGl6ZSh1bnNpZ25lZCBvbGRTdGF0ZSkKK2Jvb2wgSGVh
cDo6aGFuZGxlTmVlZEZpbmFsaXplKHVuc2lnbmVkIG9sZFN0YXRlKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUKG9sZFN0YXRlICYgaGFzQWNjZXNzQml0KTsKICAgICBSRUxFQVNFX0FTU0VSVCghKG9s
ZFN0YXRlICYgc3RvcHBlZEJpdCkpOwpAQCAtMTg5MCw3ICsxNTgyLDcgQEAgdm9pZCBIZWFwOjpj
bGVhck11dGF0b3JXYWl0aW5nKCkKICAgICBtX3dvcmxkU3RhdGUuZXhjaGFuZ2VBbmQofm11dGF0
b3JXYWl0aW5nQml0KTsKIH0KIAotdm9pZCBIZWFwOjpub3RpZnlUaHJlYWRTdG9wcGluZyhjb25z
dCBBYnN0cmFjdExvY2tlciYpCit2b2lkIEhlYXA6Om5vdGlmeVRocmVhZFN0b3BwaW5nKGNvbnN0
IExvY2tIb2xkZXImKQogewogICAgIG1fdGhyZWFkSXNTdG9wcGluZyA9IHRydWU7CiAgICAgY2xl
YXJNdXRhdG9yV2FpdGluZygpOwpAQCAtMTkwMiwxMSArMTU5NCwxMSBAQCB2b2lkIEhlYXA6OmZp
bmFsaXplKCkKICAgICBNb25vdG9uaWNUaW1lIGJlZm9yZTsKICAgICBpZiAoT3B0aW9uczo6bG9n
R0MoKSkgewogICAgICAgICBiZWZvcmUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLSAgICAgICAg
ZGF0YUxvZygiW0dDPCIsIFJhd1BvaW50ZXIodGhpcyksICI+OiBmaW5hbGl6ZSAiKTsKKyAgICAg
ICAgZGF0YUxvZygiW0dDOiBmaW5hbGl6ZSAiKTsKICAgICB9CiAgICAgCiAgICAgewotICAgICAg
ICBTd2VlcGluZ1Njb3BlIGhlbHBpbmdHQ1Njb3BlKCp0aGlzKTsKKyAgICAgICAgSGVscGluZ0dD
U2NvcGUgaGVscGluZ0dDU2NvcGUoKnRoaXMpOwogICAgICAgICBkZWxldGVVbm1hcmtlZENvbXBp
bGVkQ29kZSgpOwogICAgICAgICBkZWxldGVTb3VyY2VQcm92aWRlckNhY2hlcygpOwogICAgICAg
ICBzd2VlcExhcmdlQWxsb2NhdGlvbnMoKTsKQEAgLTE5MTQsMTQgKzE2MDYsNiBAQCB2b2lkIEhl
YXA6OmZpbmFsaXplKCkKICAgICAKICAgICBpZiAoSGFzT3duUHJvcGVydHlDYWNoZSogY2FjaGUg
PSB2bSgpLT5oYXNPd25Qcm9wZXJ0eUNhY2hlKCkpCiAgICAgICAgIGNhY2hlLT5jbGVhcigpOwot
ICAgIAotICAgIHsKLSAgICAgICAgLy8gVGhpcyBpZGlvbSBhbGxvd3MgY2FsbGJhY2tzIHRvIGNh
bGwgYWRkRmluYWxpemF0aW9uQ2FsbGJhY2soKSBpZiB0aGV5IHdhbnQgdG8gYmUgYWRkZWQgYmFj
ay4KLSAgICAgICAgVmVjdG9yPFJlZlB0cjxHQ0ZpbmFsaXphdGlvbkNhbGxiYWNrPj4gbXlDYWxs
YmFja3M7Ci0gICAgICAgIHN0ZDo6c3dhcChteUNhbGxiYWNrcywgbV9maW5hbGl6YXRpb25DYWxs
YmFja3MpOwotICAgICAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbXlDYWxsYmFja3MpCi0gICAg
ICAgICAgICBjYWxsYmFjay0+ZGlkRmluYWxpemUoKnRoaXMpOwotICAgIH0KIAogICAgIGlmIChP
cHRpb25zOjpzd2VlcFN5bmNocm9ub3VzbHkoKSkKICAgICAgICAgc3dlZXBTeW5jaHJvbm91c2x5
KCk7CkBAIC0xOTMyLDExICsxNjE2LDYgQEAgdm9pZCBIZWFwOjpmaW5hbGl6ZSgpCiAgICAgfQog
fQogCi12b2lkIEhlYXA6OmFkZEZpbmFsaXphdGlvbkNhbGxiYWNrKFJlZlB0cjxHQ0ZpbmFsaXph
dGlvbkNhbGxiYWNrPiBjYWxsYmFjaykKLXsKLSAgICBtX2ZpbmFsaXphdGlvbkNhbGxiYWNrcy5h
cHBlbmQoY2FsbGJhY2spOwotfQotCiBIZWFwOjpUaWNrZXQgSGVhcDo6cmVxdWVzdENvbGxlY3Rp
b24oc3RkOjpvcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+IHNjb3BlKQogewogICAgIHN0b3BJZk5l
Y2Vzc2FyeSgpOwpAQCAtMTk0NSwyNyArMTYyNCwxNiBAQCBIZWFwOjpUaWNrZXQgSGVhcDo6cmVx
dWVzdENvbGxlY3Rpb24oc3RkOjpvcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+IHNjb3BlKQogICAg
IFJFTEVBU0VfQVNTRVJUKHZtKCktPmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gd3RmVGhyZWFkRGF0
YSgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOwogICAgIAogICAgIExvY2tIb2xkZXIgbG9ja2VyKCpt
X3RocmVhZExvY2spOwotICAgIC8vIFdlIG1heSBiZSBhYmxlIHRvIHN0ZWFsIHRoZSBjb25uLiBU
aGF0IG9ubHkgd29ya3MgaWYgdGhlIGNvbGxlY3RvciBpcyBkZWZpbml0ZWx5IG5vdCBydW5uaW5n
Ci0gICAgLy8gcmlnaHQgbm93LiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiB0aGF0IHByZXZlbnRz
IHRoZSBjb2xsZWN0b3IgdGhyZWFkIGZyb20gZXZlciBzdGFydGluZyBpbiBtb3N0Ci0gICAgLy8g
Y2FzZXMuCi0gICAgQVNTRVJUKG1fbGFzdFNlcnZlZFRpY2tldCA8PSBtX2xhc3RHcmFudGVkVGlj
a2V0KTsKLSAgICBpZiAobV9sYXN0U2VydmVkVGlja2V0ID09IG1fbGFzdEdyYW50ZWRUaWNrZXQp
IHsKLSAgICAgICAgaWYgKGZhbHNlKQotICAgICAgICAgICAgZGF0YUxvZygiVGFraW5nIHRoZSBj
b25uLlxuIik7Ci0gICAgICAgIG1fd29ybGRTdGF0ZS5leGNoYW5nZU9yKG11dGF0b3JIYXNDb25u
Qml0KTsKLSAgICB9Ci0gICAgCiAgICAgbV9yZXF1ZXN0cy5hcHBlbmQoc2NvcGUpOwogICAgIG1f
bGFzdEdyYW50ZWRUaWNrZXQrKzsKLSAgICBpZiAoIShtX3dvcmxkU3RhdGUubG9hZCgpICYgbXV0
YXRvckhhc0Nvbm5CaXQpKQotICAgICAgICBtX3RocmVhZENvbmRpdGlvbi0+bm90aWZ5T25lKGxv
Y2tlcik7CisgICAgbV90aHJlYWRDb25kaXRpb24tPm5vdGlmeU9uZShsb2NrZXIpOwogICAgIHJl
dHVybiBtX2xhc3RHcmFudGVkVGlja2V0OwogfQogCiB2b2lkIEhlYXA6OndhaXRGb3JDb2xsZWN0
aW9uKFRpY2tldCB0aWNrZXQpCiB7CiAgICAgd2FpdEZvckNvbGxlY3RvcigKLSAgICAgICAgWyZd
IChjb25zdCBBYnN0cmFjdExvY2tlciYpIC0+IGJvb2wgeworICAgICAgICBbJl0gKGNvbnN0IExv
Y2tIb2xkZXImKSAtPiBib29sIHsKICAgICAgICAgICAgIHJldHVybiBtX2xhc3RTZXJ2ZWRUaWNr
ZXQgPj0gdGlja2V0OwogICAgICAgICB9KTsKIH0KQEAgLTIxMDQsNiArMTc3Miw5IEBAIHZvaWQg
SGVhcDo6dXBkYXRlQWxsb2NhdGlvbkxpbWl0cygpCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
IGRhdGFMb2coImV4dHJhTWVtb3J5U2l6ZSgpID0gIiwgZXh0cmFNZW1vcnlTaXplKCksICIsIGN1
cnJlbnRIZWFwU2l6ZSA9ICIsIGN1cnJlbnRIZWFwU2l6ZSwgIlxuIik7CiAgICAgCisgICAgaWYg
KE9wdGlvbnM6OmdjTWF4SGVhcFNpemUoKSAmJiBjdXJyZW50SGVhcFNpemUgPiBPcHRpb25zOjpn
Y01heEhlYXBTaXplKCkpCisgICAgICAgIEhlYXBTdGF0aXN0aWNzOjpleGl0V2l0aEZhaWx1cmUo
KTsKKwogICAgIGlmIChtX2NvbGxlY3Rpb25TY29wZSA9PSBDb2xsZWN0aW9uU2NvcGU6OkZ1bGwp
IHsKICAgICAgICAgLy8gVG8gYXZvaWQgcGF0aG9sb2dpY2FsIEdDIGNodXJuIGluIHZlcnkgc21h
bGwgYW5kIHZlcnkgbGFyZ2UgaGVhcHMsIHdlIHNldAogICAgICAgICAvLyB0aGUgbmV3IGFsbG9j
YXRpb24gbGltaXQgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgaGVhcCwgd2l0aCBh
CkBAIC0yMTU2LDE5ICsxODI3LDI1IEBAIHZvaWQgSGVhcDo6dXBkYXRlQWxsb2NhdGlvbkxpbWl0
cygpCiAgICAgICAgIGRhdGFMb2coIj0+ICIsIGN1cnJlbnRIZWFwU2l6ZSAvIDEwMjQsICJrYiwg
Iik7CiB9CiAKLXZvaWQgSGVhcDo6ZGlkRmluaXNoQ29sbGVjdGlvbigpCit2b2lkIEhlYXA6OmRp
ZEZpbmlzaENvbGxlY3Rpb24oZG91YmxlIGdjU3RhcnRUaW1lKQogewotICAgIG1fYWZ0ZXJHQyA9
IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgIGRvdWJsZSBnY0VuZFRpbWUgPSBXVEY6Om1vbm90
b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwogICAgIENvbGxlY3Rpb25TY29wZSBzY29wZSA9ICpt
X2NvbGxlY3Rpb25TY29wZTsKICAgICBpZiAoc2NvcGUgPT0gQ29sbGVjdGlvblNjb3BlOjpGdWxs
KQotICAgICAgICBtX2xhc3RGdWxsR0NMZW5ndGggPSBtX2FmdGVyR0MgLSBtX2JlZm9yZUdDOwor
ICAgICAgICBtX2xhc3RGdWxsR0NMZW5ndGggPSBnY0VuZFRpbWUgLSBnY1N0YXJ0VGltZTsKICAg
ICBlbHNlCi0gICAgICAgIG1fbGFzdEVkZW5HQ0xlbmd0aCA9IG1fYWZ0ZXJHQyAtIG1fYmVmb3Jl
R0M7CisgICAgICAgIG1fbGFzdEVkZW5HQ0xlbmd0aCA9IGdjRW5kVGltZSAtIGdjU3RhcnRUaW1l
OwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQogICAgIEFTU0VSVChleHRlcm5hbE1lbW9y
eVNpemUoKSA8PSBleHRyYU1lbW9yeVNpemUoKSk7CiAjZW5kaWYKIAorICAgIGlmIChPcHRpb25z
OjpyZWNvcmRHQ1BhdXNlVGltZXMoKSkKKyAgICAgICAgSGVhcFN0YXRpc3RpY3M6OnJlY29yZEdD
UGF1c2VUaW1lKGdjU3RhcnRUaW1lLCBnY0VuZFRpbWUpOworCisgICAgaWYgKE9wdGlvbnM6OmR1
bXBPYmplY3RTdGF0aXN0aWNzKCkpCisgICAgICAgIEhlYXBTdGF0aXN0aWNzOjpkdW1wT2JqZWN0
U3RhdGlzdGljcyh0aGlzKTsKKwogICAgIGlmIChIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlciA9
IG1fdm0tPmhlYXBQcm9maWxlcigpKSB7CiAgICAgICAgIGdhdGhlckV4dHJhSGVhcFNuYXBzaG90
RGF0YSgqaGVhcFByb2ZpbGVyKTsKICAgICAgICAgcmVtb3ZlRGVhZEhlYXBTbmFwc2hvdE5vZGVz
KCpoZWFwUHJvZmlsZXIpOwpAQCAtMjM5NSwxNCArMjA3Miw4IEBAIHZvaWQgSGVhcDo6Y29sbGVj
dElmTmVjZXNzYXJ5T3JEZWZlcihHQ0RlZmVycmFsQ29udGV4dCogZGVmZXJyYWxDb250ZXh0KQog
CiAgICAgaWYgKCFtX2lzU2FmZVRvQ29sbGVjdCkKICAgICAgICAgcmV0dXJuOwotICAgIHN3aXRj
aCAobXV0YXRvclN0YXRlKCkpIHsKLSAgICBjYXNlIE11dGF0b3JTdGF0ZTo6UnVubmluZzoKLSAg
ICBjYXNlIE11dGF0b3JTdGF0ZTo6QWxsb2NhdGluZzoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBNdXRhdG9yU3RhdGU6OlN3ZWVwaW5nOgotICAgIGNhc2UgTXV0YXRvclN0YXRlOjpDb2xsZWN0
aW5nOgorICAgIGlmIChtdXRhdG9yU3RhdGUoKSA9PSBNdXRhdG9yU3RhdGU6OkhlbHBpbmdHQykK
ICAgICAgICAgcmV0dXJuOwotICAgIH0KICAgICBpZiAoIU9wdGlvbnM6OnVzZUdDKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKQEAgLTI0MTEsOCArMjA4MiwxMSBAQCB2b2lkIEhlYXA6OmNvbGxl
Y3RJZk5lY2Vzc2FyeU9yRGVmZXIoR0NEZWZlcnJhbENvbnRleHQqIGRlZmVycmFsQ29udGV4dCkK
ICAgICAgICAgICAgIGRlZmVycmFsQ29udGV4dC0+bV9zaG91bGRHQyA9IHRydWU7CiAgICAgICAg
IGVsc2UgaWYgKGlzRGVmZXJyZWQoKSkKICAgICAgICAgICAgIG1fZGlkRGVmZXJHQ1dvcmsgPSB0
cnVlOwotICAgICAgICBlbHNlCisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgc3RvcElmTmVj
ZXNzYXJ5KCk7CisgICAgICAgICAgICAvLyBGSVhNRTogQ2hlY2sgaWYgdGhlIHNjaGVkdWxlciB3
YW50cyB1cyB0byBzdG9wLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NjgyNworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIGlmIChV
TkxJS0VMWShPcHRpb25zOjpnY01heEhlYXBTaXplKCkpKSB7CkBAIC0yNDI3LDEwICsyMTAxLDgg
QEAgdm9pZCBIZWFwOjpjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKEdDRGVmZXJyYWxDb250ZXh0
KiBkZWZlcnJhbENvbnRleHQpCiAgICAgICAgIGRlZmVycmFsQ29udGV4dC0+bV9zaG91bGRHQyA9
IHRydWU7CiAgICAgZWxzZSBpZiAoaXNEZWZlcnJlZCgpKQogICAgICAgICBtX2RpZERlZmVyR0NX
b3JrID0gdHJ1ZTsKLSAgICBlbHNlIHsKKyAgICBlbHNlCiAgICAgICAgIGNvbGxlY3RBc3luYygp
OwotICAgICAgICBzdG9wSWZOZWNlc3NhcnkoKTsgLy8gVGhpcyB3aWxsIGltbWVkaWF0ZWx5IHN0
YXJ0IHRoZSBjb2xsZWN0aW9uIGlmIHdlIGhhdmUgdGhlIGNvbm4uCi0gICAgfQogfQogCiB2b2lk
IEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkU2xvdygpCkBAIC0yNjMz
LDEyICsyMzA1LDYgQEAgdm9pZCBIZWFwOjphZGRNYXJraW5nQ29uc3RyYWludChzdGQ6OnVuaXF1
ZV9wdHI8TWFya2luZ0NvbnN0cmFpbnQ+IGNvbnN0cmFpbnQpCiAKIHZvaWQgSGVhcDo6bm90aWZ5
SXNTYWZlVG9Db2xsZWN0KCkKIHsKLSAgICBNb25vdG9uaWNUaW1lIGJlZm9yZTsKLSAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSkgewotICAgICAgICBiZWZvcmUgPSBNb25vdG9uaWNUaW1lOjpub3co
KTsKLSAgICAgICAgZGF0YUxvZygiW0dDPCIsIFJhd1BvaW50ZXIodGhpcyksICI+OiBzdGFydGlu
ZyAiKTsKLSAgICB9Ci0gICAgCiAgICAgYWRkQ29yZUNvbnN0cmFpbnRzKCk7CiAgICAgCiAgICAg
bV9pc1NhZmVUb0NvbGxlY3QgPSB0cnVlOwpAQCAtMjY3Myw5ICsyMzM5LDYgQEAgdm9pZCBIZWFw
Ojpub3RpZnlJc1NhZmVUb0NvbGxlY3QoKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0pOwogICAgIH0KLSAgICAKLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAgZGF0
YUxvZygoTW9ub3RvbmljVGltZTo6bm93KCkgLSBiZWZvcmUpLm1pbGxpc2Vjb25kcygpLCAibXNd
XG4iKTsKIH0KIAogdm9pZCBIZWFwOjpwcmV2ZW50Q29sbGVjdGlvbigpCkBAIC0yNjg4LDcgKzIz
NTEsNyBAQCB2b2lkIEhlYXA6OnByZXZlbnRDb2xsZWN0aW9uKCkKICAgICAKICAgICAvLyBXYWl0
IGZvciBhbGwgY29sbGVjdGlvbnMgdG8gZmluaXNoLgogICAgIHdhaXRGb3JDb2xsZWN0b3IoCi0g
ICAgICAgIFsmXSAoY29uc3QgQWJzdHJhY3RMb2NrZXImKSAtPiBib29sIHsKKyAgICAgICAgWyZd
IChjb25zdCBMb2NrSG9sZGVyJikgLT4gYm9vbCB7CiAgICAgICAgICAgICBBU1NFUlQobV9sYXN0
U2VydmVkVGlja2V0IDw9IG1fbGFzdEdyYW50ZWRUaWNrZXQpOwogICAgICAgICAgICAgcmV0dXJu
IG1fbGFzdFNlcnZlZFRpY2tldCA9PSBtX2xhc3RHcmFudGVkVGlja2V0OwogICAgICAgICB9KTsK
QEAgLTI3NDEsMTEgKzI0MDQsMjIgQEAgdm9pZCBIZWFwOjpwZXJmb3JtSW5jcmVtZW50KHNpemVf
dCBieXRlcykKICAgICAgICAgcmV0dXJuOwogICAgIHRhcmdldEJ5dGVzID0gc3RkOjptaW4odGFy
Z2V0Qnl0ZXMsIE9wdGlvbnM6OmdjSW5jcmVtZW50TWF4Qnl0ZXMoKSk7CiAKKyAgICBNb25vdG9u
aWNUaW1lIGJlZm9yZTsKKyAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkgeworICAgICAgICBkYXRh
TG9nKCJbR0M6IGluY3JlbWVudCB0PSIsIHRhcmdldEJ5dGVzIC8gMTAyNCwgImtiICIpOworICAg
ICAgICBiZWZvcmUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICB9CisKICAgICBTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IgPSAqbV9tdXRhdG9yU2xvdFZpc2l0b3I7CiAgICAgUGFyYWxsZWxN
b2RlRW5hYmxlciBwYXJhbGxlbE1vZGVFbmFibGVyKHNsb3RWaXNpdG9yKTsKICAgICBzaXplX3Qg
Ynl0ZXNWaXNpdGVkID0gc2xvdFZpc2l0b3IucGVyZm9ybUluY3JlbWVudE9mRHJhaW5pbmcoc3Rh
dGljX2Nhc3Q8c2l6ZV90Pih0YXJnZXRCeXRlcykpOwogICAgIC8vIGluY3JlbWVudEJhbGFuY2Ug
bWF5IGdvIG5lZ2F0aXZlIGhlcmUgYmVjYXVzZSBpdCdsbCByZW1lbWJlciBob3cgbWFueSBieXRl
cyB3ZSBvdmVyc2hvdC4KICAgICBtX2luY3JlbWVudEJhbGFuY2UgLT0gYnl0ZXNWaXNpdGVkOwor
CisgICAgaWYgKE9wdGlvbnM6OmxvZ0dDKCkpIHsKKyAgICAgICAgTW9ub3RvbmljVGltZSBhZnRl
ciA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgICAgICBkYXRhTG9nKCJwPSIsIChhZnRlciAt
IGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICJtcyBiPSIsIG1faW5jcmVtZW50QmFsYW5jZSAvIDEw
MjQsICJrYl1cbiIpOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgKaW5kZXggMjE3YjcwYjdkNTU3ZjM0NGE5ZGQ0OWJjZjNjNjQyM2ZmZjgy
Yzk0MC4uZDNiNzk2NGUyMDQ5NTBlNWUxNDM0YTRkYmE2MjdmYWU1ZDI5ZDM0NSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaApAQCAtMjQsMTQgKzI0LDEzIEBACiAjaW5jbHVkZSAiQXJyYXlC
dWZmZXIuaCIKICNpbmNsdWRlICJDZWxsU3RhdGUuaCIKICNpbmNsdWRlICJDb2xsZWN0aW9uU2Nv
cGUuaCIKLSNpbmNsdWRlICJDb2xsZWN0b3JQaGFzZS5oIgogI2luY2x1ZGUgIkRlbGV0ZUFsbENv
ZGVFZmZvcnQuaCIKLSNpbmNsdWRlICJHQ0NvbmR1Y3Rvci5oIgogI2luY2x1ZGUgIkdDSW5jb21p
bmdSZWZDb3VudGVkU2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU2V0LmgiCiAjaW5jbHVkZSAiSGFu
ZGxlU3RhY2suaCIKICNpbmNsdWRlICJIZWFwT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJMaXN0YWJs
ZUhhbmRsZXIuaCIKKyNpbmNsdWRlICJNYWNoaW5lU3RhY2tNYXJrZXIuaCIKICNpbmNsdWRlICJN
YXJrZWRCbG9jay5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiTWFy
a2VkU3BhY2UuaCIKQEAgLTU0LDM4ICs1MywzMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
Q29kZUJsb2NrOwogY2xhc3MgQ29kZUJsb2NrU2V0OwotY2xhc3MgQ29sbGVjdGluZ1Njb3BlOwot
Y2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CiBjbGFzcyBHQ0RlZmVycmFsQ29udGV4dDsKIGNsYXNz
IEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2s7CiBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKIGNsYXNzIEZ1
bGxHQ0FjdGl2aXR5Q2FsbGJhY2s7CiBjbGFzcyBHQ0FjdGl2aXR5Q2FsbGJhY2s7CiBjbGFzcyBH
Q0F3YXJlSklUU3R1YlJvdXRpbmU7Ci1jbGFzcyBHQ0ZpbmFsaXphdGlvbkNhbGxiYWNrOwogY2xh
c3MgSGVhcDsKIGNsYXNzIEhlYXBQcm9maWxlcjsKIGNsYXNzIEhlYXBWZXJpZmllcjsKK2NsYXNz
IEhlbHBpbmdHQ1Njb3BlOwogY2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyOwogY2xhc3MgSklUU3R1
YlJvdXRpbmU7CiBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKIGNsYXNzIEpTQ2VsbDsKIGNsYXNz
IEpTVmFsdWU7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Ci1jbGFzcyBNYWNoaW5lVGhy
ZWFkczsKIGNsYXNzIE1hcmtTdGFja0FycmF5OwogY2xhc3MgTWFya2VkQWxsb2NhdG9yOwogY2xh
c3MgTWFya2VkQXJndW1lbnRCdWZmZXI7CiBjbGFzcyBNYXJraW5nQ29uc3RyYWludDsKIGNsYXNz
IE1hcmtpbmdDb25zdHJhaW50U2V0OwogY2xhc3MgTXV0YXRvclNjaGVkdWxlcjsKLWNsYXNzIFJ1
bm5pbmdTY29wZTsKIGNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlcjsKIGNsYXNzIFN0b3BJZk5lY2Vzc2FyeVRpbWVyOwotY2xhc3MgU3dlZXBpbmdTY29w
ZTsKIGNsYXNzIFZNOwotc3RydWN0IEN1cnJlbnRUaHJlYWRTdGF0ZTsKIAogbmFtZXNwYWNlIERG
RyB7CiBjbGFzcyBTcGVjdWxhdGl2ZUpJVDsKQEAgLTEzOCw3ICsxMzEsNyBAQCBwdWJsaWM6CiAg
ICAgVk0qIHZtKCkgY29uc3Q7CiAKICAgICBNYXJrZWRTcGFjZSYgb2JqZWN0U3BhY2UoKSB7IHJl
dHVybiBtX29iamVjdFNwYWNlOyB9Ci0gICAgTWFjaGluZVRocmVhZHMmIG1hY2hpbmVUaHJlYWRz
KCkgeyByZXR1cm4gKm1fbWFjaGluZVRocmVhZHM7IH0KKyAgICBNYWNoaW5lVGhyZWFkcyYgbWFj
aGluZVRocmVhZHMoKSB7IHJldHVybiBtX21hY2hpbmVUaHJlYWRzOyB9CiAKICAgICBTbG90Vmlz
aXRvciYgY29sbGVjdG9yU2xvdFZpc2l0b3IoKSB7IHJldHVybiAqbV9jb2xsZWN0b3JTbG90Vmlz
aXRvcjsgfQogCkBAIC0xNTQsNiArMTQ3LDcgQEAgcHVibGljOgogICAgIE11dGF0b3JTdGF0ZSBt
dXRhdG9yU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX211dGF0b3JTdGF0ZTsgfQogICAgIHN0ZDo6
b3B0aW9uYWw8Q29sbGVjdGlvblNjb3BlPiBjb2xsZWN0aW9uU2NvcGUoKSBjb25zdCB7IHJldHVy
biBtX2NvbGxlY3Rpb25TY29wZTsgfQogICAgIGJvb2wgaGFzSGVhcEFjY2VzcygpIGNvbnN0Owor
ICAgIGJvb2wgbXV0YXRvcklzU3RvcHBlZCgpIGNvbnN0OwogICAgIGJvb2wgY29sbGVjdG9yQmVs
aWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSBjb25zdDsKIAogICAgIC8vIFdlJ3JlIGFsd2F5
cyBidXN5IG9uIHRoZSBjb2xsZWN0aW9uIHRocmVhZHMuIE9uIHRoZSBtYWluIHRocmVhZCwgdGhp
cyByZXR1cm5zIHRydWUgaWYgd2UncmUKQEAgLTIzNSw5ICsyMjksOSBAQCBwdWJsaWM6CiAgICAg
dm9pZCB3aWxsU3RhcnRJdGVyYXRpbmcoKTsKICAgICB2b2lkIGRpZEZpbmlzaEl0ZXJhdGluZygp
OwogCi0gICAgU2Vjb25kcyBsYXN0RnVsbEdDTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0
RnVsbEdDTGVuZ3RoOyB9Ci0gICAgU2Vjb25kcyBsYXN0RWRlbkdDTGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXN0RWRlbkdDTGVuZ3RoOyB9Ci0gICAgdm9pZCBpbmNyZWFzZUxhc3RGdWxsR0NM
ZW5ndGgoU2Vjb25kcyBhbW91bnQpIHsgbV9sYXN0RnVsbEdDTGVuZ3RoICs9IGFtb3VudDsgfQor
ICAgIGRvdWJsZSBsYXN0RnVsbEdDTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RnVsbEdD
TGVuZ3RoOyB9CisgICAgZG91YmxlIGxhc3RFZGVuR0NMZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X2xhc3RFZGVuR0NMZW5ndGg7IH0KKyAgICB2b2lkIGluY3JlYXNlTGFzdEZ1bGxHQ0xlbmd0aChk
b3VibGUgYW1vdW50KSB7IG1fbGFzdEZ1bGxHQ0xlbmd0aCArPSBhbW91bnQ7IH0KIAogICAgIHNp
emVfdCBzaXplQmVmb3JlTGFzdEVkZW5Db2xsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zaXpl
QmVmb3JlTGFzdEVkZW5Db2xsZWN0OyB9CiAgICAgc2l6ZV90IHNpemVBZnRlckxhc3RFZGVuQ29s
bGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZUFmdGVyTGFzdEVkZW5Db2xsZWN0OyB9CkBA
IC0zMjUsOSArMzE5LDYgQEAgcHVibGljOgogICAgIC8vIGFscmVhZHkgYmUgY2FsbGVkIGZvciB5
b3UgYXQgdGhlIHJpZ2h0IHRpbWVzLgogICAgIHZvaWQgc3RvcElmTmVjZXNzYXJ5KCk7CiAgICAg
Ci0gICAgLy8gVGhpcyBnaXZlcyB0aGUgY29ubiB0byB0aGUgY29sbGVjdG9yLgotICAgIHZvaWQg
cmVsaW5xdWlzaENvbm4oKTsKLSAgICAKICAgICBib29sIG1heU5lZWRUb1N0b3AoKTsKIAogICAg
IHZvaWQgcGVyZm9ybUluY3JlbWVudChzaXplX3QgYnl0ZXMpOwpAQCAtMzUyLDEzICszNDMsMTAg
QEAgcHVibGljOgogICAgIENGUnVuTG9vcFJlZiBydW5Mb29wKCkgY29uc3QgeyByZXR1cm4gbV9y
dW5Mb29wLmdldCgpOyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRSdW5Mb29wKENG
UnVuTG9vcFJlZik7CiAjZW5kaWYgLy8gVVNFKENGKQotICAgIAotICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgYWRkRmluYWxpemF0aW9uQ2FsbGJhY2soUmVmUHRyPEdDRmluYWxpemF0aW9uQ2Fs
bGJhY2s+KTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWxsb2NhdGluZ1Njb3BlOwog
ICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgZnJpZW5kIGNsYXNzIENvbGxlY3RpbmdT
Y29wZTsKICAgICBmcmllbmQgY2xhc3MgRGVmZXJHQzsKICAgICBmcmllbmQgY2xhc3MgRGVmZXJH
Q0ZvckFXaGlsZTsKICAgICBmcmllbmQgY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwpAQCAt
MzY3LDE2ICszNTUsMTUgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSGFuZGxlU2V0Owog
ICAgIGZyaWVuZCBjbGFzcyBIZWFwVXRpbDsKICAgICBmcmllbmQgY2xhc3MgSGVhcFZlcmlmaWVy
OworICAgIGZyaWVuZCBjbGFzcyBIZWxwaW5nR0NTY29wZTsKICAgICBmcmllbmQgY2xhc3MgSklU
U3R1YlJvdXRpbmU7CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAg
ICBmcmllbmQgY2xhc3MgTWFya2VkU3BhY2U7CiAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEFsbG9j
YXRvcjsKICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7Ci0gICAgZnJpZW5kIGNsYXNzIFJ1
bm5pbmdTY29wZTsKICAgICBmcmllbmQgY2xhc3MgU2xvdFZpc2l0b3I7CiAgICAgZnJpZW5kIGNs
YXNzIFNwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI7CiAgICAgZnJpZW5kIGNsYXNzIFN0b2NoYXN0
aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOwotICAgIGZyaWVuZCBjbGFzcyBTd2VlcGluZ1Nj
b3BlOwogICAgIGZyaWVuZCBjbGFzcyBJbmNyZW1lbnRhbFN3ZWVwZXI7CiAgICAgZnJpZW5kIGNs
YXNzIEhlYXBTdGF0aXN0aWNzOwogICAgIGZyaWVuZCBjbGFzcyBWTTsKQEAgLTM5NSwzNSArMzgy
LDEzIEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXBvcnRFeHRyYU1l
bW9yeUFsbG9jYXRlZFNsb3dDYXNlKHNpemVfdCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBkZXByZWNhdGVkUmVwb3J0RXh0cmFNZW1vcnlTbG93Q2FzZShzaXplX3QpOwogICAgIAotICAg
IGJvb2wgc2hvdWxkQ29sbGVjdEluQ29sbGVjdG9yVGhyZWFkKGNvbnN0IEFic3RyYWN0TG9ja2Vy
Jik7Ci0gICAgdm9pZCBjb2xsZWN0SW5Db2xsZWN0b3JUaHJlYWQoKTsKLSAgICAKLSAgICB2b2lk
IGNoZWNrQ29ubihHQ0NvbmR1Y3Rvcik7Ci0KLSAgICBlbnVtIGNsYXNzIFJ1bkN1cnJlbnRQaGFz
ZVJlc3VsdCB7Ci0gICAgICAgIEZpbmlzaGVkLAotICAgICAgICBDb250aW51ZSwKLSAgICAgICAg
TmVlZEN1cnJlbnRUaHJlYWRTdGF0ZQotICAgIH07Ci0gICAgUnVuQ3VycmVudFBoYXNlUmVzdWx0
IHJ1bkN1cnJlbnRQaGFzZShHQ0NvbmR1Y3RvciwgQ3VycmVudFRocmVhZFN0YXRlKik7Ci0gICAg
Ci0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCBrZWVwIGRvaW5nIHRoaW5ncy4KLSAg
ICBib29sIHJ1bk5vdFJ1bm5pbmdQaGFzZShHQ0NvbmR1Y3Rvcik7Ci0gICAgYm9vbCBydW5CZWdp
blBoYXNlKEdDQ29uZHVjdG9yKTsKLSAgICBib29sIHJ1bkZpeHBvaW50UGhhc2UoR0NDb25kdWN0
b3IpOwotICAgIGJvb2wgcnVuQ29uY3VycmVudFBoYXNlKEdDQ29uZHVjdG9yKTsKLSAgICBib29s
IHJ1blJlbG9vcFBoYXNlKEdDQ29uZHVjdG9yKTsKLSAgICBib29sIHJ1bkVuZFBoYXNlKEdDQ29u
ZHVjdG9yKTsKLSAgICBib29sIGNoYW5nZVBoYXNlKEdDQ29uZHVjdG9yLCBDb2xsZWN0b3JQaGFz
ZSk7Ci0gICAgYm9vbCBmaW5pc2hDaGFuZ2luZ1BoYXNlKEdDQ29uZHVjdG9yKTsKLSAgICAKLSAg
ICB2b2lkIGNvbGxlY3RJbk11dGF0b3JUaHJlYWQoKTsKKyAgICBib29sIHNob3VsZENvbGxlY3RJ
blRocmVhZChjb25zdCBMb2NrSG9sZGVyJik7CisgICAgdm9pZCBjb2xsZWN0SW5UaHJlYWQoKTsK
ICAgICAKLSAgICB2b2lkIHN0b3BUaGVQZXJpcGhlcnkoR0NDb25kdWN0b3IpOwotICAgIHZvaWQg
cmVzdW1lVGhlUGVyaXBoZXJ5KCk7CisgICAgdm9pZCBzdG9wVGhlV29ybGQoKTsKKyAgICB2b2lk
IHJlc3VtZVRoZVdvcmxkKCk7CiAgICAgCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBtdXRh
dG9yIGlzIHN0b3BwZWQsIGZhbHNlIGlmIHRoZSBtdXRhdG9yIGhhcyB0aGUgY29ubiBub3cuCi0g
ICAgYm9vbCBzdG9wVGhlTXV0YXRvcigpOworICAgIHZvaWQgc3RvcFRoZU11dGF0b3IoKTsKICAg
ICB2b2lkIHJlc3VtZVRoZU11dGF0b3IoKTsKICAgICAKICAgICB2b2lkIHN0b3BJZk5lY2Vzc2Fy
eVNsb3coKTsKQEAgLTQzNiwyMSArNDAxLDE3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCByZWxlYXNlQWNjZXNzU2xvdygpOwogICAgIAogICAgIGJvb2wgaGFuZGxlR0NE
aWRKSVQodW5zaWduZWQpOwotICAgIHZvaWQgaGFuZGxlR0NEaWRKSVQoKTsKLSAgICAKICAgICBi
b29sIGhhbmRsZU5lZWRGaW5hbGl6ZSh1bnNpZ25lZCk7CisgICAgdm9pZCBoYW5kbGVHQ0RpZEpJ
VCgpOwogICAgIHZvaWQgaGFuZGxlTmVlZEZpbmFsaXplKCk7CiAgICAgCi0gICAgYm9vbCByZWxp
bnF1aXNoQ29ubih1bnNpZ25lZCk7Ci0gICAgdm9pZCBmaW5pc2hSZWxpbnF1aXNoaW5nQ29ubigp
OwotICAgIAogICAgIHZvaWQgc2V0R0NEaWRKSVQoKTsKICAgICB2b2lkIHNldE5lZWRGaW5hbGl6
ZSgpOwogICAgIHZvaWQgd2FpdFdoaWxlTmVlZEZpbmFsaXplKCk7CiAgICAgCiAgICAgdm9pZCBz
ZXRNdXRhdG9yV2FpdGluZygpOwogICAgIHZvaWQgY2xlYXJNdXRhdG9yV2FpdGluZygpOwotICAg
IHZvaWQgbm90aWZ5VGhyZWFkU3RvcHBpbmcoY29uc3QgQWJzdHJhY3RMb2NrZXImKTsKKyAgICB2
b2lkIG5vdGlmeVRocmVhZFN0b3BwaW5nKGNvbnN0IExvY2tIb2xkZXImKTsKICAgICAKICAgICB0
eXBlZGVmIHVpbnQ2NF90IFRpY2tldDsKICAgICBUaWNrZXQgcmVxdWVzdENvbGxlY3Rpb24oc3Rk
OjpvcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+KTsKQEAgLTQ2MCwxMyArNDIxLDE0IEBAIHByaXZh
dGU6CiAgICAgdm9pZCB3aWxsU3RhcnRDb2xsZWN0aW9uKHN0ZDo6b3B0aW9uYWw8Q29sbGVjdGlv
blNjb3BlPik7CiAgICAgdm9pZCBwcmVwYXJlRm9yTWFya2luZygpOwogICAgIAorICAgIHZvaWQg
bWFya1RvRml4cG9pbnQoZG91YmxlIGdjU3RhcnRUaW1lKTsKICAgICB2b2lkIGdhdGhlclN0YWNr
Um9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKICAgICB2b2lkIGdhdGhlckpTU3RhY2tSb290cyhD
b25zZXJ2YXRpdmVSb290cyYpOwogICAgIHZvaWQgZ2F0aGVyU2NyYXRjaEJ1ZmZlclJvb3RzKENv
bnNlcnZhdGl2ZVJvb3RzJik7CiAgICAgdm9pZCBiZWdpbk1hcmtpbmcoKTsKICAgICB2b2lkIHZp
c2l0Q29tcGlsZXJXb3JrbGlzdFdlYWtSZWZlcmVuY2VzKCk7CiAgICAgdm9pZCByZW1vdmVEZWFk
Q29tcGlsZXJXb3JrbGlzdEVudHJpZXMoKTsKLSAgICB2b2lkIHVwZGF0ZU9iamVjdENvdW50cygp
OworICAgIHZvaWQgdXBkYXRlT2JqZWN0Q291bnRzKGRvdWJsZSBnY1N0YXJ0VGltZSk7CiAgICAg
dm9pZCBlbmRNYXJraW5nKCk7CiAKICAgICB2b2lkIHJlYXBXZWFrSGFuZGxlcygpOwpAQCAtNDgx
LDcgKzQ0Myw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29k
ZSgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0
IEpTQ2VsbCopOwogICAgIHZvaWQgdXBkYXRlQWxsb2NhdGlvbkxpbWl0cygpOwotICAgIHZvaWQg
ZGlkRmluaXNoQ29sbGVjdGlvbigpOworICAgIHZvaWQgZGlkRmluaXNoQ29sbGVjdGlvbihkb3Vi
bGUgZ2NTdGFydFRpbWUpOwogICAgIHZvaWQgcmVzdW1lQ29tcGlsZXJUaHJlYWRzKCk7CiAgICAg
dm9pZCBnYXRoZXJFeHRyYUhlYXBTbmFwc2hvdERhdGEoSGVhcFByb2ZpbGVyJik7CiAgICAgdm9p
ZCByZW1vdmVEZWFkSGVhcFNuYXBzaG90Tm9kZXMoSGVhcFByb2ZpbGVyJik7CkBAIC01NDgsNyAr
NTEwLDcgQEAgcHJpdmF0ZToKICAgICBQcm90ZWN0Q291bnRTZXQgbV9wcm90ZWN0ZWRWYWx1ZXM7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPEhhc2hTZXQ8TWFya2VkQXJndW1lbnRCdWZmZXIqPj4gbV9t
YXJrTGlzdFNldDsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxNYWNoaW5lVGhyZWFkcz4gbV9tYWNo
aW5lVGhyZWFkczsKKyAgICBNYWNoaW5lVGhyZWFkcyBtX21hY2hpbmVUaHJlYWRzOwogICAgIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbV9jb2xsZWN0b3JTbG90VmlzaXRvcjsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+IG1fbXV0YXRvclNsb3RWaXNpdG9yOwpA
QCAtNTgyLDggKzU0NCw4IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9iYXJyaWVyVGhyZXNo
b2xkIHsgT3B0aW9uczo6Zm9yY2VGZW5jZWRCYXJyaWVyKCkgPyB0YXV0b2xvZ2ljYWxUaHJlc2hv
bGQgOiBibGFja1RocmVzaG9sZCB9OwogCiAgICAgVk0qIG1fdm07Ci0gICAgU2Vjb25kcyBtX2xh
c3RGdWxsR0NMZW5ndGg7Ci0gICAgU2Vjb25kcyBtX2xhc3RFZGVuR0NMZW5ndGg7CisgICAgZG91
YmxlIG1fbGFzdEZ1bGxHQ0xlbmd0aDsKKyAgICBkb3VibGUgbV9sYXN0RWRlbkdDTGVuZ3RoOwog
CiAgICAgVmVjdG9yPEV4ZWN1dGFibGVCYXNlKj4gbV9leGVjdXRhYmxlczsKIApAQCAtNjM5LDIz
ICs2MDEsMTkgQEAgcHJpdmF0ZToKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TXV0YXRvclNj
aGVkdWxlcj4gbV9zY2hlZHVsZXI7CiAgICAgCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG11
dGF0b3JIYXNDb25uQml0ID0gMXUgPDwgMHU7IC8vIE11c3QgYWxzbyBiZSBwcm90ZWN0ZWQgYnkg
dGhyZWFkTG9jay4KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc3RvcHBlZEJpdCA9IDF1IDw8
IDF1OyAvLyBPbmx5IHNldCB3aGVuICFoYXNBY2Nlc3NCaXQKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgc2hvdWxkU3RvcEJpdCA9IDF1IDw8IDB1OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBzdG9wcGVkQml0ID0gMXUgPDwgMXU7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGhhc0Fj
Y2Vzc0JpdCA9IDF1IDw8IDJ1OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBnY0RpZEpJVEJp
dCA9IDF1IDw8IDN1OyAvLyBTZXQgd2hlbiB0aGUgR0MgZGlkIHNvbWUgSklUaW5nLCBzbyBvbiBy
ZXN1bWUgd2UgbmVlZCB0byBjcHVpZC4KICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbmVlZEZp
bmFsaXplQml0ID0gMXUgPDwgNHU7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG11dGF0b3JX
YWl0aW5nQml0ID0gMXUgPDwgNXU7IC8vIEFsbG93cyB0aGUgbXV0YXRvciB0byB1c2UgdGhpcyBh
cyBhIGNvbmRpdGlvbiB2YXJpYWJsZS4KICAgICBBdG9taWM8dW5zaWduZWQ+IG1fd29ybGRTdGF0
ZTsKICAgICBib29sIG1fY29sbGVjdG9yQmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQgeyBm
YWxzZSB9OwotICAgIE1vbm90b25pY1RpbWUgbV9iZWZvcmVHQzsKLSAgICBNb25vdG9uaWNUaW1l
IG1fYWZ0ZXJHQzsKICAgICBNb25vdG9uaWNUaW1lIG1fc3RvcFRpbWU7CiAgICAgCiAgICAgRGVx
dWU8c3RkOjpvcHRpb25hbDxDb2xsZWN0aW9uU2NvcGU+PiBtX3JlcXVlc3RzOwogICAgIFRpY2tl
dCBtX2xhc3RTZXJ2ZWRUaWNrZXQgeyAwIH07CiAgICAgVGlja2V0IG1fbGFzdEdyYW50ZWRUaWNr
ZXQgeyAwIH07Ci0gICAgQ29sbGVjdG9yUGhhc2UgbV9jdXJyZW50UGhhc2UgeyBDb2xsZWN0b3JQ
aGFzZTo6Tm90UnVubmluZyB9OwotICAgIENvbGxlY3RvclBoYXNlIG1fbmV4dFBoYXNlIHsgQ29s
bGVjdG9yUGhhc2U6Ok5vdFJ1bm5pbmcgfTsKICAgICBib29sIG1fdGhyZWFkU2hvdWxkU3RvcCB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX3RocmVhZElzU3RvcHBpbmcgeyBmYWxzZSB9OwogICAgIGJv
b2wgbV9tdXRhdG9yRGlkUnVuIHsgdHJ1ZSB9OwpAQCAtNjc0LDEwICs2MzIsNiBAQCBwcml2YXRl
OgogICAgIE1vbm90b25pY1RpbWUgbV9jdXJyZW50R0NTdGFydFRpbWU7CiAgICAgCiAgICAgdWlu
dHB0cl90IG1fYmFycmllcnNFeGVjdXRlZCB7IDAgfTsKLSAgICAKLSAgICBDdXJyZW50VGhyZWFk
U3RhdGUqIG1fY3VycmVudFRocmVhZFN0YXRlIHsgbnVsbHB0ciB9OwotICAgIAotICAgIFZlY3Rv
cjxSZWZQdHI8R0NGaW5hbGl6YXRpb25DYWxsYmFjaz4+IG1fZmluYWxpemF0aW9uQ2FsbGJhY2tz
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cElubGluZXMuaAppbmRleCAyMWRlMDI4YWU4ZmJkYWNmZThlMjA4Zjc4YTZiZWI1MTViZTY1MjAy
Li42NjUyZjRmZGFlMGQwZTQ2MGQ2NjkzNTVhMDBhNTFlNjc1ODRjOGU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKQEAgLTYxLDYgKzYxLDI0IEBAIGlubGluZSBi
b29sIEhlYXA6Omhhc0hlYXBBY2Nlc3MoKSBjb25zdAogICAgIHJldHVybiBtX3dvcmxkU3RhdGUu
bG9hZCgpICYgaGFzQWNjZXNzQml0OwogfQogCitpbmxpbmUgYm9vbCBIZWFwOjptdXRhdG9ySXNT
dG9wcGVkKCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBzdGF0ZSA9IG1fd29ybGRTdGF0ZS5sb2Fk
KCk7CisgICAgYm9vbCBzaG91bGRTdG9wID0gc3RhdGUgJiBzaG91bGRTdG9wQml0OworICAgIGJv
b2wgc3RvcHBlZCA9IHN0YXRlICYgc3RvcHBlZEJpdDsKKyAgICAvLyBJIG9ubHkgZ290IGl0IHJp
Z2h0IHdoZW4gSSBjb25zaWRlcmVkIGFsbCBmb3VyIGNvbmZpZ3VyYXRpb25zIG9mIHNob3VsZFN0
b3Avc3RvcHBlZDoKKyAgICAvLyAhc2hvdWxkU3RvcCwgIXN0b3BwZWQ6IFRoZSBHQyBoYXMgbm90
IHJlcXVlc3RlZCB0aGF0IHdlIHN0b3AgYW5kIHdlIGFyZW4ndCBzdG9wcGVkLCBzbyB3ZQorICAg
IC8vICAgICBzaG91bGQgcmV0dXJuIGZhbHNlLgorICAgIC8vICFzaG91bGRTdG9wLCBzdG9wcGVk
OiBUaGUgbXV0YXRvciBpcyBzdGlsbCBzdG9wcGVkIGJ1dCB0aGUgR0MgaXMgZG9uZSBhbmQgdGhl
IEdDIGhhcyByZXF1ZXN0ZWQKKyAgICAvLyAgICAgdGhhdCB3ZSByZXN1bWUsIHNvIHdlIHNob3Vs
ZCByZXR1cm4gZmFsc2UuCisgICAgLy8gc2hvdWxkU3RvcCwgIXN0b3BwZWQ6IFRoZSBHQyBjYWxs
ZWQgc3RvcFRoZVdvcmxkKCkgYnV0IHRoZSBtdXRhdG9yIGhhc24ndCBoaXQgYSBzYWZlcG9pbnQg
eWV0LgorICAgIC8vICAgICBUaGUgbXV0YXRvciBzaG91bGQgYmUgYWJsZSB0byBkbyB3aGF0ZXZl
ciBpdCB3YW50cyBpbiB0aGlzIHN0YXRlLCBhcyBpZiB3ZSB3ZXJlIG5vdAorICAgIC8vICAgICBz
dG9wcGVkLiBTbyByZXR1cm4gZmFsc2UuCisgICAgLy8gc2hvdWxkU3RvcCwgc3RvcHBlZDogVGhl
IEdDIHJlcXVlc3RlZCBzdG9wIHRoZSB3b3JsZCBhbmQgdGhlIG11dGF0b3Igb2JsaWdlZC4gVGhl
IHdvcmxkIGlzCisgICAgLy8gICAgIHN0b3BwZWQsIHNvIHJldHVybiB0cnVlLgorICAgIHJldHVy
biBzaG91bGRTdG9wICYgc3RvcHBlZDsKK30KKwogaW5saW5lIGJvb2wgSGVhcDo6Y29sbGVjdG9y
QmVsaWV2ZXNUaGF0VGhlV29ybGRJc1N0b3BwZWQoKSBjb25zdAogewogICAgIHJldHVybiBtX2Nv
bGxlY3RvckJlbGlldmVzVGhhdFRoZVdvcmxkSXNTdG9wcGVkOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFN0YXRpc3RpY3MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcFN0YXRpc3RpY3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFhZmEwOThmMzc4MmVj
ZDdjMTc0YmEyY2JiYTE1YTI0MTU1OWExMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwU3RhdGlzdGljcy5jcHAKQEAgLTAsMCArMSwyNTEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGVhcFN0YXRp
c3RpY3MuaCIKKworI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJIZWFwSXRlcmF0aW9uU2Nv
cGUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNp
bmNsdWRlICJNYXJrZWRTcGFjZUlubGluZXMuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5j
bHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8
d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKKyNpZiBPUyhV
TklYKQorI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBKU0Mg
eworCitkb3VibGUgSGVhcFN0YXRpc3RpY3M6OnNfc3RhcnRUaW1lID0gMC4wOworZG91YmxlIEhl
YXBTdGF0aXN0aWNzOjpzX2VuZFRpbWUgPSAwLjA7CitWZWN0b3I8ZG91YmxlPiogSGVhcFN0YXRp
c3RpY3M6OnNfcGF1c2VUaW1lU3RhcnRzID0gMDsKK1ZlY3Rvcjxkb3VibGU+KiBIZWFwU3RhdGlz
dGljczo6c19wYXVzZVRpbWVFbmRzID0gMDsKKworI2lmIE9TKFVOSVgpIAorCit2b2lkIEhlYXBT
dGF0aXN0aWNzOjppbml0aWFsaXplKCkKK3sKKyAgICBBU1NFUlQoT3B0aW9uczo6cmVjb3JkR0NQ
YXVzZVRpbWVzKCkpOworICAgIHNfc3RhcnRUaW1lID0gV1RGOjptb25vdG9uaWNhbGx5SW5jcmVh
c2luZ1RpbWUoKTsKKyAgICBzX3BhdXNlVGltZVN0YXJ0cyA9IG5ldyBWZWN0b3I8ZG91YmxlPigp
OworICAgIHNfcGF1c2VUaW1lRW5kcyA9IG5ldyBWZWN0b3I8ZG91YmxlPigpOworfQorCit2b2lk
IEhlYXBTdGF0aXN0aWNzOjpyZWNvcmRHQ1BhdXNlVGltZShkb3VibGUgc3RhcnQsIGRvdWJsZSBl
bmQpCit7CisgICAgQVNTRVJUKE9wdGlvbnM6OnJlY29yZEdDUGF1c2VUaW1lcygpKTsKKyAgICBB
U1NFUlQoc19wYXVzZVRpbWVTdGFydHMpOworICAgIEFTU0VSVChzX3BhdXNlVGltZUVuZHMpOwor
ICAgIHNfcGF1c2VUaW1lU3RhcnRzLT5hcHBlbmQoc3RhcnQpOworICAgIHNfcGF1c2VUaW1lRW5k
cy0+YXBwZW5kKGVuZCk7Cit9CisKK3ZvaWQgSGVhcFN0YXRpc3RpY3M6OmxvZ1N0YXRpc3RpY3Mo
KQoreworICAgIHN0cnVjdCBydXNhZ2UgdXNhZ2U7CisgICAgZ2V0cnVzYWdlKFJVU0FHRV9TRUxG
LCAmdXNhZ2UpOworI2lmIFVTRShDRikgfHwgT1MoVU5JWCkKKyAgICBjaGFyKiB2bU5hbWUgPSBn
ZXRlbnYoIkpTVk1OYW1lIik7CisgICAgY2hhciogc3VpdGVOYW1lID0gZ2V0ZW52KCJKU1N1aXRl
TmFtZSIpOworICAgIGNoYXIqIGJlbmNobWFya05hbWUgPSBnZXRlbnYoIkpTQmVuY2htYXJrTmFt
ZSIpOworI2Vsc2UKKyNlcnJvciAiVGhlIEhlYXBTdGF0aXN0aWNzIG1vZHVsZSBpcyBub3Qgc3Vw
cG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgorI2VuZGlmCisgICAgaWYgKCF2bU5hbWUgfHwgIXN1
aXRlTmFtZSB8fCAhYmVuY2htYXJrTmFtZSkKKyAgICAgICAgZGF0YUxvZ0YoIkhlYXBTdGF0aXN0
aWNzOiB7XCJtYXhfcnNzXCI6ICVsZCIsIHVzYWdlLnJ1X21heHJzcyk7CisgICAgZWxzZQorICAg
ICAgICBkYXRhTG9nRigiSGVhcFN0YXRpc3RpY3M6IHtcIm1heF9yc3NcIjogJWxkLCBcInZtX25h
bWVcIjogXCIlc1wiLCBcInN1aXRlX25hbWVcIjogXCIlc1wiLCBcImJlbmNobWFya19uYW1lXCI6
IFwiJXNcIiIsIAorICAgICAgICAgICAgdXNhZ2UucnVfbWF4cnNzLCB2bU5hbWUsIHN1aXRlTmFt
ZSwgYmVuY2htYXJrTmFtZSk7IAorCisgICAgaWYgKE9wdGlvbnM6OnJlY29yZEdDUGF1c2VUaW1l
cygpKSB7CisgICAgICAgIGRhdGFMb2dGKCIsIFwicGF1c2VfdGltZXNcIjogWyIpOworICAgICAg
ICBWZWN0b3I8ZG91YmxlPjo6aXRlcmF0b3Igc3RhcnRJdCA9IHNfcGF1c2VUaW1lU3RhcnRzLT5i
ZWdpbigpOworICAgICAgICBWZWN0b3I8ZG91YmxlPjo6aXRlcmF0b3IgZW5kSXQgPSBzX3BhdXNl
VGltZUVuZHMtPmJlZ2luKCk7CisgICAgICAgIGlmIChzdGFydEl0ICE9IHNfcGF1c2VUaW1lU3Rh
cnRzLT5lbmQoKSAmJiBlbmRJdCAhPSBzX3BhdXNlVGltZUVuZHMtPmVuZCgpKSB7CisgICAgICAg
ICAgICBkYXRhTG9nRigiWyVmLCAlZl0iLCAqc3RhcnRJdCwgKmVuZEl0KTsKKyAgICAgICAgICAg
ICsrc3RhcnRJdDsKKyAgICAgICAgICAgICsrZW5kSXQ7CisgICAgICAgIH0KKyAgICAgICAgd2hp
bGUgKHN0YXJ0SXQgIT0gc19wYXVzZVRpbWVTdGFydHMtPmVuZCgpICYmIGVuZEl0ICE9IHNfcGF1
c2VUaW1lRW5kcy0+ZW5kKCkpIHsKKyAgICAgICAgICAgIGRhdGFMb2dGKCIsIFslZiwgJWZdIiwg
KnN0YXJ0SXQsICplbmRJdCk7CisgICAgICAgICAgICArK3N0YXJ0SXQ7CisgICAgICAgICAgICAr
K2VuZEl0OworICAgICAgICB9CisgICAgICAgIGRhdGFMb2dGKCJdLCBcInN0YXJ0X3RpbWVcIjog
JWYsIFwiZW5kX3RpbWVcIjogJWYiLCBzX3N0YXJ0VGltZSwgc19lbmRUaW1lKTsKKyAgICB9Cisg
ICAgZGF0YUxvZ0YoIn1cbiIpOworfQorCit2b2lkIEhlYXBTdGF0aXN0aWNzOjpleGl0V2l0aEZh
aWx1cmUoKQoreworICAgIEFTU0VSVChPcHRpb25zOjpsb2dIZWFwU3RhdGlzdGljc0F0RXhpdCgp
KTsKKyAgICBzX2VuZFRpbWUgPSBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwor
ICAgIGxvZ1N0YXRpc3RpY3MoKTsKKyAgICBleGl0KC0xKTsKK30KKwordm9pZCBIZWFwU3RhdGlz
dGljczo6cmVwb3J0U3VjY2VzcygpCit7CisgICAgQVNTRVJUKE9wdGlvbnM6OmxvZ0hlYXBTdGF0
aXN0aWNzQXRFeGl0KCkpOworICAgIHNfZW5kVGltZSA9IFdURjo6bW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lKCk7CisgICAgbG9nU3RhdGlzdGljcygpOworfQorCisjZWxzZQorCit2b2lkIEhl
YXBTdGF0aXN0aWNzOjppbml0aWFsaXplKCkKK3sKK30KKwordm9pZCBIZWFwU3RhdGlzdGljczo6
cmVjb3JkR0NQYXVzZVRpbWUoZG91YmxlLCBkb3VibGUpCit7Cit9CisKK3ZvaWQgSGVhcFN0YXRp
c3RpY3M6OmxvZ1N0YXRpc3RpY3MoKQoreworfQorCit2b2lkIEhlYXBTdGF0aXN0aWNzOjpleGl0
V2l0aEZhaWx1cmUoKQoreworICAgIGV4aXQoLTEpOworfQorCit2b2lkIEhlYXBTdGF0aXN0aWNz
OjpyZXBvcnRTdWNjZXNzKCkKK3sKK30KKworI2VuZGlmIC8vIE9TKFVOSVgpCisKK2NsYXNzIFN0
b3JhZ2VTdGF0aXN0aWNzIDogcHVibGljIE1hcmtlZEJsb2NrOjpWb2lkRnVuY3RvciB7CitwdWJs
aWM6CisgICAgU3RvcmFnZVN0YXRpc3RpY3MoKTsKKworICAgIEl0ZXJhdGlvblN0YXR1cyBvcGVy
YXRvcigpKEhlYXBDZWxsKiwgSGVhcENlbGw6OktpbmQpIGNvbnN0OworCisgICAgc2l6ZV90IG9i
amVjdFdpdGhPdXRPZkxpbmVTdG9yYWdlQ291bnQoKTsKKyAgICBzaXplX3Qgb2JqZWN0Q291bnQo
KTsKKworICAgIHNpemVfdCBzdG9yYWdlU2l6ZSgpOworICAgIHNpemVfdCBzdG9yYWdlQ2FwYWNp
dHkoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHZpc2l0KEpTQ2VsbCopOworCisgICAgc2l6ZV90
IG1fb2JqZWN0V2l0aE91dE9mTGluZVN0b3JhZ2VDb3VudDsKKyAgICBzaXplX3QgbV9vYmplY3RD
b3VudDsKKyAgICBzaXplX3QgbV9zdG9yYWdlU2l6ZTsKKyAgICBzaXplX3QgbV9zdG9yYWdlQ2Fw
YWNpdHk7Cit9OworCitpbmxpbmUgU3RvcmFnZVN0YXRpc3RpY3M6OlN0b3JhZ2VTdGF0aXN0aWNz
KCkKKyAgICA6IG1fb2JqZWN0V2l0aE91dE9mTGluZVN0b3JhZ2VDb3VudCgwKQorICAgICwgbV9v
YmplY3RDb3VudCgwKQorICAgICwgbV9zdG9yYWdlU2l6ZSgwKQorICAgICwgbV9zdG9yYWdlQ2Fw
YWNpdHkoMCkKK3sKK30KKworaW5saW5lIHZvaWQgU3RvcmFnZVN0YXRpc3RpY3M6OnZpc2l0KEpT
Q2VsbCogY2VsbCkKK3sKKyAgICBpZiAoIWNlbGwtPmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKKyAg
ICBpZiAoaGFzSW5kZXhlZFByb3BlcnRpZXMob2JqZWN0LT5pbmRleGluZ1R5cGUoKSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChvYmplY3QtPnN0cnVjdHVyZSgpLT5pc1VuY2FjaGVhYmxl
RGljdGlvbmFyeSgpKQorICAgICAgICByZXR1cm47CisKKyAgICArK21fb2JqZWN0Q291bnQ7Cisg
ICAgaWYgKCFvYmplY3QtPmhhc0lubGluZVN0b3JhZ2UoKSkKKyAgICAgICAgKyttX29iamVjdFdp
dGhPdXRPZkxpbmVTdG9yYWdlQ291bnQ7CisgICAgbV9zdG9yYWdlU2l6ZSArPSBvYmplY3QtPnN0
cnVjdHVyZSgpLT50b3RhbFN0b3JhZ2VTaXplKCkgKiBzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duPik7CisgICAgbV9zdG9yYWdlQ2FwYWNpdHkgKz0gb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+
dG90YWxTdG9yYWdlQ2FwYWNpdHkoKSAqIHNpemVvZihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+
KTsgCit9CisKK2lubGluZSBJdGVyYXRpb25TdGF0dXMgU3RvcmFnZVN0YXRpc3RpY3M6Om9wZXJh
dG9yKCkoSGVhcENlbGwqIGNlbGwsIEhlYXBDZWxsOjpLaW5kIGtpbmQpIGNvbnN0Cit7CisgICAg
aWYgKGtpbmQgPT0gSGVhcENlbGw6OkpTQ2VsbCkgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBj
b25zdF9jYXN0IGV4aXN0cyBiZWNhdXNlIHRoaXMgaXNuJ3QgYSBDKysgbGFtYmRhLgorICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5NjQ0CisgICAg
ICAgIGNvbnN0X2Nhc3Q8U3RvcmFnZVN0YXRpc3RpY3MqPih0aGlzKS0+dmlzaXQoc3RhdGljX2Nh
c3Q8SlNDZWxsKj4oY2VsbCkpOworICAgIH0KKyAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpD
b250aW51ZTsKK30KKworaW5saW5lIHNpemVfdCBTdG9yYWdlU3RhdGlzdGljczo6b2JqZWN0V2l0
aE91dE9mTGluZVN0b3JhZ2VDb3VudCgpCit7CisgICAgcmV0dXJuIG1fb2JqZWN0V2l0aE91dE9m
TGluZVN0b3JhZ2VDb3VudDsKK30KKworaW5saW5lIHNpemVfdCBTdG9yYWdlU3RhdGlzdGljczo6
b2JqZWN0Q291bnQoKQoreworICAgIHJldHVybiBtX29iamVjdENvdW50OworfQorCitpbmxpbmUg
c2l6ZV90IFN0b3JhZ2VTdGF0aXN0aWNzOjpzdG9yYWdlU2l6ZSgpCit7CisgICAgcmV0dXJuIG1f
c3RvcmFnZVNpemU7Cit9CisKK2lubGluZSBzaXplX3QgU3RvcmFnZVN0YXRpc3RpY3M6OnN0b3Jh
Z2VDYXBhY2l0eSgpCit7CisgICAgcmV0dXJuIG1fc3RvcmFnZUNhcGFjaXR5OworfQorCit2b2lk
IEhlYXBTdGF0aXN0aWNzOjpkdW1wT2JqZWN0U3RhdGlzdGljcyhIZWFwKiBoZWFwKQoreworICAg
IGRhdGFMb2dGKCJcbj09PSBIZWFwIFN0YXRpc3RpY3M6ID09PVxuIik7CisgICAgZGF0YUxvZ0Yo
InNpemU6ICVsZGtCXG4iLCBzdGF0aWNfY2FzdDxsb25nPihoZWFwLT5tX3NpemVBZnRlckxhc3RD
b2xsZWN0IC8gS0IpKTsKKyAgICBkYXRhTG9nRigiY2FwYWNpdHk6ICVsZGtCXG4iLCBzdGF0aWNf
Y2FzdDxsb25nPihoZWFwLT5jYXBhY2l0eSgpIC8gS0IpKTsKKyAgICBkYXRhTG9nRigicGF1c2Ug
dGltZTogJWxmc1xuXG4iLCBoZWFwLT5tX2xhc3RGdWxsR0NMZW5ndGgpOworCisgICAgU3RvcmFn
ZVN0YXRpc3RpY3Mgc3RvcmFnZVN0YXRpc3RpY3M7CisgICAgeworICAgICAgICBIZWFwSXRlcmF0
aW9uU2NvcGUgaXRlcmF0aW9uU2NvcGUoKmhlYXApOworICAgICAgICBoZWFwLT5tX29iamVjdFNw
YWNlLmZvckVhY2hMaXZlQ2VsbChpdGVyYXRpb25TY29wZSwgc3RvcmFnZVN0YXRpc3RpY3MpOwor
ICAgIH0KKyAgICBsb25nIHdhc3RlZFByb3BlcnR5U3RvcmFnZUJ5dGVzID0gMDsKKyAgICBsb25n
IHdhc3RlZFByb3BlcnR5U3RvcmFnZVBlcmNlbnQgPSAwOworICAgIGxvbmcgb2JqZWN0V2l0aE91
dE9mTGluZVN0b3JhZ2VDb3VudCA9IDA7CisgICAgbG9uZyBvYmplY3RzV2l0aE91dE9mTGluZVN0
b3JhZ2VQZXJjZW50ID0gMDsKKyAgICBpZiAoKHN0b3JhZ2VTdGF0aXN0aWNzLnN0b3JhZ2VDYXBh
Y2l0eSgpID4gMCkgJiYgKHN0b3JhZ2VTdGF0aXN0aWNzLm9iamVjdENvdW50KCkgPiAwKSkgewor
ICAgICAgICB3YXN0ZWRQcm9wZXJ0eVN0b3JhZ2VCeXRlcyA9IHN0YXRpY19jYXN0PGxvbmc+KChz
dG9yYWdlU3RhdGlzdGljcy5zdG9yYWdlQ2FwYWNpdHkoKSAtIHN0b3JhZ2VTdGF0aXN0aWNzLnN0
b3JhZ2VTaXplKCkpIC8gS0IpOworICAgICAgICB3YXN0ZWRQcm9wZXJ0eVN0b3JhZ2VQZXJjZW50
ID0gc3RhdGljX2Nhc3Q8bG9uZz4oCisgICAgICAgICAgICAoc3RvcmFnZVN0YXRpc3RpY3Muc3Rv
cmFnZUNhcGFjaXR5KCkgLSBzdG9yYWdlU3RhdGlzdGljcy5zdG9yYWdlU2l6ZSgpKSAqIDEwMCAv
IHN0b3JhZ2VTdGF0aXN0aWNzLnN0b3JhZ2VDYXBhY2l0eSgpKTsKKyAgICAgICAgb2JqZWN0V2l0
aE91dE9mTGluZVN0b3JhZ2VDb3VudCA9IHN0YXRpY19jYXN0PGxvbmc+KHN0b3JhZ2VTdGF0aXN0
aWNzLm9iamVjdFdpdGhPdXRPZkxpbmVTdG9yYWdlQ291bnQoKSk7CisgICAgICAgIG9iamVjdHNX
aXRoT3V0T2ZMaW5lU3RvcmFnZVBlcmNlbnQgPSBvYmplY3RXaXRoT3V0T2ZMaW5lU3RvcmFnZUNv
dW50ICogMTAwIC8gc3RvcmFnZVN0YXRpc3RpY3Mub2JqZWN0Q291bnQoKTsKKyAgICB9CisgICAg
ZGF0YUxvZ0YoIndhc3RlZCAucHJvcGVydHkgc3RvcmFnZTogJWxka0IgKCVsZCUlKVxuIiwgd2Fz
dGVkUHJvcGVydHlTdG9yYWdlQnl0ZXMsIHdhc3RlZFByb3BlcnR5U3RvcmFnZVBlcmNlbnQpOwor
ICAgIGRhdGFMb2dGKCJvYmplY3RzIHdpdGggb3V0LW9mLWxpbmUgLnByb3BlcnR5IHN0b3JhZ2U6
ICVsZCAoJWxkJSUpXG4iLCBvYmplY3RXaXRoT3V0T2ZMaW5lU3RvcmFnZUNvdW50LCBvYmplY3Rz
V2l0aE91dE9mTGluZVN0b3JhZ2VQZXJjZW50KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU3RhdGlzdGljcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFN0YXRpc3RpY3MuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
OTBkYTVlMjBlZTAwODViNzYyYzgyYWIzYjdmNTdkMTEwNGQwNWRjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFN0YXRpc3RpY3MuaApAQCAtMCwwICsx
LDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0V4cG9ydE1h
Y3Jvcy5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEhlYXA7CisKK2NsYXNzIEhlYXBTdGF0aXN0aWNzIHsKK3B1YmxpYzoKKyAgICBOT19SRVRV
Uk4gc3RhdGljIHZvaWQgZXhpdFdpdGhGYWlsdXJlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgcmVwb3J0U3VjY2VzcygpOworCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6
ZSgpOworICAgIHN0YXRpYyB2b2lkIHJlY29yZEdDUGF1c2VUaW1lKGRvdWJsZSBzdGFydCwgZG91
YmxlIGVuZCk7CisKKyAgICBzdGF0aWMgdm9pZCBkdW1wT2JqZWN0U3RhdGlzdGljcyhIZWFwKik7
CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgbG9nU3RhdGlzdGljcygpOworICAgIHN0YXRp
YyBWZWN0b3I8ZG91YmxlPiogc19wYXVzZVRpbWVTdGFydHM7CisgICAgc3RhdGljIFZlY3Rvcjxk
b3VibGU+KiBzX3BhdXNlVGltZUVuZHM7CisgICAgc3RhdGljIGRvdWJsZSBzX3N0YXJ0VGltZTsK
KyAgICBzdGF0aWMgZG91YmxlIHNfZW5kVGltZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVscGluZ0dDU2NvcGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlbHBpbmdHQ1Njb3BlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZThmNDA4NTQxMDMwOWVkZmEzNjE1YTMxODA0MjQ4NzI4YjY5MzdkNAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlbHBpbmdHQ1Njb3BlLmgKQEAgLTAsMCAr
MSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSGVhcC5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSGVscGluZ0dDU2NvcGUgeworcHVibGljOgorICAg
IEhlbHBpbmdHQ1Njb3BlKEhlYXAmIGhlYXApCisgICAgICAgIDogbV9oZWFwKGhlYXApCisgICAg
ICAgICwgbV9vbGRTdGF0ZShtX2hlYXAubV9tdXRhdG9yU3RhdGUpCisgICAgeworICAgICAgICBt
X2hlYXAubV9tdXRhdG9yU3RhdGUgPSBNdXRhdG9yU3RhdGU6OkhlbHBpbmdHQzsKKyAgICB9Cisg
ICAgCisgICAgfkhlbHBpbmdHQ1Njb3BlKCkKKyAgICB7CisgICAgICAgIG1faGVhcC5tX211dGF0
b3JTdGF0ZSA9IG1fb2xkU3RhdGU7CisgICAgfQorCitwcml2YXRlOgorICAgIEhlYXAmIG1faGVh
cDsKKyAgICBNdXRhdG9yU3RhdGUgbV9vbGRTdGF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3
ZWVwZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVy
LmNwcAppbmRleCBjZmU4OWI4NzA3Y2ViYzdmNGFmNGQ2MzU2Njk0MTFlMTdkYzBhYzUyLi42ZGY2
MDdmZDBkYjc2N2Y2YzViYzUzNGRjZWIyZTA0YjQ2Mzk1NGI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAKQEAgLTk3LDcgKzk3LDcg
QEAgdm9pZCBJbmNyZW1lbnRhbFN3ZWVwZXI6OnN0YXJ0U3dlZXBpbmcoKQogICAgIG1fY3VycmVu
dEFsbG9jYXRvciA9IG1fdm0tPmhlYXAub2JqZWN0U3BhY2UoKS5maXJzdEFsbG9jYXRvcigpOwog
fQogCi12b2lkIEluY3JlbWVudGFsU3dlZXBlcjo6c3RvcFN3ZWVwaW5nKCkKK3ZvaWQgSW5jcmVt
ZW50YWxTd2VlcGVyOjp3aWxsRmluaXNoU3dlZXBpbmcoKQogewogICAgIG1fY3VycmVudEFsbG9j
YXRvciA9IG51bGxwdHI7CiAgICAgaWYgKG1fdm0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0luY3JlbWVudGFsU3dlZXBlci5oCmluZGV4IDM0ZmE4OGNjMmVmYTc1YzRmMjhjMDU3
Yzc4OWE2YWUxMTk4MDNiZTYuLmE4NDgzMGJjOTY0YTNjNDFmMjA4ZWRkZjIyMmE4ZTc4NDBjNDZm
NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dl
ZXBlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0luY3JlbWVudGFsU3dlZXBl
ci5oCkBAIC0zNywxMSArMzcsMTEgQEAgY2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyIDogcHVibGlj
IEhlYXBUaW1lciB7CiBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgZXhwbGljaXQgSW5j
cmVtZW50YWxTd2VlcGVyKEhlYXAqKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc3Rh
cnRTd2VlcGluZygpOworICAgIHZvaWQgc3RhcnRTd2VlcGluZygpOwogCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBkb1dvcmsoKSBvdmVycmlkZTsKICAgICBib29sIHN3ZWVwTmV4dEJsb2Nr
KCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzdG9wU3dlZXBpbmcoKTsKKyAgICB2b2lk
IHdpbGxGaW5pc2hTd2VlcGluZygpOwogCiBwcml2YXRlOgogICAgIHZvaWQgZG9Td2VlcChkb3Vi
bGUgc3RhcnRUaW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
Y2hpbmVTdGFja01hcmtlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYWNoaW5l
U3RhY2tNYXJrZXIuY3BwCmluZGV4IDY1ZWIwY2YwZDliZWI1OTg0NzAxMmUwZjFkZTE5Yjc4NGE0
NTUwM2EuLmUzM2YzYjIyNzAwYmZlZDZmNzRmMTUwNzdjNWRjNjIwOGVlYWU2YmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA5LCAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAw
NyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICogIENvcHlyaWdodCAoQykgMjAwOSBB
Y2lzaW9uIEJWLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTMxMywxOCArMzEzLDYgQEAg
dm9pZCBNYWNoaW5lVGhyZWFkczo6cmVtb3ZlVGhyZWFkSWZGb3VuZChQbGF0Zm9ybVRocmVhZCBw
bGF0Zm9ybVRocmVhZCkKICAgICB9CiB9CiAKLVNVUFBSRVNTX0FTQU4KLXZvaWQgTWFjaGluZVRo
cmVhZHM6OmdhdGhlckZyb21DdXJyZW50VGhyZWFkKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2
YXRpdmVSb290cywgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcywgQ29kZUJsb2Nr
U2V0JiBjb2RlQmxvY2tzLCBDdXJyZW50VGhyZWFkU3RhdGUmIGN1cnJlbnRUaHJlYWRTdGF0ZSkK
LXsKLSAgICBpZiAoY3VycmVudFRocmVhZFN0YXRlLnJlZ2lzdGVyU3RhdGUpIHsKLSAgICAgICAg
dm9pZCogcmVnaXN0ZXJzQmVnaW4gPSBjdXJyZW50VGhyZWFkU3RhdGUucmVnaXN0ZXJTdGF0ZTsK
LSAgICAgICAgdm9pZCogcmVnaXN0ZXJzRW5kID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocm91
bmRVcFRvTXVsdGlwbGVPZjxzaXplb2Yodm9pZCopPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oY3VycmVudFRocmVhZFN0YXRlLnJlZ2lzdGVyU3RhdGUgKyAxKSkpOwotICAgICAgICBjb25z
ZXJ2YXRpdmVSb290cy5hZGQocmVnaXN0ZXJzQmVnaW4sIHJlZ2lzdGVyc0VuZCwgaml0U3R1YlJv
dXRpbmVzLCBjb2RlQmxvY2tzKTsKLSAgICB9Ci0KLSAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQo
Y3VycmVudFRocmVhZFN0YXRlLnN0YWNrVG9wLCBjdXJyZW50VGhyZWFkU3RhdGUuc3RhY2tPcmln
aW4sIGppdFN0dWJSb3V0aW5lcywgY29kZUJsb2Nrcyk7Ci19Ci0KIE1hY2hpbmVUaHJlYWRzOjpU
aHJlYWQ6OlRocmVhZChjb25zdCBQbGF0Zm9ybVRocmVhZCYgcGxhdFRocmVhZCwgdm9pZCogYmFz
ZSwgdm9pZCogZW5kKQogICAgIDogcGxhdGZvcm1UaHJlYWQocGxhdFRocmVhZCkKICAgICAsIHN0
YWNrQmFzZShiYXNlKQpAQCAtMTAzMiwxMSArMTAyMCw4IEBAIHN0YXRpYyB2b2lkIGdyb3dCdWZm
ZXIoc2l6ZV90IHNpemUsIHZvaWQqKiBidWZmZXIsIHNpemVfdCogY2FwYWNpdHkpCiAgICAgKmJ1
ZmZlciA9IGZhc3RNYWxsb2MoKmNhcGFjaXR5KTsKIH0KIAotdm9pZCBNYWNoaW5lVGhyZWFkczo6
Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJv
b3RzLCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBDb2RlQmxvY2tTZXQmIGNv
ZGVCbG9ja3MsIEN1cnJlbnRUaHJlYWRTdGF0ZSogY3VycmVudFRocmVhZFN0YXRlKQordm9pZCBN
YWNoaW5lVGhyZWFkczo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMm
IGNvbnNlcnZhdGl2ZVJvb3RzLCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBD
b2RlQmxvY2tTZXQmIGNvZGVCbG9ja3MpCiB7Ci0gICAgaWYgKGN1cnJlbnRUaHJlYWRTdGF0ZSkK
LSAgICAgICAgZ2F0aGVyRnJvbUN1cnJlbnRUaHJlYWQoY29uc2VydmF0aXZlUm9vdHMsIGppdFN0
dWJSb3V0aW5lcywgY29kZUJsb2NrcywgKmN1cnJlbnRUaHJlYWRTdGF0ZSk7Ci0KICAgICBzaXpl
X3Qgc2l6ZTsKICAgICBzaXplX3QgY2FwYWNpdHkgPSAwOwogICAgIHZvaWQqIGJ1ZmZlciA9IG51
bGxwdHI7CkBAIC0xMDUxLDExICsxMDM2LDQgQEAgdm9pZCBNYWNoaW5lVGhyZWFkczo6Z2F0aGVy
Q29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3QKICAg
ICBmYXN0RnJlZShidWZmZXIpOwogfQogCi1ORVZFUl9JTkxJTkUgaW50IGNhbGxXaXRoQ3VycmVu
dFRocmVhZFN0YXRlKGNvbnN0IFNjb3BlZExhbWJkYTx2b2lkKEN1cnJlbnRUaHJlYWRTdGF0ZSYp
PiYgbGFtYmRhKQotewotICAgIERFQ0xBUkVfQU5EX0NPTVBVVEVfQ1VSUkVOVF9USFJFQURfU1RB
VEUoc3RhdGUpOwotICAgIGxhbWJkYShzdGF0ZSk7Ci0gICAgcmV0dXJuIDQyOyAvLyBTdXBwcmVz
cyB0YWlsIGNhbGwgb3B0aW1pemF0aW9uLgotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgKaW5kZXggYTVh
NTA4NzA5MjI5MzM5MGZiZmI2MmQ5MWJkYjYzYTdjOGY5M2I4Yy4uMDdiNDBkYzgxNzgxMmUwMDJj
ZjhlNzg2YjE2ZGRkY2Y0NDQwYmUwMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFjaGluZVN0YWNrTWFya2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFjaGluZVN0YWNrTWFya2VyLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdo
dCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDAzLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwMy0yMDA5LCAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjEsMTAgKzIxLDkgQEAKIAogI3ByYWdtYSBvbmNl
CiAKLSNpbmNsdWRlICJSZWdpc3RlclN0YXRlLmgiCisjaW5jbHVkZSA8c2V0am1wLmg+CiAjaW5j
bHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRl
IDx3dGYvU2NvcGVkTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CiAK
ICNpZiBPUyhEQVJXSU4pCkBAIC01OCwxOSArNTcsMTUgQEAgY2xhc3MgQ29uc2VydmF0aXZlUm9v
dHM7CiBjbGFzcyBIZWFwOwogY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CiAKLXN0cnVjdCBDdXJy
ZW50VGhyZWFkU3RhdGUgewotICAgIHZvaWQqIHN0YWNrT3JpZ2luIHsgbnVsbHB0ciB9OwotICAg
IHZvaWQqIHN0YWNrVG9wIHsgbnVsbHB0ciB9OwotICAgIFJlZ2lzdGVyU3RhdGUqIHJlZ2lzdGVy
U3RhdGUgeyBudWxscHRyIH07Ci19OwotICAgIAogY2xhc3MgTWFjaGluZVRocmVhZHMgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKE1hY2hpbmVUaHJlYWRzKTsKIHB1YmxpYzoKKyAgICB0eXBl
ZGVmIGptcF9idWYgUmVnaXN0ZXJTdGF0ZTsKKwogICAgIE1hY2hpbmVUaHJlYWRzKEhlYXAqKTsK
ICAgICB+TWFjaGluZVRocmVhZHMoKTsKIAotICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9v
dHMoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHViUm91dGluZVNldCYsIENvZGVCbG9ja1NldCYs
IEN1cnJlbnRUaHJlYWRTdGF0ZSopOworICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMo
Q29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHViUm91dGluZVNldCYsIENvZGVCbG9ja1NldCYpOwog
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGRDdXJyZW50VGhyZWFkKCk7IC8vIE9ubHkg
bmVlZHMgdG8gYmUgY2FsbGVkIGJ5IGNsaWVudHMgdGhhdCBjYW4gdXNlIHRoZSBzYW1lIGhlYXAg
ZnJvbSBtdWx0aXBsZSB0aHJlYWRzLgogCkBAIC0xNTAsOCArMTQ1LDYgQEAgcHVibGljOgogICAg
IFRocmVhZCogbWFjaGluZVRocmVhZEZvckN1cnJlbnRUaHJlYWQoKTsKIAogcHJpdmF0ZToKLSAg
ICB2b2lkIGdhdGhlckZyb21DdXJyZW50VGhyZWFkKENvbnNlcnZhdGl2ZVJvb3RzJiwgSklUU3R1
YlJvdXRpbmVTZXQmLCBDb2RlQmxvY2tTZXQmLCBDdXJyZW50VGhyZWFkU3RhdGUmKTsKLQogICAg
IHZvaWQgdHJ5Q29weU90aGVyVGhyZWFkU3RhY2soVGhyZWFkKiwgdm9pZCosIHNpemVfdCBjYXBh
Y2l0eSwgc2l6ZV90Kik7CiAgICAgYm9vbCB0cnlDb3B5T3RoZXJUaHJlYWRTdGFja3MoTG9ja0hv
bGRlciYsIHZvaWQqLCBzaXplX3QgY2FwYWNpdHksIHNpemVfdCopOwogCkBAIC0xNjgsMTUgKzE2
MSwyNCBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi0jZGVmaW5lIERFQ0xBUkVfQU5EX0NPTVBV
VEVfQ1VSUkVOVF9USFJFQURfU1RBVEUoc3RhdGVOYW1lKSBcCi0gICAgQ3VycmVudFRocmVhZFN0
YXRlIHN0YXRlTmFtZTsgXAotICAgIHN0YXRlTmFtZS5zdGFja1RvcCA9ICZzdGF0ZU5hbWU7IFwK
LSAgICBzdGF0ZU5hbWUuc3RhY2tPcmlnaW4gPSB3dGZUaHJlYWREYXRhKCkuc3RhY2soKS5vcmln
aW4oKTsgXAotICAgIEFMTE9DQVRFX0FORF9HRVRfUkVHSVNURVJfU1RBVEUoc3RhdGVOYW1lICMj
IF9yZWdpc3RlclN0YXRlKTsgXAotICAgIHN0YXRlTmFtZS5yZWdpc3RlclN0YXRlID0gJnN0YXRl
TmFtZSAjIyBfcmVnaXN0ZXJTdGF0ZQotCi0vLyBUaGUgcmV0dXJuIHZhbHVlIGlzIG1lYW5pbmds
ZXNzLiBXZSBqdXN0IHVzZSBpdCB0byBzdXBwcmVzcyB0YWlsIGNhbGwgb3B0aW1pemF0aW9uLgot
aW50IGNhbGxXaXRoQ3VycmVudFRocmVhZFN0YXRlKGNvbnN0IFNjb3BlZExhbWJkYTx2b2lkKEN1
cnJlbnRUaHJlYWRTdGF0ZSYpPiYpOwotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAorI2lmIENPTVBJ
TEVSKEdDQ19PUl9DTEFORykKKyNkZWZpbmUgUkVHSVNURVJfQlVGRkVSX0FMSUdOTUVOVCBfX2F0
dHJpYnV0ZV9fICgoYWxpZ25lZCAoc2l6ZW9mKHZvaWQqKSkpKQorI2Vsc2UKKyNkZWZpbmUgUkVH
SVNURVJfQlVGRkVSX0FMSUdOTUVOVAorI2VuZGlmCisKKy8vIEFMTE9DQVRFX0FORF9HRVRfUkVH
SVNURVJfU1RBVEUoKSBpcyBhIG1hY3JvIHNvIHRoYXQgaXQgaXMgYWx3YXlzICJpbmxpbmVkIiBl
dmVuIGluIGRlYnVnIGJ1aWxkcy4KKyNpZiBDT01QSUxFUihNU1ZDKQorI3ByYWdtYSB3YXJuaW5n
KHB1c2gpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDYxMSkKKyNkZWZpbmUgQUxMT0NBVEVf
QU5EX0dFVF9SRUdJU1RFUl9TVEFURShyZWdpc3RlcnMpIFwKKyAgICBNYWNoaW5lVGhyZWFkczo6
UmVnaXN0ZXJTdGF0ZSByZWdpc3RlcnMgUkVHSVNURVJfQlVGRkVSX0FMSUdOTUVOVDsgXAorICAg
IHNldGptcChyZWdpc3RlcnMpCisjcHJhZ21hIHdhcm5pbmcocG9wKQorI2Vsc2UKKyNkZWZpbmUg
QUxMT0NBVEVfQU5EX0dFVF9SRUdJU1RFUl9TVEFURShyZWdpc3RlcnMpIFwKKyAgICBNYWNoaW5l
VGhyZWFkczo6UmVnaXN0ZXJTdGF0ZSByZWdpc3RlcnMgUkVHSVNURVJfQlVGRkVSX0FMSUdOTUVO
VDsgXAorICAgIHNldGptcChyZWdpc3RlcnMpCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9jYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCmluZGV4IDVlZTU0NGEzY2RmZDlkMWUwNjli
NDc2MGY1NTViYTYxOGExNjIzMGIuLjk1MmRiMDJmZDQ4MDRjOTU4YThiMDA1ZjM1ZjAwZjlmMmY3
MzFlNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEFsbG9j
YXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQWxsb2NhdG9y
LmNwcApAQCAtMjE2LDE0ICsyMTYsNiBAQCB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OmFsbG9jYXRl
U2xvd0Nhc2VJbXBsKEdDRGVmZXJyYWxDb250ZXh0KiBkZWZlcnJhbENvbnRleHQsCiAKICAgICBt
X2hlYXAtPmNvbGxlY3RJZk5lY2Vzc2FyeU9yRGVmZXIoZGVmZXJyYWxDb250ZXh0KTsKICAgICAK
LSAgICAvLyBHb29meSBjb3JuZXIgY2FzZTogdGhlIEdDIGNhbGxlZCBhIGNhbGxiYWNrIGFuZCBu
b3cgdGhpcyBhbGxvY2F0b3IgaGFzIGEgY3VycmVudEJsb2NrLiBUaGlzIG9ubHkKLSAgICAvLyBo
YXBwZW5zIHdoZW4gcnVubmluZyBXZWJLaXQgdGVzdHMsIHdoaWNoIGluamVjdCBhIGNhbGxiYWNr
IGludG8gdGhlIEdDJ3MgZmluYWxpemF0aW9uLgotICAgIGlmIChVTkxJS0VMWShtX2N1cnJlbnRC
bG9jaykpIHsKLSAgICAgICAgaWYgKGNyYXNoT25GYWlsdXJlKQotICAgICAgICAgICAgcmV0dXJu
IGFsbG9jYXRlKGRlZmVycmFsQ29udGV4dCk7Ci0gICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZShk
ZWZlcnJhbENvbnRleHQpOwotICAgIH0KLSAgICAKICAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxv
Y2F0ZVdpdGhvdXRDb2xsZWN0aW5nKCk7CiAgICAgCiAgICAgaWYgKExJS0VMWShyZXN1bHQgIT0g
MCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKaW5kZXggM2U0
YWNhMmQzNjdmYzgzMTNjMWNhMzI4ZDg4NTJhNzIzY2E5ZGNlMi4uODhjNjMxZGNiNmQ3OGJhMGJh
Mjc1Nzk1ODliYmMwNjA5NDczMjVhNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmNwcApAQCAtMjYsMTIgKzI2LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiTWFya2VkQmxvY2suaCIKIAorI2luY2x1ZGUgIkhlbHBpbmdHQ1Njb3BlLmgiCiAj
aW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCi0jaW5jbHVkZSAiU3dlZXBpbmdTY29wZS5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKIApAQCAtNDA5LDcgKzQwOSw4IEBAIFN1YnNwYWNlKiBNYXJrZWRCbG9j
azo6SGFuZGxlOjpzdWJzcGFjZSgpIGNvbnN0CiAKIEZyZWVMaXN0IE1hcmtlZEJsb2NrOjpIYW5k
bGU6OnN3ZWVwKFN3ZWVwTW9kZSBzd2VlcE1vZGUpCiB7Ci0gICAgU3dlZXBpbmdTY29wZSBzd2Vl
cGluZ1Njb3BlKCpoZWFwKCkpOworICAgIC8vIEZJWE1FOiBNYXliZSBIZWxwaW5nR0NTY29wZSBz
aG91bGQganVzdCBiZSBjYWxsZWQgU3dlZXBTY29wZT8KKyAgICBIZWxwaW5nR0NTY29wZSBoZWxw
aW5nR0NTY29wZSgqaGVhcCgpKTsKICAgICAKICAgICBtX2FsbG9jYXRvci0+c2V0SXNVbnN3ZXB0
KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgZmFsc2UpOwogICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCmluZGV4IDBkZWU0NGViYTBhNjI4NzJhMzgzNGVl
NjgxYjRiZDc4ZWY1ZDEwZGYuLmFiMmJkYzFhOGY0M2VhMDBhMzkwNjM3ZWU2MzM4NGU5N2I0ZmQ1
ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAKQEAgLTIy
NSw3ICsyMjUsNyBAQCB2b2lkIE1hcmtlZFNwYWNlOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpCiAK
IHZvaWQgTWFya2VkU3BhY2U6OnN3ZWVwKCkKIHsKLSAgICBtX2hlYXAtPnN3ZWVwZXIoKS0+c3Rv
cFN3ZWVwaW5nKCk7CisgICAgbV9oZWFwLT5zd2VlcGVyKCktPndpbGxGaW5pc2hTd2VlcGluZygp
OwogICAgIGZvckVhY2hBbGxvY2F0b3IoCiAgICAgICAgIFsmXSAoTWFya2VkQWxsb2NhdG9yJiBh
bGxvY2F0b3IpIC0+IEl0ZXJhdGlvblN0YXR1cyB7CiAgICAgICAgICAgICBhbGxvY2F0b3Iuc3dl
ZXAoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL011dGF0b3JTdGF0
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU3RhdGUuY3BwCmluZGV4
IDVhOTBiN2I5NDI1YTc1NzEwNjI5Nzg1MzU2MzU4YjAwOGE2MWI1NzEuLjgzNjhmNDNiOGFlYmFm
NDg0OTU1Y2NlNjhiOTlmNGViZTIyYmIzOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL011dGF0b3JTdGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTXV0YXRvclN0YXRlLmNwcApAQCAtNDEsMTEgKzQxLDggQEAgdm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiBvdXQsIE11dGF0b3JTdGF0ZSBzdGF0ZSkKICAgICBjYXNlIE11dGF0b3JT
dGF0ZTo6QWxsb2NhdGluZzoKICAgICAgICAgb3V0LnByaW50KCJBbGxvY2F0aW5nIik7CiAgICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIE11dGF0b3JTdGF0ZTo6U3dlZXBpbmc6Ci0gICAgICAgIG91
dC5wcmludCgiU3dlZXBpbmciKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgTXV0YXRvclN0
YXRlOjpDb2xsZWN0aW5nOgotICAgICAgICBvdXQucHJpbnQoIkNvbGxlY3RpbmciKTsKKyAgICBj
YXNlIE11dGF0b3JTdGF0ZTo6SGVscGluZ0dDOgorICAgICAgICBvdXQucHJpbnQoIkhlbHBpbmdH
QyIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NdXRhdG9yU3Rh
dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL011dGF0b3JTdGF0ZS5oCmluZGV4IDM4
YTE5ODFkMGRkMTcwNjk4NDZmYzA2NDU4NDE4YmQyYzg0MGNjYzguLjY1YjYxZjczYzM3MzE5YzJm
NDAxZmQ1NTlkOTY5MjcwNDRiOTZjZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL011dGF0b3JTdGF0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL011
dGF0b3JTdGF0ZS5oCkBAIC0zNCwxMSArMzQsOCBAQCBlbnVtIGNsYXNzIE11dGF0b3JTdGF0ZSB7
CiAgICAgLy8gVGhlIG11dGF0b3IgaXMgaW4gYW4gYWxsb2NhdGlvbiBzbG93IHBhdGguCiAgICAg
QWxsb2NhdGluZywKICAgICAKLSAgICAvLyBUaGUgbXV0YXRvciBpcyBzd2VlcGluZy4KLSAgICBT
d2VlcGluZywKLSAgICAKLSAgICAvLyBUaGUgbXV0YXRvciBpcyBjb2xsZWN0aW5nLgotICAgIENv
bGxlY3RpbmcKKyAgICAvLyBUaGUgbXV0YXRvciB3YXMgYXNrZWQgYnkgdGhlIEdDIHRvIGRvIHNv
bWUgd29yay4KKyAgICBIZWxwaW5nR0MKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvUmVnaXN0ZXJTdGF0ZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvUmVnaXN0ZXJTdGF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2MDA1YTkxNDM1NzFiOGM5NmNiYjQ5YmY3ZDI2YzkyODZmYzM1NTgwLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1JlZ2lzdGVyU3RhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1OCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSA8c2V0am1wLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi0jaWYg
IU9TKFdJTkRPV1MpCi0KLS8vIEFMTE9DQVRFX0FORF9HRVRfUkVHSVNURVJfU1RBVEUgaGFzIHRv
IGVuc3VyZSB0aGF0IHRoZSBHQyBzZWVzIGNhbGxlZS1zYXZlcy4gSXQgYWNoaWV2ZXMgdGhpcyBi
eQotLy8gZW5zdXJpbmcgdGhhdCB0aGUgY2FsbGVlLXNhdmVzIGFyZSBlaXRoZXIgc3BpbGxlZCB0
byB0aGUgc3RhY2sgb3Igc2F2ZWQgaW4gdGhlIFJlZ2lzdGVyU3RhdGUuIFRoZSBjb2RlCi0vLyBs
b29rcyBsaWtlIGl0J3MgYWNoaWV2aW5nIG9ubHkgdGhlIGxhdHRlci4gSG93ZXZlciwgaXQncyBw
b3NzaWJsZSB0aGF0IHRoZSBjb21waWxlciBjaG9vc2VzIHRvIHVzZQotLy8gYSBjYWxsZWUtc2F2
ZSBmb3Igb25lIG9mIHRoZSBjYWxsZXIncyB2YXJpYWJsZXMsIHdoaWNoIG1lYW5zIHRoYXQgdGhl
IHZhbHVlIHRoYXQgd2Ugd2VyZSBpbnRlcmVzdGVkIGluCi0vLyBnb3Qgc3BpbGxlZC4gSW4gdGhh
dCBjYXNlLCB3ZSB3aWxsIHN0b3JlIHNvbWV0aGluZyBib2d1cyBpbnRvIHRoZSBSZWdpc3RlclN0
YXRlLCBhbmQgdGhhdCdzIE9LLgotCi0jaWYgQ1BVKFg4NikKLXN0cnVjdCBSZWdpc3RlclN0YXRl
IHsKLSAgICB1aW50MzJfdCBlYng7Ci0gICAgdWludDMyX3QgZWRpOwotICAgIHVpbnQzMl90IGVz
aTsKLX07Ci0KLSNkZWZpbmUgU0FWRV9SRUcocmVnbmFtZSwgd2hlcmUpIFwKLSAgICBhc20gdm9s
YXRpbGUgKCJtb3ZsICUlIiAjcmVnbmFtZSAiLCAlMCIgOiAiPW0iKHdoZXJlKSA6IDogIm1lbW9y
eSIpCi0KLSNkZWZpbmUgQUxMT0NBVEVfQU5EX0dFVF9SRUdJU1RFUl9TVEFURShyZWdpc3RlcnMp
IFwKLSAgICBSZWdpc3RlclN0YXRlIHJlZ2lzdGVyczsgXAotICAgIFNBVkVfUkVHKGVieCwgcmVn
aXN0ZXJzLmVieCk7IFwKLSAgICBTQVZFX1JFRyhlZGksIHJlZ2lzdGVycy5lZGkpOyBcCi0gICAg
U0FWRV9SRUcoZXNpLCByZWdpc3RlcnMuZXNpKQotCi0jZWxpZiBDUFUoWDg2XzY0KQotc3RydWN0
IFJlZ2lzdGVyU3RhdGUgewotICAgIHVpbnQ2NF90IHJieDsKLSAgICB1aW50NjRfdCByMTI7Ci0g
ICAgdWludDY0X3QgcjEzOwotICAgIHVpbnQ2NF90IHIxNDsKLSAgICB1aW50NjRfdCByMTU7Ci19
OwotCi0jZGVmaW5lIFNBVkVfUkVHKHJlZ25hbWUsIHdoZXJlKSBcCi0gICAgYXNtIHZvbGF0aWxl
ICgibW92cSAlJSIgI3JlZ25hbWUgIiwgJTAiIDogIj1tIih3aGVyZSkgOiA6ICJtZW1vcnkiKQot
Ci0jZGVmaW5lIEFMTE9DQVRFX0FORF9HRVRfUkVHSVNURVJfU1RBVEUocmVnaXN0ZXJzKSBcCi0g
ICAgUmVnaXN0ZXJTdGF0ZSByZWdpc3RlcnM7IFwKLSAgICBTQVZFX1JFRyhyYngsIHJlZ2lzdGVy
cy5yYngpOyBcCi0gICAgU0FWRV9SRUcocjEyLCByZWdpc3RlcnMucjEyKTsgXAotICAgIFNBVkVf
UkVHKHIxMywgcmVnaXN0ZXJzLnIxMyk7IFwKLSAgICBTQVZFX1JFRyhyMTQsIHJlZ2lzdGVycy5y
MTQpOyBcCi0gICAgU0FWRV9SRUcocjE1LCByZWdpc3RlcnMucjE1KQotCi0jZWxpZiBDUFUoQVJN
X1RIVU1CMikKLXN0cnVjdCBSZWdpc3RlclN0YXRlIHsKLSAgICB1aW50MzJfdCByNDsKLSAgICB1
aW50MzJfdCByNTsKLSAgICB1aW50MzJfdCByNjsKLSAgICB1aW50MzJfdCByODsKLSAgICB1aW50
MzJfdCByOTsKLSAgICB1aW50MzJfdCByMTA7Ci0gICAgdWludDMyX3QgcjExOwotfTsKLQotI2Rl
ZmluZSBTQVZFX1JFRyhyZWduYW1lLCB3aGVyZSkgXAotICAgIGFzbSB2b2xhdGlsZSAoInN0ciAi
ICNyZWduYW1lICIsICUwIiA6ICI9bSIod2hlcmUpIDogOiAibWVtb3J5IikKLQotI2RlZmluZSBB
TExPQ0FURV9BTkRfR0VUX1JFR0lTVEVSX1NUQVRFKHJlZ2lzdGVycykgXAotICAgIFJlZ2lzdGVy
U3RhdGUgcmVnaXN0ZXJzOyBcCi0gICAgU0FWRV9SRUcocjQsIHJlZ2lzdGVycy5yNCk7IFwKLSAg
ICBTQVZFX1JFRyhyNSwgcmVnaXN0ZXJzLnI1KTsgXAotICAgIFNBVkVfUkVHKHI2LCByZWdpc3Rl
cnMucjYpOyBcCi0gICAgU0FWRV9SRUcocjgsIHJlZ2lzdGVycy5yOCk7IFwKLSAgICBTQVZFX1JF
RyhyOSwgcmVnaXN0ZXJzLnI5KTsgXAotICAgIFNBVkVfUkVHKHIxMCwgcmVnaXN0ZXJzLnIxMCk7
IFwKLSAgICBTQVZFX1JFRyhyMTEsIHJlZ2lzdGVycy5yMTEpCi0KLSNlbGlmIENQVShBUk02NCkK
LXN0cnVjdCBSZWdpc3RlclN0YXRlIHsKLSAgICB1aW50NjRfdCB4MTk7Ci0gICAgdWludDY0X3Qg
eDIwOwotICAgIHVpbnQ2NF90IHgyMTsKLSAgICB1aW50NjRfdCB4MjI7Ci0gICAgdWludDY0X3Qg
eDIzOwotICAgIHVpbnQ2NF90IHgyNDsKLSAgICB1aW50NjRfdCB4MjU7Ci0gICAgdWludDY0X3Qg
eDI2OwotICAgIHVpbnQ2NF90IHgyNzsKLSAgICB1aW50NjRfdCB4Mjg7Ci19OwotCi0jZGVmaW5l
IFNBVkVfUkVHKHJlZ25hbWUsIHdoZXJlKSBcCi0gICAgYXNtIHZvbGF0aWxlICgic3RyICIgI3Jl
Z25hbWUgIiwgJTAiIDogIj1tIih3aGVyZSkgOiA6ICJtZW1vcnkiKQotCi0jZGVmaW5lIEFMTE9D
QVRFX0FORF9HRVRfUkVHSVNURVJfU1RBVEUocmVnaXN0ZXJzKSBcCi0gICAgUmVnaXN0ZXJTdGF0
ZSByZWdpc3RlcnM7IFwKLSAgICBTQVZFX1JFRyh4MTksIHJlZ2lzdGVycy54MTkpOyBcCi0gICAg
U0FWRV9SRUcoeDIwLCByZWdpc3RlcnMueDIwKTsgXAotICAgIFNBVkVfUkVHKHgyMSwgcmVnaXN0
ZXJzLngyMSk7IFwKLSAgICBTQVZFX1JFRyh4MjIsIHJlZ2lzdGVycy54MjIpOyBcCi0gICAgU0FW
RV9SRUcoeDIzLCByZWdpc3RlcnMueDIzKTsgXAotICAgIFNBVkVfUkVHKHgyNCwgcmVnaXN0ZXJz
LngyNCk7IFwKLSAgICBTQVZFX1JFRyh4MjUsIHJlZ2lzdGVycy54MjUpOyBcCi0gICAgU0FWRV9S
RUcoeDI2LCByZWdpc3RlcnMueDI2KTsgXAotICAgIFNBVkVfUkVHKHgyNywgcmVnaXN0ZXJzLngy
Nyk7IFwKLSAgICBTQVZFX1JFRyh4MjgsIHJlZ2lzdGVycy54MjgpCi0KLSNlbmRpZgotI2VuZGlm
IC8vICFPUyhXSU5ET1dTKQotCi0jaWZuZGVmIEFMTE9DQVRFX0FORF9HRVRfUkVHSVNURVJfU1RB
VEUKLSNpZiBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpCi0jZGVmaW5lIFJFR0lTVEVSX0JVRkZFUl9B
TElHTk1FTlQgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKHNpemVvZih2b2lkKikpKSkKLSNlbHNl
Ci0jZGVmaW5lIFJFR0lTVEVSX0JVRkZFUl9BTElHTk1FTlQKLSNlbmRpZgotCi10eXBlZGVmIGpt
cF9idWYgUmVnaXN0ZXJTdGF0ZTsKLQotLy8gQUxMT0NBVEVfQU5EX0dFVF9SRUdJU1RFUl9TVEFU
RSgpIGlzIGEgbWFjcm8gc28gdGhhdCBpdCBpcyBhbHdheXMgImlubGluZWQiIGV2ZW4gaW4gZGVi
dWcgYnVpbGRzLgotI2lmIENPTVBJTEVSKE1TVkMpCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNw
cmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NjExKQotI2RlZmluZSBBTExPQ0FURV9BTkRfR0VUX1JF
R0lTVEVSX1NUQVRFKHJlZ2lzdGVycykgXAotICAgIFJlZ2lzdGVyU3RhdGUgcmVnaXN0ZXJzIFJF
R0lTVEVSX0JVRkZFUl9BTElHTk1FTlQ7IFwKLSAgICBzZXRqbXAocmVnaXN0ZXJzKQotI3ByYWdt
YSB3YXJuaW5nKHBvcCkKLSNlbHNlCi0jZGVmaW5lIEFMTE9DQVRFX0FORF9HRVRfUkVHSVNURVJf
U1RBVEUocmVnaXN0ZXJzKSBcCi0gICAgUmVnaXN0ZXJTdGF0ZSByZWdpc3RlcnMgUkVHSVNURVJf
QlVGRkVSX0FMSUdOTUVOVDsgXAotICAgIHNldGptcChyZWdpc3RlcnMpCi0jZW5kaWYKLSNlbmRp
ZiAvLyBBTExPQ0FURV9BTkRfR0VUX1JFR0lTVEVSX1NUQVRFCi0KLX0gLy8gbmFtZXNwYWNlIEpT
QwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9SdW5uaW5nU2NvcGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1J1bm5pbmdTY29wZS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiODlkMDNjZmJmYmQyYzI0OGM1ZjhiZDhmMWU4NTZlNjRjYmZj
NWUxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1J1bm5pbmdTY29wZS5oCisrKyAvZGV2L251bGwKQEAgLTEs
NTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSGVhcC5o
IgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgUnVubmluZ1Njb3BlIHsKLXB1YmxpYzoKLSAg
ICBSdW5uaW5nU2NvcGUoSGVhcCYgaGVhcCkKLSAgICAgICAgOiBtX2hlYXAoaGVhcCkKLSAgICAg
ICAgLCBtX29sZFN0YXRlKG1faGVhcC5tX211dGF0b3JTdGF0ZSkKLSAgICB7Ci0gICAgICAgIG1f
aGVhcC5tX211dGF0b3JTdGF0ZSA9IE11dGF0b3JTdGF0ZTo6UnVubmluZzsKLSAgICB9Ci0gICAg
Ci0gICAgflJ1bm5pbmdTY29wZSgpCi0gICAgewotICAgICAgICBtX2hlYXAubV9tdXRhdG9yU3Rh
dGUgPSBtX29sZFN0YXRlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBIZWFwJiBtX2hlYXA7Ci0g
ICAgTXV0YXRvclN0YXRlIG1fb2xkU3RhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCmluZGV4IGYwMjYwZmMy
ZmMxMTczODFmYTQ3Mzg2NTg1MzY1MzdjNDZhYzEyMmIuLmI1MTFlNmRjMjVlNjc4YmJjZDYyZDBi
YWZmMjExMDJlNDc0NDMwNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5jcHAKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKLSNpbmNs
dWRlICJTdG9wSWZOZWNlc3NhcnlUaW1lci5oIgogI2luY2x1ZGUgIlN1cGVyU2FtcGxlci5oIgog
I2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KQEAgLTc2LDEzICs3NSwxMiBA
QCBzdGF0aWMgdm9pZCB2YWxpZGF0ZShKU0NlbGwqIGNlbGwpCiB9CiAjZW5kaWYKIAotU2xvdFZp
c2l0b3I6OlNsb3RWaXNpdG9yKEhlYXAmIGhlYXAsIENTdHJpbmcgY29kZU5hbWUpCitTbG90Vmlz
aXRvcjo6U2xvdFZpc2l0b3IoSGVhcCYgaGVhcCkKICAgICA6IG1fYnl0ZXNWaXNpdGVkKDApCiAg
ICAgLCBtX3Zpc2l0Q291bnQoMCkKICAgICAsIG1faXNJblBhcmFsbGVsTW9kZShmYWxzZSkKICAg
ICAsIG1fbWFya2luZ1ZlcnNpb24oTWFya2VkU3BhY2U6OmluaXRpYWxWZXJzaW9uKQogICAgICwg
bV9oZWFwKGhlYXApCi0gICAgLCBtX2NvZGVOYW1lKGNvZGVOYW1lKQogI2lmICFBU1NFUlRfRElT
QUJMRUQKICAgICAsIG1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uKGZhbHNlKQog
ICAgICwgbV9pc0RyYWluaW5nKGZhbHNlKQpAQCAtNDcxLDEyICs0NjksOSBAQCB2b2lkIFNsb3RW
aXNpdG9yOjpvcHRpbWl6ZUZvclN0b3BwZWRNdXRhdG9yKCkKICAgICBtX2Nhbk9wdGltaXplRm9y
U3RvcHBlZE11dGF0b3IgPSB0cnVlOwogfQogCi1ORVZFUl9JTkxJTkUgdm9pZCBTbG90VmlzaXRv
cjo6ZHJhaW4oTW9ub3RvbmljVGltZSB0aW1lb3V0KQordm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4o
TW9ub3RvbmljVGltZSB0aW1lb3V0KQogewotICAgIGlmICghbV9pc0luUGFyYWxsZWxNb2RlKSB7
Ci0gICAgICAgIGRhdGFMb2coIkZBVEFMOiBhdHRlbXB0aW5nIHRvIGRyYWluIHdoZW4gbm90IGlu
IHBhcmFsbGVsIG1vZGUuXG4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKICAgICAK
ICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcmlnaHRUb1J1bik7CiAgICAgCkBAIC01ODYs
NyArNTgxLDcgQEAgYm9vbCBTbG90VmlzaXRvcjo6aGFzV29yayhjb25zdCBBYnN0cmFjdExvY2tl
ciYpCiAgICAgICAgIHx8ICFtX2hlYXAubV9zaGFyZWRNdXRhdG9yTWFya1N0YWNrLT5pc0VtcHR5
KCk7CiB9CiAKLU5FVkVSX0lOTElORSBTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xv
dFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUgc2hhcmVkRHJhaW5Nb2Rl
LCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCitTbG90VmlzaXRvcjo6U2hhcmVkRHJhaW5SZXN1bHQg
U2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFpbk1vZGUgc2hhcmVkRHJhaW5N
b2RlLCBNb25vdG9uaWNUaW1lIHRpbWVvdXQpCiB7CiAgICAgQVNTRVJUKG1faXNJblBhcmFsbGVs
TW9kZSk7CiAgICAgCkBAIC02MjEsMjIgKzYxNiw4IEBAIE5FVkVSX0lOTElORSBTbG90VmlzaXRv
cjo6U2hhcmVkRHJhaW5SZXN1bHQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWRE
CiAgICAgICAgICAgICAgICAgaWYgKGhhc0VsYXBzZWQodGltZW91dCkpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBTaGFyZWREcmFpblJlc3VsdDo6VGltZWRPdXQ7CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgaWYgKGRpZFJlYWNoVGVybWluYXRpb24obG9ja2VyKSkgewor
ICAgICAgICAgICAgICAgIGlmIChkaWRSZWFjaFRlcm1pbmF0aW9uKGxvY2tlcikpCiAgICAgICAg
ICAgICAgICAgICAgIG1faGVhcC5tX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwo
KTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlJ3Jl
IGluIGNvbmN1cnJlbnQgbW9kZSwgdGhlbiB3ZSBrbm93IHRoYXQgdGhlIG11dGF0b3Igd2lsbCBl
dmVudHVhbGx5IGRvCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSByaWdodCB0aGluZyBiZWNh
dXNlOgotICAgICAgICAgICAgICAgICAgICAvLyAtIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgY29s
bGVjdG9yIGhhcyB0aGUgY29ubi4gSW4gdGhhdCBjYXNlLCB0aGUgY29sbGVjdG9yIHdpbGwKLSAg
ICAgICAgICAgICAgICAgICAgLy8gICB3YWtlIHVwIGZyb20gdGhlIG5vdGlmaWNhdGlvbiBhYm92
ZS4gVGhpcyB3aWxsIGhhcHBlbiBpZiB0aGUgYXBwIHJlbGVhc2VkIGhlYXAKLSAgICAgICAgICAg
ICAgICAgICAgLy8gICBhY2Nlc3MuIE5hdGl2ZSBhcHBzIGNhbiBzcGVuZCBhIGxvdCBvZiB0aW1l
IHdpdGggaGVhcCBhY2Nlc3MgcmVsZWFzZWQuCi0gICAgICAgICAgICAgICAgICAgIC8vIC0gSXQn
cyBwb3NzaWJsZSB0aGF0IHRoZSBtdXRhdG9yIHdpbGwgYWxsb2NhdGUgc29vbi4gVGhlbiBpdCB3
aWxsIGNoZWNrIGlmIHdlCi0gICAgICAgICAgICAgICAgICAgIC8vICAgcmVhY2hlZCB0ZXJtaW5h
dGlvbi4gVGhpcyBpcyB0aGUgbW9zdCBsaWtlbHkgb3V0Y29tZSBpbiBwcm9ncmFtcyB0aGF0IGFs
bG9jYXRlCi0gICAgICAgICAgICAgICAgICAgIC8vICAgYSBsb3QuCi0gICAgICAgICAgICAgICAg
ICAgIC8vIC0gV2ViQ29yZSBuZXZlciByZWxlYXNlcyBhY2Nlc3MuIEJ1dCBXZWJDb3JlIGhhcyBh
IHJ1bmxvb3AuIFRoZSBydW5sb29wIHdpbGwgY2hlY2sKLSAgICAgICAgICAgICAgICAgICAgLy8g
ICBpZiB3ZSByZWFjaGVkIHRlcm1pbmF0aW9uLgotICAgICAgICAgICAgICAgICAgICAvLyBTbywg
dGhpcyB0ZWxscyB0aGUgcnVubG9vcCB0aGF0IGl0J3MgZ290IHRoaW5ncyB0byBkby4KLSAgICAg
ICAgICAgICAgICAgICAgbV9oZWFwLm1fc3RvcElmTmVjZXNzYXJ5VGltZXItPnNjaGVkdWxlU29v
bigpOwotICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGF1dG8gaXNSZWFkeSA9
IFsmXSAoKSAtPiBib29sIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1dvcmsobG9j
a2VyKQpAQCAtNjc4LDkgKzY1OSw3IEBAIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBT
bG90VmlzaXRvcjo6ZHJhaW5JblBhcmFsbGVsUGFzc2l2ZWx5KE1vbm90b25pY1RpCiAgICAgCiAg
ICAgQVNTRVJUKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkpOwogICAgIAotICAgIGlmIChP
cHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID09IDEKLSAgICAgICAgfHwgKG1faGVhcC5tX3dv
cmxkU3RhdGUubG9hZCgpICYgSGVhcDo6bXV0YXRvcldhaXRpbmdCaXQpCi0gICAgICAgIHx8ICFt
X2hlYXAuaGFzSGVhcEFjY2VzcygpCisgICAgaWYgKCFtX2hlYXAuaGFzSGVhcEFjY2VzcygpCiAg
ICAgICAgIHx8IG1faGVhcC5jb2xsZWN0b3JCZWxpZXZlc1RoYXRUaGVXb3JsZElzU3RvcHBlZCgp
KSB7CiAgICAgICAgIC8vIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIG92ZXIgZHJhaW5JblBhcmFs
bGVsKCkgd2hlbiB3ZSBoYXZlIGEgY29uY3VycmVudCBtdXRhdG9yIGJ1dAogICAgICAgICAvLyBv
dGhlcndpc2UgaXQgaXMgbm90IHByb2ZpdGFibGUuCkBAIC03MDUsOSArNjg0LDYgQEAgU2xvdFZp
c2l0b3I6OlNoYXJlZERyYWluUmVzdWx0IFNsb3RWaXNpdG9yOjpkcmFpbkluUGFyYWxsZWxQYXNz
aXZlbHkoTW9ub3RvbmljVGkKIAogdm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlQWxsKCkKIHsKLSAg
ICBpZiAoaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgCiAgICAgZG9uYXRlQWxsKGhv
bGRMb2NrKG1faGVhcC5tX21hcmtpbmdNdXRleCkpOwogfQogCkBAIC03NzksMTEgKzc1NSw3IEBA
IHZvaWQgU2xvdFZpc2l0b3I6Om1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKQogICAgIAog
dm9pZCBTbG90VmlzaXRvcjo6ZG9uYXRlKCkKIHsKLSAgICBpZiAoIW1faXNJblBhcmFsbGVsTW9k
ZSkgewotICAgICAgICBkYXRhTG9nKCJGQVRBTDogQXR0ZW1wdGluZyB0byBkb25hdGUgd2hlbiBu
b3QgaW4gcGFyYWxsZWwgbW9kZS5cbiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIH0KLSAgICAKKyAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKICAg
ICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA9PSAxKQogICAgICAgICByZXR1cm47
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAppbmRleCA4MzQ3
OWFmN2Y3MWRlMTFmNThkOWM0NDYxY2Y0NTk2YWNjZTY5MzI4Li5iNzVhNzk0ZjA4MjhmMzA2YTk0
MGZkN2FlOTYxNTE0OTJjYjQ1ZDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmgKQEAgLTU2LDcgKzU2LDcgQEAgY2xhc3MgU2xvdFZpc2l0b3IgewogICAgIGZyaWVu
ZCBjbGFzcyBIZWFwOwogCiBwdWJsaWM6Ci0gICAgU2xvdFZpc2l0b3IoSGVhcCYsIENTdHJpbmcg
Y29kZU5hbWUpOworICAgIFNsb3RWaXNpdG9yKEhlYXAmKTsKICAgICB+U2xvdFZpc2l0b3IoKTsK
IAogICAgIE1hcmtTdGFja0FycmF5JiBjb2xsZWN0b3JNYXJrU3RhY2soKSB7IHJldHVybiBtX2Nv
bGxlY3RvclN0YWNrOyB9CkBAIC0xNjcsOCArMTY3LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
SWdub3JlTmV3T3BhcXVlUm9vdHMoYm9vbCB2YWx1ZSkgeyBtX2lnbm9yZU5ld09wYXF1ZVJvb3Rz
ID0gdmFsdWU7IH0KIAogICAgIHZvaWQgZG9uYXRlQWxsKCk7Ci0gICAgCi0gICAgY29uc3QgY2hh
ciogY29kZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVOYW1lLmRhdGEoKTsgfQogCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwpAQCAtMjMwLDggKzIy
OCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2Nhbk9wdGltaXplRm9yU3RvcHBlZE11dGF0b3Ig
eyBmYWxzZSB9OwogICAgIExvY2sgbV9yaWdodFRvUnVuOwogICAgIAotICAgIENTdHJpbmcgbV9j
b2RlTmFtZTsKLSAgICAKIHB1YmxpYzoKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgYm9vbCBt
X2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1N0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N0b2NoYXN0aWNTcGFjZVRpbWVNdXRhdG9y
U2NoZWR1bGVyLmNwcAppbmRleCAxNTgzNTVhZDZlOGRiNTAzOGE4ODkxYjM0MTk3NTgzMTg3NzYw
NTZlLi5kYmQzMTMwZWM0Yzk3NjNkNzEzNzRlODg3ZDFiYjNjZDJkMTQ3ODhkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TdG9jaGFzdGljU3BhY2VUaW1lTXV0YXRvclNj
aGVkdWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU3RvY2hhc3RpY1Nw
YWNlVGltZU11dGF0b3JTY2hlZHVsZXIuY3BwCkBAIC03NiwxMCArNzYsNiBAQCB2b2lkIFN0b2No
YXN0aWNTcGFjZVRpbWVNdXRhdG9yU2NoZWR1bGVyOjpiZWdpbkNvbGxlY3Rpb24oKQogICAgIG1f
Ynl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCA9IAogICAgICAgICBPcHRpb25zOjpjb25j
dXJyZW50R0NNYXhIZWFkcm9vbSgpICoKICAgICAgICAgc3RkOjptYXg8ZG91YmxlPihtX2J5dGVz
QWxsb2NhdGVkVGhpc0N5Y2xlQXRUaGVCZWdpbm5pbmcsIG1faGVhcC5tX21heEVkZW5TaXplKTsK
LSAgICAKLSAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkKLSAgICAgICAgZGF0YUxvZygiY2E9Iiwg
bV9ieXRlc0FsbG9jYXRlZFRoaXNDeWNsZUF0VGhlQmVnaW5uaW5nIC8gMTAyNCwgImtiIGg9Iiwg
KG1fYnl0ZXNBbGxvY2F0ZWRUaGlzQ3ljbGVBdFRoZUVuZCAtIG1fYnl0ZXNBbGxvY2F0ZWRUaGlz
Q3ljbGVBdFRoZUJlZ2lubmluZykgLyAxMDI0LCAia2IgIik7Ci0gICAgCiAgICAgbV9iZWZvcmVD
b25zdHJhaW50cyA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogfQogCkBAIC0xMjEsMTEgKzExNyw2
IEBAIHZvaWQgU3RvY2hhc3RpY1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OnN5bmNocm9ub3Vz
RHJhaW5pbmdEaWRTdGFsbCgpCiAgICAgU25hcHNob3Qgc25hcHNob3QoKnRoaXMpOwogICAgIAog
ICAgIGRvdWJsZSByZXN1bWVQcm9iYWJpbGl0eSA9IG11dGF0b3JVdGlsaXphdGlvbihzbmFwc2hv
dCk7Ci0gICAgaWYgKHJlc3VtZVByb2JhYmlsaXR5IDwgT3B0aW9uczo6ZXBzaWxvbk11dGF0b3JV
dGlsaXphdGlvbigpKSB7Ci0gICAgICAgIG1fcGxhbm5lZFJlc3VtZVRpbWUgPSBNb25vdG9uaWNU
aW1lOjppbmZpbml0eSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAogICAgIGJvb2wg
c2hvdWxkUmVzdW1lID0gbV9yYW5kb20uZ2V0KCkgPCByZXN1bWVQcm9iYWJpbGl0eTsKICAgICAK
ICAgICBpZiAoc2hvdWxkUmVzdW1lKSB7CkBAIC0xNDQsMTAgKzEzNSw4IEBAIE1vbm90b25pY1Rp
bWUgU3RvY2hhc3RpY1NwYWNlVGltZU11dGF0b3JTY2hlZHVsZXI6OnRpbWVUb1N0b3AoKQogICAg
IGNhc2UgU3RvcHBlZDoKICAgICAgICAgcmV0dXJuIE1vbm90b25pY1RpbWU6Om5vdygpOwogICAg
IGNhc2UgUmVzdW1lZDogewotICAgICAgICAvLyBPbmNlIHdlJ3JlIHJ1bm5pbmcsIHdlIGtlZXAg
Z29pbmcgdW5sZXNzIHdlIHJ1biBvdXQgb2YgaGVhZHJvb20uCi0gICAgICAgIFNuYXBzaG90IHNu
YXBzaG90KCp0aGlzKTsKLSAgICAgICAgaWYgKG11dGF0b3JVdGlsaXphdGlvbihzbmFwc2hvdCkg
PCBPcHRpb25zOjplcHNpbG9uTXV0YXRvclV0aWxpemF0aW9uKCkpCi0gICAgICAgICAgICByZXR1
cm4gTW9ub3RvbmljVGltZTo6bm93KCk7CisgICAgICAgIC8vIE9uY2Ugd2UncmUgcnVubmluZywg
d2Uga2VlcCBnb2luZy4KKyAgICAgICAgLy8gRklYTUU6IE1heWJlIGZvcmNlIHN0b3Agd2hlbiB3
ZSBydW4gb3V0IG9mIGhlYWRyb29tPwogICAgICAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6aW5m
aW5pdHkoKTsKICAgICB9IH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1N3ZWVwaW5nU2NvcGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1N3ZWVw
aW5nU2NvcGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTNmNjg2Mjg2MmFlN2E0
Y2E3MTM1MmFhNjBhZWMyNmIzZDFlZmNjMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Td2VlcGluZ1Njb3Bl
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpbmNsdWRlICJIZWFwLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBTd2Vl
cGluZ1Njb3BlIHsKLXB1YmxpYzoKLSAgICBTd2VlcGluZ1Njb3BlKEhlYXAmIGhlYXApCi0gICAg
ICAgIDogbV9oZWFwKGhlYXApCi0gICAgICAgICwgbV9vbGRTdGF0ZShtX2hlYXAubV9tdXRhdG9y
U3RhdGUpCi0gICAgewotICAgICAgICBtX2hlYXAubV9tdXRhdG9yU3RhdGUgPSBNdXRhdG9yU3Rh
dGU6OlN3ZWVwaW5nOwotICAgIH0KLSAgICAKLSAgICB+U3dlZXBpbmdTY29wZSgpCi0gICAgewot
ICAgICAgICBtX2hlYXAubV9tdXRhdG9yU3RhdGUgPSBtX29sZFN0YXRlOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBIZWFwJiBtX2hlYXA7Ci0gICAgTXV0YXRvclN0YXRlIG1fb2xkU3RhdGU7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRXb3JrbGlzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdv
cmtsaXN0LmNwcAppbmRleCBmNjQ1OTY1NjBlYTllMmQ3NjI3ZjNiNjNlOTNlMTM2ODdlNmQxZjI3
Li5hMDEzZTFhN2E4MDdiZjAxOGE2MWIxZTU5NTA5YTM4NTk0OGEzMGY4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFdvcmtsaXN0LmNwcApAQCAtOTksNyArOTksNyBAQCBwcml2YXRl
OgogCiBjbGFzcyBKSVRXb3JrbGlzdDo6VGhyZWFkIDogcHVibGljIEF1dG9tYXRpY1RocmVhZCB7
CiBwdWJsaWM6Ci0gICAgVGhyZWFkKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIEpJVFdv
cmtsaXN0JiB3b3JrbGlzdCkKKyAgICBUaHJlYWQoY29uc3QgTG9ja0hvbGRlciYgbG9ja2VyLCBK
SVRXb3JrbGlzdCYgd29ya2xpc3QpCiAgICAgICAgIDogQXV0b21hdGljVGhyZWFkKGxvY2tlciwg
d29ya2xpc3QubV9sb2NrLCB3b3JrbGlzdC5tX2NvbmRpdGlvbikKICAgICAgICAgLCBtX3dvcmts
aXN0KHdvcmtsaXN0KQogICAgIHsKQEAgLTEwNyw3ICsxMDcsNyBAQCBwdWJsaWM6CiAgICAgfQog
ICAgIAogcHJvdGVjdGVkOgotICAgIFBvbGxSZXN1bHQgcG9sbChjb25zdCBBYnN0cmFjdExvY2tl
ciYpIG92ZXJyaWRlCisgICAgUG9sbFJlc3VsdCBwb2xsKGNvbnN0IExvY2tIb2xkZXImKSBvdmVy
cmlkZQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV93b3JrbGlzdC5tX251bUF2YWls
YWJsZVRocmVhZHMpOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggMDU3YmE0MWE5
ZTA5OWRmYmViODkyOGU2YzdmM2FhY2UyNGVmOTE0NC4uYmY1NmVmZTQ3ZjE1ZDRhYTk4Y2MwYTUy
NDZiN2I1NDZjZmRlMzM4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTM4LDYgKzM4LDcgQEAK
ICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJIZWFwUHJvZmlsZXIuaCIKICNp
bmNsdWRlICJIZWFwU25hcHNob3RCdWlsZGVyLmgiCisjaW5jbHVkZSAiSGVhcFN0YXRpc3RpY3Mu
aCIKICNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0
ZXIuaCIKICNpbmNsdWRlICJKSVQuaCIKQEAgLTEwODMsNyArMTA4NCw2IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRG9sbGFyQWdlbnRHZXRSZXBvcnQoRXhl
Y1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkRv
bGxhckFnZW50TGVhdmluZyhFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uV2FpdEZvclJlcG9ydChFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSGVhcENhcGFjaXR5KEV4ZWNTdGF0ZSop
Owotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25GbGFzaEhlYXBB
Y2Nlc3MoRXhlY1N0YXRlKik7CiAKIHN0cnVjdCBTY3JpcHQgewogICAgIGVudW0gY2xhc3MgU3Ry
aWN0TW9kZSB7CkBAIC0xMzY2LDcgKzEzNjYsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGFkZEZ1
bmN0aW9uKHZtLCAid2FpdEZvclJlcG9ydCIsIGZ1bmN0aW9uV2FpdEZvclJlcG9ydCwgMCk7CiAK
ICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJoZWFwQ2FwYWNpdHkiLCBmdW5jdGlvbkhlYXBDYXBh
Y2l0eSwgMCk7Ci0gICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiZmxhc2hIZWFwQWNjZXNzIiwgZnVu
Y3Rpb25GbGFzaEhlYXBBY2Nlc3MsIDApOwogICAgIH0KICAgICAKICAgICB2b2lkIGFkZEZ1bmN0
aW9uKFZNJiB2bSwgSlNPYmplY3QqIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVu
Y3Rpb24gZnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cykKQEAgLTI2NDksMjEgKzI2NDgsNiBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uSGVhcENhcGFjaXR5KEV4ZWNT
dGF0ZSogZXhlYykKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHZtLmhlYXAu
Y2FwYWNpdHkoKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
Rmxhc2hIZWFwQWNjZXNzKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAKLSAg
ICB2bS5oZWFwLnJlbGVhc2VBY2Nlc3MoKTsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
ID49IDEpIHsKLSAgICAgICAgZG91YmxlIG1zID0gZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIo
ZXhlYyk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwotICAgICAgICBzbGVlcChTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKG1zKSk7Ci0gICAg
fQotICAgIHZtLmhlYXAuYWNxdWlyZUFjY2VzcygpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZT4KIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX2Z1bmRhbWVudGFsPFZhbHVlVHlwZT46OnZh
bHVlPjo6dHlwZSBhZGRPcHRpb24oVk0mLCBKU09iamVjdCosIElkZW50aWZpZXIsIFZhbHVlVHlw
ZSkgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRp
YWxpemVUaHJlYWRpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlh
bGl6ZVRocmVhZGluZy5jcHAKaW5kZXggNDdkZGQ2MTczZjdlZmMxYzdiNjk5Zjc2MTIzZjNmM2U3
Mjg0MTNmZS4uZjcyZGE5OTc4ODA2MjMxY2NjNjQxMzc5ZTk3ZDRjNDBiZGYwZGZiNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGlu
Zy5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3Iu
aCIKICNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSGVhcFN0YXRpc3RpY3MuaCIKICNpbmNs
dWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSlNEYXRlTWF0aC5oIgogI2luY2x1ZGUgIkpT
R2xvYmFsT2JqZWN0LmgiCkBAIC01OSw2ICs2MCw4IEBAIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGlu
ZygpCiAgICAgICAgIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogICAgICAgICBXVEY6Omlu
aXRpYWxpemVHQ1RocmVhZHMoKTsKICAgICAgICAgT3B0aW9uczo6aW5pdGlhbGl6ZSgpOworICAg
ICAgICBpZiAoT3B0aW9uczo6cmVjb3JkR0NQYXVzZVRpbWVzKCkpCisgICAgICAgICAgICBIZWFw
U3RhdGlzdGljczo6aW5pdGlhbGl6ZSgpOwogI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJ
TElORykKICAgICAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmluaXRpYWxpemUoKTsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5l
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsSW5saW5lcy5oCmluZGV4
IDM4YTJlY2ZiMDVhMzRiYWQwMGVmNTg2NzlmNzZlNzRiYzkwY2VmNmUuLjc3NWY5M2FmMzkzN2Uz
MzM1NWM0ZDZmNWJjMzU2ODM2OWVkZmVkNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGxJbmxpbmVzLmgKQEAgLTI4MCw3ICsyODAsNyBAQCBBTFdBWVNfSU5MSU5F
IGNvbnN0IENsYXNzSW5mbyogSlNDZWxsOjpjbGFzc0luZm8oVk0mIHZtKSBjb25zdAogICAgIC8v
IGRlc3RydWN0aW5nIHRoZSBvYmplY3QuIFRoZSBHQyB0aHJlYWQgb3IgSklUIHRocmVhZHMsIHVu
bGlrZSB0aGUgbXV0YXRvciB0aHJlYWQsIGFyZSBhYmxlIHRvIGFjY2VzcyBjbGFzc0luZm8KICAg
ICAvLyBpbmRlcGVuZGVudCBvZiB3aGV0aGVyIHRoZSBtdXRhdG9yIHRocmVhZCBpcyBzd2VlcGlu
ZyBvciBub3QuIEhlbmNlLCB3ZSBhbHNvIGNoZWNrIGZvciBvd25lclRocmVhZCgpICE9CiAgICAg
Ly8gc3RkOjp0aGlzX3RocmVhZDo6Z2V0X2lkKCkgdG8gYWxsb3cgdGhlIEdDIHRocmVhZCBvciBK
SVQgdGhyZWFkcyB0byBwYXNzIHRoaXMgYXNzZXJ0aW9uLgotICAgIEFTU0VSVCh2bS5oZWFwLm11
dGF0b3JTdGF0ZSgpICE9IE11dGF0b3JTdGF0ZTo6U3dlZXBpbmcgfHwgdm0uYXBpTG9jaygpLm93
bmVyVGhyZWFkKCkgIT0gc3RkOjp0aGlzX3RocmVhZDo6Z2V0X2lkKCkpOworICAgIEFTU0VSVCh2
bS5oZWFwLm11dGF0b3JTdGF0ZSgpID09IE11dGF0b3JTdGF0ZTo6UnVubmluZyB8fCB2bS5hcGlM
b2NrKCkub3duZXJUaHJlYWQoKSAhPSBzdGQ6OnRoaXNfdGhyZWFkOjpnZXRfaWQoKSk7CiAgICAg
cmV0dXJuIHN0cnVjdHVyZSh2bSktPmNsYXNzSW5mbygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCmluZGV4IGYxYzJmMTMwOTFmZjgxNjVkNTU3YjMwNzhh
NzUyNDg0NTE2ZWViY2UuLmJhZDU4MDdkMzIxNmVhY2RjYzEwMjEzZTMxOGY3MTRlMTA0NjNhMjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCkBAIC0zMTcsMTEg
KzMxNyw3IEBAIHN0YXRpYyB2b2lkIG92ZXJyaWRlRGVmYXVsdHMoKQogICAgICAgICBPcHRpb25z
OjptYXhpbXVtTXV0YXRvclV0aWxpemF0aW9uKCkgPSAwLjY7CiAgICAgICAgIE9wdGlvbnM6OmNv
bmN1cnJlbnRHQ01heEhlYWRyb29tKCkgPSAxLjQ7CiAgICAgICAgIE9wdGlvbnM6Om1pbmltdW1H
Q1BhdXNlTVMoKSA9IDE7Ci0gICAgICAgIE9wdGlvbnM6OnVzZVN0b2NoYXN0aWNNdXRhdG9yU2No
ZWR1bGVyKCkgPSBmYWxzZTsKLSAgICAgICAgaWYgKFdURjo6bnVtYmVyT2ZQcm9jZXNzb3JDb3Jl
cygpIDw9IDEpCi0gICAgICAgICAgICBPcHRpb25zOjpnY0luY3JlbWVudFNjYWxlKCkgPSAxOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBPcHRpb25zOjpnY0luY3JlbWVudFNjYWxlKCkgPSAw
OworICAgICAgICBPcHRpb25zOjpnY0luY3JlbWVudFNjYWxlKCkgPSAxOwogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IDc3ZTk4ZWI1OGEwZGYw
MzUyNzM2YjI3ZTE1NzdkMDE2ZmYwYWEzOTkuLmJiZDcwOTYyYWFlYjc5NDVhMzc5NTg2ZjcxMDRh
ZDg3YmM0N2U1NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAg
LTIwMCw3ICsyMDAsNiBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2
KGRvdWJsZSwgbGFyZ2VIZWFwR3Jvd3RoRmFjdG9yLCAxLjI0LCBOb3JtYWwsIG51bGxwdHIpIFwK
ICAgICB2KGRvdWJsZSwgbWluaW11bU11dGF0b3JVdGlsaXphdGlvbiwgMCwgTm9ybWFsLCBudWxs
cHRyKSBcCiAgICAgdihkb3VibGUsIG1heGltdW1NdXRhdG9yVXRpbGl6YXRpb24sIDAuNywgTm9y
bWFsLCBudWxscHRyKSBcCi0gICAgdihkb3VibGUsIGVwc2lsb25NdXRhdG9yVXRpbGl6YXRpb24s
IDAuMDEsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoZG91YmxlLCBjb25jdXJyZW50R0NNYXhI
ZWFkcm9vbSwgMS41LCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KGRvdWJsZSwgY29uY3VycmVu
dEdDUGVyaW9kTVMsIDIsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdXNlU3RvY2hh
c3RpY011dGF0b3JTY2hlZHVsZXIsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXApAQCAtMzQ1LDYg
KzM0NCw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwg
dXNlWm9tYmllTW9kZSwgZmFsc2UsIE5vcm1hbCwgImRlYnVnZ2luZyBvcHRpb24gdG8gc2NyaWJi
bGUgb3ZlciBkZWFkIG9iamVjdHMgd2l0aCAweGJhZGJlZWYwIikgXAogICAgIHYoYm9vbCwgdXNl
SW1tb3J0YWxPYmplY3RzLCBmYWxzZSwgTm9ybWFsLCAiZGVidWdnaW5nIG9wdGlvbiB0byBrZWVw
IGFsbCBvYmplY3RzIGFsaXZlIGZvcmV2ZXIiKSBcCiAgICAgdihib29sLCBzd2VlcFN5bmNocm9u
b3VzbHksIGZhbHNlLCBOb3JtYWwsICJkZWJ1Z2dpbmcgb3B0aW9uIHRvIHN3ZWVwIGFsbCBkZWFk
IG9iamVjdHMgc3luY2hyb25vdXNseSBhdCBHQyBlbmQgYmVmb3JlIHJlc3VtaW5nIG11dGF0b3Ii
KSBcCisgICAgdihib29sLCBkdW1wT2JqZWN0U3RhdGlzdGljcywgZmFsc2UsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIHYodW5zaWduZWQsIG1heFNpbmdsZUFsbG9jYXRpb25TaXplLCAwLCBDb25m
aWd1cmFibGUsICJkZWJ1Z2dpbmcgb3B0aW9uIHRvIGxpbWl0IGluZGl2aWR1YWwgYWxsb2NhdGlv
bnMgdG8gYSBtYXggc2l6ZSAoMCA9IGxpbWl0IG5vdCBzZXQsIE4gPSBsaW1pdCBzaXplIGluIGJ5
dGVzKSIpIFwKICAgICBcCiAgICAgdihnY0xvZ0xldmVsLCBsb2dHQywgR0NMb2dnaW5nOjpOb25l
LCBOb3JtYWwsICJkZWJ1Z2dpbmcgb3B0aW9uIHRvIGxvZyBHQyBhY3Rpdml0eSAoMCA9IE5vbmUs
IDEgPSBCYXNpYywgMiA9IFZlcmJvc2UpIikgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Rlc3RSdW5uZXJVdGlscy5jcHAKaW5kZXggOGI4NWY4ZTM1MzQ3ZDFmMjA0OGM2
NmU4NzZiZTZkMjg5NThkN2U0NS4uZWRiYjBlNDRlZWE3OGZkOWQyY2YwODBhYWVlYmU3ZDlmZTZl
NWZlMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5l
clV0aWxzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZXN0UnVubmVy
VXRpbHMuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Db2RlQmxvY2suaCIKKyNpbmNsdWRlICJIZWFwU3RhdGlz
dGljcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIK
IApAQCAtMTU5LDYgKzE2MCw4IEBAIEpTVmFsdWUgb3B0aW1pemVOZXh0SW52b2NhdGlvbihFeGVj
U3RhdGUqIGV4ZWMpCiAvLyBUaGlzIGlzIGEgaG9vayBjYWxsZWQgYXQgdGhlIGJpdHRlciBlbmQg
b2Ygc29tZSBvZiBvdXIgdGVzdHMuCiB2b2lkIGZpbmFsaXplU3RhdHNBdEVuZE9mVGVzdGluZygp
CiB7CisgICAgaWYgKE9wdGlvbnM6OmxvZ0hlYXBTdGF0aXN0aWNzQXRFeGl0KCkpCisgICAgICAg
IEhlYXBTdGF0aXN0aWNzOjpyZXBvcnRTdWNjZXNzKCk7CiAgICAgaWYgKE9wdGlvbnM6OnJlcG9y
dExMSW50U3RhdHMoKSkKICAgICAgICAgTExJbnQ6OkRhdGE6OmZpbmFsaXplU3RhdHMoKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuY3BwCmluZGV4IDM4N2M2ZTI1ZDcwNjI5YTgzYWE2MWNk
NmE2YTg3NDllYTA3YzdmMDAuLjRkOGZiODQ4OWY5OWNiOGY2N2U3Y2MyZDEzYmY0MTU1ZWU4N2U1
YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0F1dG9tYXRpY1RocmVhZC5jcHAKKysrIGIv
U291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmNwcApAQCAtNDUsNyArNDUsNyBAQCBBdXRv
bWF0aWNUaHJlYWRDb25kaXRpb246On5BdXRvbWF0aWNUaHJlYWRDb25kaXRpb24oKQogewogfQog
Ci12b2lkIEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6bm90aWZ5T25lKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiBsb2NrZXIpCit2b2lkIEF1dG9tYXRpY1RocmVhZENvbmRpdGlvbjo6bm90aWZ5T25l
KGNvbnN0IExvY2tIb2xkZXImIGxvY2tlcikKIHsKICAgICBmb3IgKEF1dG9tYXRpY1RocmVhZCog
dGhyZWFkIDogbV90aHJlYWRzKSB7CiAgICAgICAgIGlmICh0aHJlYWQtPmlzV2FpdGluZyhsb2Nr
ZXIpKSB7CkBAIC02NCw3ICs2NCw3IEBAIHZvaWQgQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpu
b3RpZnlPbmUoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKICAgICBtX2NvbmRpdGlvbi5u
b3RpZnlPbmUoKTsKIH0KIAotdm9pZCBBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246Om5vdGlmeUFs
bChjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKQordm9pZCBBdXRvbWF0aWNUaHJlYWRDb25k
aXRpb246Om5vdGlmeUFsbChjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIpCiB7CiAgICAgbV9jb25k
aXRpb24ubm90aWZ5QWxsKCk7CiAKQEAgLTgxLDI0ICs4MSwyNCBAQCB2b2lkIEF1dG9tYXRpY1Ro
cmVhZENvbmRpdGlvbjo6d2FpdChMb2NrJiBsb2NrKQogICAgIG1fY29uZGl0aW9uLndhaXQobG9j
ayk7CiB9CiAKLXZvaWQgQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjphZGQoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCBBdXRvbWF0aWNUaHJlYWQqIHRocmVhZCkKK3ZvaWQgQXV0b21hdGljVGhyZWFk
Q29uZGl0aW9uOjphZGQoY29uc3QgTG9ja0hvbGRlciYsIEF1dG9tYXRpY1RocmVhZCogdGhyZWFk
KQogewogICAgIEFTU0VSVCghbV90aHJlYWRzLmNvbnRhaW5zKHRocmVhZCkpOwogICAgIG1fdGhy
ZWFkcy5hcHBlbmQodGhyZWFkKTsKIH0KIAotdm9pZCBBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246
OnJlbW92ZShjb25zdCBBYnN0cmFjdExvY2tlciYsIEF1dG9tYXRpY1RocmVhZCogdGhyZWFkKQor
dm9pZCBBdXRvbWF0aWNUaHJlYWRDb25kaXRpb246OnJlbW92ZShjb25zdCBMb2NrSG9sZGVyJiwg
QXV0b21hdGljVGhyZWFkKiB0aHJlYWQpCiB7CiAgICAgbV90aHJlYWRzLnJlbW92ZUZpcnN0KHRo
cmVhZCk7CiAgICAgQVNTRVJUKCFtX3RocmVhZHMuY29udGFpbnModGhyZWFkKSk7CiB9CiAKLWJv
b2wgQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpjb250YWlucyhjb25zdCBBYnN0cmFjdExvY2tl
ciYsIEF1dG9tYXRpY1RocmVhZCogdGhyZWFkKQorYm9vbCBBdXRvbWF0aWNUaHJlYWRDb25kaXRp
b246OmNvbnRhaW5zKGNvbnN0IExvY2tIb2xkZXImLCBBdXRvbWF0aWNUaHJlYWQqIHRocmVhZCkK
IHsKICAgICByZXR1cm4gbV90aHJlYWRzLmNvbnRhaW5zKHRocmVhZCk7CiB9CiAKLUF1dG9tYXRp
Y1RocmVhZDo6QXV0b21hdGljVGhyZWFkKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIEJv
eDxMb2NrPiBsb2NrLCBSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBjb25kaXRpb24p
CitBdXRvbWF0aWNUaHJlYWQ6OkF1dG9tYXRpY1RocmVhZChjb25zdCBMb2NrSG9sZGVyJiBsb2Nr
ZXIsIEJveDxMb2NrPiBsb2NrLCBSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBjb25k
aXRpb24pCiAgICAgOiBtX2xvY2sobG9jaykKICAgICAsIG1fY29uZGl0aW9uKGNvbmRpdGlvbikK
IHsKQEAgLTExOCw3ICsxMTgsNyBAQCBBdXRvbWF0aWNUaHJlYWQ6On5BdXRvbWF0aWNUaHJlYWQo
KQogICAgIG1fY29uZGl0aW9uLT5yZW1vdmUobG9ja2VyLCB0aGlzKTsKIH0KIAotYm9vbCBBdXRv
bWF0aWNUaHJlYWQ6OnRyeVN0b3AoY29uc3QgQWJzdHJhY3RMb2NrZXImKQorYm9vbCBBdXRvbWF0
aWNUaHJlYWQ6OnRyeVN0b3AoY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgaWYgKCFtX2lzUnVu
bmluZykKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMjgsMTIgKzEyOCwxMiBAQCBib29sIEF1
dG9tYXRpY1RocmVhZDo6dHJ5U3RvcChjb25zdCBBYnN0cmFjdExvY2tlciYpCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgQXV0b21hdGljVGhyZWFkOjppc1dhaXRpbmcoY29uc3QgQWJzdHJh
Y3RMb2NrZXImIGxvY2tlcikKK2Jvb2wgQXV0b21hdGljVGhyZWFkOjppc1dhaXRpbmcoY29uc3Qg
TG9ja0hvbGRlciYgbG9ja2VyKQogewogICAgIHJldHVybiBoYXNVbmRlcmx5aW5nVGhyZWFkKGxv
Y2tlcikgJiYgbV9pc1dhaXRpbmc7CiB9CiAKLWJvb2wgQXV0b21hdGljVGhyZWFkOjpub3RpZnko
Y29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlcikKK2Jvb2wgQXV0b21hdGljVGhyZWFkOjpub3Rp
ZnkoY29uc3QgTG9ja0hvbGRlciYgbG9ja2VyKQogewogICAgIEFTU0VSVF9VTlVTRUQobG9ja2Vy
LCBoYXNVbmRlcmx5aW5nVGhyZWFkKGxvY2tlcikpOwogICAgIG1faXNXYWl0aW5nID0gZmFsc2U7
CkBAIC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBBdXRvbWF0aWNUaHJlYWQ6OmpvaW4oKQogICAgICAg
ICBtX2lzUnVubmluZ0NvbmRpdGlvbi53YWl0KCptX2xvY2spOwogfQogCi12b2lkIEF1dG9tYXRp
Y1RocmVhZDo6c3RhcnQoY29uc3QgQWJzdHJhY3RMb2NrZXImKQordm9pZCBBdXRvbWF0aWNUaHJl
YWQ6OnN0YXJ0KGNvbnN0IExvY2tIb2xkZXImKQogewogICAgIFJFTEVBU0VfQVNTRVJUKG1faXNS
dW5uaW5nKTsKICAgICAKQEAgLTE2OSwxOCArMTY5LDE4IEBAIHZvaWQgQXV0b21hdGljVGhyZWFk
OjpzdGFydChjb25zdCBBYnN0cmFjdExvY2tlciYpCiAgICAgICAgICAgICAgICAgQVNTRVJUKG1f
Y29uZGl0aW9uLT5jb250YWlucyhsb2NrZXIsIHRoaXMpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAotICAgICAgICAgICAgYXV0byBzdG9wSW1wbCA9IFsmXSAoY29uc3QgQWJzdHJhY3RM
b2NrZXImIGxvY2tlcikgeworICAgICAgICAgICAgYXV0byBzdG9wSW1wbCA9IFsmXSAoY29uc3Qg
TG9ja0hvbGRlciYgbG9ja2VyKSB7CiAgICAgICAgICAgICAgICAgdGhyZWFkLT50aHJlYWRJc1N0
b3BwaW5nKGxvY2tlcik7CiAgICAgICAgICAgICAgICAgdGhyZWFkLT5tX2hhc1VuZGVybHlpbmdU
aHJlYWQgPSBmYWxzZTsKICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGF1dG8gc3RvcFBlcm1hbmVudGx5ID0gWyZdIChjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2Vy
KSB7CisgICAgICAgICAgICBhdXRvIHN0b3BQZXJtYW5lbnRseSA9IFsmXSAoY29uc3QgTG9ja0hv
bGRlciYgbG9ja2VyKSB7CiAgICAgICAgICAgICAgICAgbV9pc1J1bm5pbmcgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICBtX2lzUnVubmluZ0NvbmRpdGlvbi5ub3RpZnlBbGwoKTsKICAgICAgICAg
ICAgICAgICBzdG9wSW1wbChsb2NrZXIpOwogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgYXV0byBzdG9wRm9yVGltZW91dCA9IFsmXSAoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImIGxvY2tlcikgeworICAgICAgICAgICAgYXV0byBzdG9wRm9yVGltZW91dCA9IFsmXSAoY29u
c3QgTG9ja0hvbGRlciYgbG9ja2VyKSB7CiAgICAgICAgICAgICAgICAgc3RvcEltcGwobG9ja2Vy
KTsKICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAKQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lk
IEF1dG9tYXRpY1RocmVhZDo6dGhyZWFkRGlkU3RhcnQoKQogewogfQogCi12b2lkIEF1dG9tYXRp
Y1RocmVhZDo6dGhyZWFkSXNTdG9wcGluZyhjb25zdCBBYnN0cmFjdExvY2tlciYpCit2b2lkIEF1
dG9tYXRpY1RocmVhZDo6dGhyZWFkSXNTdG9wcGluZyhjb25zdCBMb2NrSG9sZGVyJikKIHsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQXV0b21hdGljVGhyZWFkLmggYi9Tb3VyY2Uv
V1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuaAppbmRleCBlYzZiYTQzOGZkZTFhZTQyNzU2ZjQzMjcx
YTcwMjNmNjU1ODY3NTBlLi42OTI2ZjYyMzY1M2Q0YzU5MjEzNzBjYzRkOWNlYzhkMDZjMzNlZGE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9BdXRvbWF0aWNUaHJlYWQuaApAQCAtNzUsOCArNzUsOCBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5BdXRvbWF0aWNUaHJlYWRDb25kaXRpb24oKTsK
ICAgICAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBub3RpZnlPbmUoY29uc3QgQWJzdHJh
Y3RMb2NrZXImKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBub3RpZnlBbGwoY29uc3Qg
QWJzdHJhY3RMb2NrZXImKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBub3RpZnlPbmUo
Y29uc3QgTG9ja0hvbGRlciYpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIG5vdGlmeUFs
bChjb25zdCBMb2NrSG9sZGVyJik7CiAgICAgCiAgICAgLy8gWW91IGNhbiByZXVzZSB0aGlzIGNv
bmRpdGlvbiBmb3Igb3RoZXIgdGhpbmdzLCBqdXN0IGFzIHlvdSB3b3VsZCBhbnkgb3RoZXIgY29u
ZGl0aW9uLgogICAgIC8vIEhvd2V2ZXIsIHNpbmNlIGNvbmZsYXRpbmcgY29uZGl0aW9ucyBjb3Vs
ZCBsZWFkIHRvIHRodW5kZXJpbmcgaGVyZCwgaXQncyBiZXN0IHRvIGF2b2lkIGl0LgpAQCAtOTAs
OSArOTAsOSBAQCBwcml2YXRlOgogICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBBdXRvbWF0
aWNUaHJlYWRDb25kaXRpb24oKTsKIAotICAgIHZvaWQgYWRkKGNvbnN0IEFic3RyYWN0TG9ja2Vy
JiwgQXV0b21hdGljVGhyZWFkKik7Ci0gICAgdm9pZCByZW1vdmUoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImLCBBdXRvbWF0aWNUaHJlYWQqKTsKLSAgICBib29sIGNvbnRhaW5zKGNvbnN0IEFic3RyYWN0
TG9ja2VyJiwgQXV0b21hdGljVGhyZWFkKik7CisgICAgdm9pZCBhZGQoY29uc3QgTG9ja0hvbGRl
ciYsIEF1dG9tYXRpY1RocmVhZCopOworICAgIHZvaWQgcmVtb3ZlKGNvbnN0IExvY2tIb2xkZXIm
LCBBdXRvbWF0aWNUaHJlYWQqKTsKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IExvY2tIb2xkZXIm
LCBBdXRvbWF0aWNUaHJlYWQqKTsKICAgICAKICAgICBDb25kaXRpb24gbV9jb25kaXRpb247CiAg
ICAgVmVjdG9yPEF1dG9tYXRpY1RocmVhZCo+IG1fdGhyZWFkczsKQEAgLTExMywyNCArMTEzLDI0
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BdXRvbWF0aWNUaHJlYWQoKTsKICAgICAKICAgICAv
LyBTb21ldGltZXMgaXQncyBwb3NzaWJsZSB0byBvcHRpbWl6ZSBmb3IgdGhlIGNhc2UgdGhhdCB0
aGVyZSBpcyBubyB1bmRlcmx5aW5nIHRocmVhZC4KLSAgICBib29sIGhhc1VuZGVybHlpbmdUaHJl
YWQoY29uc3QgQWJzdHJhY3RMb2NrZXImKSBjb25zdCB7IHJldHVybiBtX2hhc1VuZGVybHlpbmdU
aHJlYWQ7IH0KKyAgICBib29sIGhhc1VuZGVybHlpbmdUaHJlYWQoY29uc3QgTG9ja0hvbGRlciYp
IGNvbnN0IHsgcmV0dXJuIG1faGFzVW5kZXJseWluZ1RocmVhZDsgfQogICAgIAogICAgIC8vIFRo
aXMgYXR0ZW1wdHMgdG8gcXVpY2tseSBzdG9wIHRoZSB0aHJlYWQuIFRoaXMgd2lsbCBzdWNjZWVk
IGlmIHRoZSB0aHJlYWQgaGFwcGVucyB0byBub3QgYmUKICAgICAvLyBydW5uaW5nLiBSZXR1cm5z
IHRydWUgaWYgdGhlIHRocmVhZCBoYXMgYmVlbiBzdG9wcGVkLiBBIGdvb2QgaWRpb20gZm9yIHN0
b3BwaW5nIHlvdXIgYXV0b21hdGljCiAgICAgLy8gdGhyZWFkIGlzIHRvIGZpcnN0IHRyeSB0aGlz
LCBhbmQgaWYgdGhhdCBkb2Vzbid0IHdvcmssIHRvIHRlbGwgdGhlIHRocmVhZCB1c2luZyB5b3Vy
IG93bgogICAgIC8vIG1lY2hhbmlzbSAoc2V0IHNvbWUgZmxhZyBhbmQgdGhlbiBub3RpZnkgdGhl
IGNvbmRpdGlvbikuCi0gICAgYm9vbCB0cnlTdG9wKGNvbnN0IEFic3RyYWN0TG9ja2VyJik7Cisg
ICAgYm9vbCB0cnlTdG9wKGNvbnN0IExvY2tIb2xkZXImKTsKIAotICAgIGJvb2wgaXNXYWl0aW5n
KGNvbnN0IEFic3RyYWN0TG9ja2VyJik7CisgICAgYm9vbCBpc1dhaXRpbmcoY29uc3QgTG9ja0hv
bGRlciYpOwogCi0gICAgYm9vbCBub3RpZnkoY29uc3QgQWJzdHJhY3RMb2NrZXImKTsKKyAgICBi
b29sIG5vdGlmeShjb25zdCBMb2NrSG9sZGVyJik7CiAKICAgICB2b2lkIGpvaW4oKTsKICAgICAK
IHByb3RlY3RlZDoKICAgICAvLyBUaGlzIGxvZ2ljYWxseSBjcmVhdGVzIHRoZSB0aHJlYWQsIGJ1
dCBpbiByZWFsaXR5IHRoZSB0aHJlYWQgd29uJ3QgYmUgY3JlYXRlZCB1bnRpbCBzb21lb25lCiAg
ICAgLy8gY2FsbHMgQXV0b21hdGljVGhyZWFkQ29uZGl0aW9uOjpub3RpZnlPbmUoKSBvciBub3Rp
ZnlBbGwoKS4KLSAgICBBdXRvbWF0aWNUaHJlYWQoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBCb3g8
TG9jaz4sIFJlZlB0cjxBdXRvbWF0aWNUaHJlYWRDb25kaXRpb24+KTsKKyAgICBBdXRvbWF0aWNU
aHJlYWQoY29uc3QgTG9ja0hvbGRlciYsIEJveDxMb2NrPiwgUmVmUHRyPEF1dG9tYXRpY1RocmVh
ZENvbmRpdGlvbj4pOwogICAgIAogICAgIC8vIFRvIHVuZGVyc3RhbmQgUG9sbFJlc3VsdCBhbmQg
V29ya1Jlc3VsdCwgaW1hZ2luZSB0aGF0IHBvbGwoKSBhbmQgd29yaygpIGFyZSBiZWluZyBjYWxs
ZWQgbGlrZQogICAgIC8vIHNvOgpAQCAtMTU5LDcgKzE1OSw3IEBAIHByb3RlY3RlZDoKICAgICAv
LyB9CiAgICAgCiAgICAgZW51bSBjbGFzcyBQb2xsUmVzdWx0IHsgV29yaywgU3RvcCwgV2FpdCB9
OwotICAgIHZpcnR1YWwgUG9sbFJlc3VsdCBwb2xsKGNvbnN0IEFic3RyYWN0TG9ja2VyJikgPSAw
OworICAgIHZpcnR1YWwgUG9sbFJlc3VsdCBwb2xsKGNvbnN0IExvY2tIb2xkZXImKSA9IDA7CiAg
ICAgCiAgICAgZW51bSBjbGFzcyBXb3JrUmVzdWx0IHsgQ29udGludWUsIFN0b3AgfTsKICAgICB2
aXJ0dWFsIFdvcmtSZXN1bHQgd29yaygpID0gMDsKQEAgLTE2OCwxMiArMTY4LDEyIEBAIHByb3Rl
Y3RlZDoKICAgICAvLyB3aGVuIHRoZSB0aHJlYWQgZGllcy4gVGhlc2UgbWV0aG9kcyBsZXQgeW91
IGRvIHRoaXMuIFlvdSBjYW4gb3ZlcnJpZGUgdGhlc2UgbWV0aG9kcywgYW5kIHlvdQogICAgIC8v
IGNhbiBiZSBzdXJlIHRoYXQgdGhlIGRlZmF1bHQgb25lcyBkb24ndCBkbyBhbnl0aGluZyAoc28g
eW91IGRvbid0IG5lZWQgYSBzdXBlciBjYWxsKS4KICAgICB2aXJ0dWFsIHZvaWQgdGhyZWFkRGlk
U3RhcnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdGhyZWFkSXNTdG9wcGluZyhjb25zdCBBYnN0cmFj
dExvY2tlciYpOworICAgIHZpcnR1YWwgdm9pZCB0aHJlYWRJc1N0b3BwaW5nKGNvbnN0IExvY2tI
b2xkZXImKTsKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEF1dG9tYXRpY1RocmVh
ZENvbmRpdGlvbjsKICAgICAKLSAgICB2b2lkIHN0YXJ0KGNvbnN0IEFic3RyYWN0TG9ja2VyJik7
CisgICAgdm9pZCBzdGFydChjb25zdCBMb2NrSG9sZGVyJik7CiAgICAgCiAgICAgQm94PExvY2s+
IG1fbG9jazsKICAgICBSZWZQdHI8QXV0b21hdGljVGhyZWFkQ29uZGl0aW9uPiBtX2NvbmRpdGlv
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL051bWJlck9mQ29yZXMuY3BwIGIvU291cmNl
L1dURi93dGYvTnVtYmVyT2ZDb3Jlcy5jcHAKaW5kZXggZTY1N2JiMDc3NmNjNDgwM2VkMDI2OTk0
YzZjOTk2OWRkOTU2NDc2Ni4uNTgwNTQ0NjlkNjNjOWQ5M2FkYjkwNzlhODYxZDI5MmMxNmM3OTgw
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTnVtYmVyT2ZDb3Jlcy5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvTnVtYmVyT2ZDb3Jlcy5jcHAKQEAgLTQ3LDE1ICs0Nyw2IEBAIGludCBudW1i
ZXJPZlByb2Nlc3NvckNvcmVzKCkKIAogICAgIGlmIChzX251bWJlck9mQ29yZXMgPiAwKQogICAg
ICAgICByZXR1cm4gc19udW1iZXJPZkNvcmVzOwotICAgIAotICAgIGlmIChjb25zdCBjaGFyKiBj
b3Jlc0VudiA9IGdldGVudigiV1RGX251bWJlck9mUHJvY2Vzc29yQ29yZXMiKSkgewotICAgICAg
ICB1bnNpZ25lZCBudW1iZXJPZkNvcmVzOwotICAgICAgICBpZiAoc3NjYW5mKGNvcmVzRW52LCAi
JXUiLCAmbnVtYmVyT2ZDb3JlcykgPT0gMSkgewotICAgICAgICAgICAgc19udW1iZXJPZkNvcmVz
ID0gbnVtYmVyT2ZDb3JlczsKLSAgICAgICAgICAgIHJldHVybiBzX251bWJlck9mQ29yZXM7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJXQVJOSU5HOiBmYWls
ZWQgdG8gcGFyc2UgV1RGX251bWJlck9mUHJvY2Vzc29yQ29yZXM9JXNcbiIsIGNvcmVzRW52KTsK
LSAgICB9CiAKICNpZiBPUyhEQVJXSU4pCiAgICAgdW5zaWduZWQgcmVzdWx0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvUGFyYWxsZWxIZWxwZXJQb29sLmNwcCBiL1NvdXJjZS9XVEYvd3Rm
L1BhcmFsbGVsSGVscGVyUG9vbC5jcHAKaW5kZXggOGQwZjllNGIzMTAwODRiZTg0MWIzY2Y1ZDRi
NzlmMDIxY2EzMGJkYy4uOTQ5MmZkZGRmMTk2NDlkNjViNTEwYjFlNDNjMDJhYTk1MTRjMDczMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGFyYWxsZWxIZWxwZXJQb29sLmNwcAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODgsMTQgKzg4LDE0IEBA
IHZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OnJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQgKCk+PiB0YXNrKQogICAgIGZpbmlzaCgpOwogfQogCi12b2lkIFBhcmFsbGVs
SGVscGVyQ2xpZW50OjpmaW5pc2goY29uc3QgQWJzdHJhY3RMb2NrZXImKQordm9pZCBQYXJhbGxl
bEhlbHBlckNsaWVudDo6ZmluaXNoKGNvbnN0IExvY2tIb2xkZXImKQogewogICAgIG1fdGFzayA9
IG51bGxwdHI7CiAgICAgd2hpbGUgKG1fbnVtQWN0aXZlKQogICAgICAgICBtX3Bvb2wtPm1fd29y
a0NvbXBsZXRlQ29uZGl0aW9uLndhaXQoKm1fcG9vbC0+bV9sb2NrKTsKIH0KIAotUmVmUHRyPFNo
YXJlZFRhc2s8dm9pZCAoKT4+IFBhcmFsbGVsSGVscGVyQ2xpZW50OjpjbGFpbVRhc2soY29uc3Qg
QWJzdHJhY3RMb2NrZXImKQorUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCAoKT4+IFBhcmFsbGVsSGVs
cGVyQ2xpZW50OjpjbGFpbVRhc2soY29uc3QgTG9ja0hvbGRlciYpCiB7CiAgICAgaWYgKCFtX3Rh
c2spCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTcwLDE0ICsxNzAsMTQgQEAgdm9pZCBQ
YXJhbGxlbEhlbHBlclBvb2w6OmRvU29tZUhlbHBpbmcoKQogCiBjbGFzcyBQYXJhbGxlbEhlbHBl
clBvb2w6OlRocmVhZCA6IHB1YmxpYyBBdXRvbWF0aWNUaHJlYWQgewogcHVibGljOgotICAgIFRo
cmVhZChjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCBQYXJhbGxlbEhlbHBlclBvb2wmIHBv
b2wpCisgICAgVGhyZWFkKGNvbnN0IExvY2tIb2xkZXImIGxvY2tlciwgUGFyYWxsZWxIZWxwZXJQ
b29sJiBwb29sKQogICAgICAgICA6IEF1dG9tYXRpY1RocmVhZChsb2NrZXIsIHBvb2wubV9sb2Nr
LCBwb29sLm1fd29ya0F2YWlsYWJsZUNvbmRpdGlvbikKICAgICAgICAgLCBtX3Bvb2wocG9vbCkK
ICAgICB7CiAgICAgfQogICAgIAogcHJvdGVjdGVkOgotICAgIFBvbGxSZXN1bHQgcG9sbChjb25z
dCBBYnN0cmFjdExvY2tlciYgbG9ja2VyKSBvdmVycmlkZQorICAgIFBvbGxSZXN1bHQgcG9sbChj
b25zdCBMb2NrSG9sZGVyJiBsb2NrZXIpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBpZiAobV9w
b29sLm1faXNEeWluZykKICAgICAgICAgICAgIHJldHVybiBQb2xsUmVzdWx0OjpTdG9wOwpAQCAt
MjAzLDE5ICsyMDMsMTkgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkICgp
Pj4gbV90YXNrOwogfTsKIAotdm9pZCBQYXJhbGxlbEhlbHBlclBvb2w6OmRpZE1ha2VXb3JrQXZh
aWxhYmxlKGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIpCit2b2lkIFBhcmFsbGVsSGVscGVy
UG9vbDo6ZGlkTWFrZVdvcmtBdmFpbGFibGUoY29uc3QgTG9ja0hvbGRlciYgbG9ja2VyKQogewog
ICAgIHdoaWxlIChtX251bVRocmVhZHMgPiBtX3RocmVhZHMuc2l6ZSgpKQogICAgICAgICBtX3Ro
cmVhZHMuYXBwZW5kKGFkb3B0UmVmKG5ldyBUaHJlYWQobG9ja2VyLCAqdGhpcykpKTsKICAgICBt
X3dvcmtBdmFpbGFibGVDb25kaXRpb24tPm5vdGlmeUFsbChsb2NrZXIpOwogfQogCi1ib29sIFBh
cmFsbGVsSGVscGVyUG9vbDo6aGFzQ2xpZW50V2l0aFRhc2soY29uc3QgQWJzdHJhY3RMb2NrZXIm
IGxvY2tlcikKK2Jvb2wgUGFyYWxsZWxIZWxwZXJQb29sOjpoYXNDbGllbnRXaXRoVGFzayhjb25z
dCBMb2NrSG9sZGVyJiBsb2NrZXIpCiB7CiAgICAgcmV0dXJuICEhZ2V0Q2xpZW50V2l0aFRhc2so
bG9ja2VyKTsKIH0KIAotUGFyYWxsZWxIZWxwZXJDbGllbnQqIFBhcmFsbGVsSGVscGVyUG9vbDo6
Z2V0Q2xpZW50V2l0aFRhc2soY29uc3QgQWJzdHJhY3RMb2NrZXImKQorUGFyYWxsZWxIZWxwZXJD
bGllbnQqIFBhcmFsbGVsSGVscGVyUG9vbDo6Z2V0Q2xpZW50V2l0aFRhc2soY29uc3QgTG9ja0hv
bGRlciYpCiB7CiAgICAgLy8gV2UgbG9hZC1iYWxhbmNlIGJ5IGJlaW5nIHJhbmRvbS4KICAgICB1
bnNpZ25lZCBzdGFydEluZGV4ID0gbV9yYW5kb20uZ2V0VWludDMyKG1fY2xpZW50cy5zaXplKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGFyYWxsZWxIZWxwZXJQb29sLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaAppbmRleCAyMTg1OWNiMmI5YjA4NzAyMjQ0
ODE4NmVmOWJjMzkxMDZiZTkwZmMwLi44MTYzNWJiNzgxOTAwM2FjOWQ3ZjRhNjgxY2M1NTQ0ZTkw
ZGE3ZDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2OCw4ICsxNjgs
OCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbEhlbHBlclBv
b2w7CiAKLSAgICB2b2lkIGZpbmlzaChjb25zdCBBYnN0cmFjdExvY2tlciYpOwotICAgIFJlZlB0
cjxTaGFyZWRUYXNrPHZvaWQgKCk+PiBjbGFpbVRhc2soY29uc3QgQWJzdHJhY3RMb2NrZXImKTsK
KyAgICB2b2lkIGZpbmlzaChjb25zdCBMb2NrSG9sZGVyJik7CisgICAgUmVmUHRyPFNoYXJlZFRh
c2s8dm9pZCAoKT4+IGNsYWltVGFzayhjb25zdCBMb2NrSG9sZGVyJik7CiAgICAgdm9pZCBydW5U
YXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQgKCk+Pik7CiAgICAgCiAgICAgUmVmUHRyPFBhcmFs
bGVsSGVscGVyUG9vbD4gbV9wb29sOwpAQCAtMTkzLDExICsxOTMsMTEgQEAgcHJpdmF0ZToKICAg
ICBjbGFzcyBUaHJlYWQ7CiAgICAgZnJpZW5kIGNsYXNzIFRocmVhZDsKIAotICAgIHZvaWQgZGlk
TWFrZVdvcmtBdmFpbGFibGUoY29uc3QgQWJzdHJhY3RMb2NrZXImKTsKKyAgICB2b2lkIGRpZE1h
a2VXb3JrQXZhaWxhYmxlKGNvbnN0IExvY2tIb2xkZXImKTsKIAotICAgIGJvb2wgaGFzQ2xpZW50
V2l0aFRhc2soY29uc3QgQWJzdHJhY3RMb2NrZXImKTsKLSAgICBQYXJhbGxlbEhlbHBlckNsaWVu
dCogZ2V0Q2xpZW50V2l0aFRhc2soY29uc3QgQWJzdHJhY3RMb2NrZXImKTsKLSAgICBQYXJhbGxl
bEhlbHBlckNsaWVudCogd2FpdEZvckNsaWVudFdpdGhUYXNrKGNvbnN0IEFic3RyYWN0TG9ja2Vy
Jik7CisgICAgYm9vbCBoYXNDbGllbnRXaXRoVGFzayhjb25zdCBMb2NrSG9sZGVyJik7CisgICAg
UGFyYWxsZWxIZWxwZXJDbGllbnQqIGdldENsaWVudFdpdGhUYXNrKGNvbnN0IExvY2tIb2xkZXIm
KTsKKyAgICBQYXJhbGxlbEhlbHBlckNsaWVudCogd2FpdEZvckNsaWVudFdpdGhUYXNrKGNvbnN0
IExvY2tIb2xkZXImKTsKICAgICAKICAgICBCb3g8TG9jaz4gbV9sb2NrOyAvLyBBdXRvbWF0aWNU
aHJlYWQgd2FudHMgdGhpcyBpbiBhIGJveCBmb3Igc2FmZXR5LgogICAgIFJlZlB0cjxBdXRvbWF0
aWNUaHJlYWRDb25kaXRpb24+IG1fd29ya0F2YWlsYWJsZUNvbmRpdGlvbjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL2hlYXAvR0NGaW5hbGl6YXRpb25DYWxs
YmFjay5oIGIvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVhcC9HQ0ZpbmFsaXph
dGlvbkNhbGxiYWNrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3NWFjN2UzMWMw
ZjJmZmE0YjY3YjQ5N2IyYjA5MTNhYzVlMjljNGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvaGVh
cC9HQ0ZpbmFsaXphdGlvbkNhbGxiYWNrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAK
LSNwcmFnbWEgb25jZQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0dDRmluYWxpemF0aW9uQ2Fs
bGJhY2suaD4KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMv
aGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL2hlYXAvSW5jcmVtZW50YWxTd2VlcGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGY1MmViZGVhMGYwZmMwYzZiNWRlMDcwYWNhM2VkODMwNzRhODkzYWIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvRm9yd2Fy
ZGluZ0hlYWRlcnMvaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuaAorKysgL2Rldi9udWxsCkBAIC0x
LDIgKzAsMCBAQAotI3ByYWdtYSBvbmNlCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5jcmVt
ZW50YWxTd2VlcGVyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oIGIvU291cmNlL1dlYkNvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMvaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZmI4MGI1N2IxMzViNDk4NTQ1NjBlYTQzNDQ1NmUwMDc4MmNlOTA5OS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy9oZWFwL01hY2hpbmVTdGFja01hcmtlci5oCisrKyAvZGV2L251bGwK
QEAgLTEsMiArMCwwIEBACi0jcHJhZ21hIG9uY2UKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9N
YWNoaW5lU3RhY2tNYXJrZXIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRp
bmdIZWFkZXJzL2hlYXAvUnVubmluZ1Njb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5n
SGVhZGVycy9oZWFwL1J1bm5pbmdTY29wZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwNWNiYjA4ZWY0OTAxNjM4MjBlMzUyOGY2YWNhOTIxOWU5NzcwNTM5Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL0ZvcndhcmRp
bmdIZWFkZXJzL2hlYXAvUnVubmluZ1Njb3BlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAg
QEAKLSNwcmFnbWEgb25jZQotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1J1bm5pbmdTY29wZS5o
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ29tbW9uVk0uY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ29tbW9uVk0uY3BwCmluZGV4IDAxODdlMTljOWE2
ODY0ZDhmZDk3YTlmZjYxZDZkMDAxZDRjMzg2YTUuLjczMzhkMGZjNTE5MTYxZGRhMTk2MjljOGVk
ZTk4NGNiZGEzODhhZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0Nv
bW1vblZNLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Db21tb25WTS5jcHAK
QEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIldlYkNv
cmVKU0NsaWVudERhdGEuaCIKICNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSAiaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuaCIKICNpbmNsdWRlIDxydW50aW1lL1ZNLmg+CiAj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJp
bmcuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCA5M2UwYWEzMDdiYmUw
ODQ4NTRhNTc5YjQ1ZTExNmUzYzIzNGQxZDYzLi42ZDI2ZDU1NmUzM2U5NWNhMWJiNDRiOGVkZjNh
ZTJiZmRhNThhMTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0xMzgs
OSArMTM4LDYgQEAKICNpbmNsdWRlICJXcml0aW5nRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiWE1M
SHR0cFJlcXVlc3QuaCIKICNpbmNsdWRlIDxieXRlY29kZS9Db2RlQmxvY2suaD4KLSNpbmNsdWRl
IDxoZWFwL0dDRmluYWxpemF0aW9uQ2FsbGJhY2suaD4KLSNpbmNsdWRlIDxoZWFwL0luY3JlbWVu
dGFsU3dlZXBlci5oPgotI2luY2x1ZGUgPGhlYXAvUnVubmluZ1Njb3BlLmg+CiAjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvckFnZW50QmFzZS5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFs
dWVzLmg+CkBAIC0yMzQsMTUgKzIzMSwxMCBAQAogI2luY2x1ZGUgIlF1aWNrTG9vay5oIgogI2Vu
ZGlmCiAKLXVzaW5nIEpTQzo6QXJnTGlzdDsKIHVzaW5nIEpTQzo6Q2FsbERhdGE7CiB1c2luZyBK
U0M6OkNhbGxUeXBlOwogdXNpbmcgSlNDOjpDb2RlQmxvY2s7Ci11c2luZyBKU0M6OkRlZmVyR0NG
b3JBV2hpbGU7Ci11c2luZyBKU0M6OkV4ZWNTdGF0ZTsKIHVzaW5nIEpTQzo6RnVuY3Rpb25FeGVj
dXRhYmxlOwotdXNpbmcgSlNDOjpHQ0ZpbmFsaXphdGlvbkNhbGxiYWNrOwotdXNpbmcgSlNDOjpI
ZWFwOwogdXNpbmcgSlNDOjpJZGVudGlmaWVyOwogdXNpbmcgSlNDOjpKU0Z1bmN0aW9uOwogdXNp
bmcgSlNDOjpKU0dsb2JhbE9iamVjdDsKQEAgLTI1MCwxMSArMjQyLDggQEAgdXNpbmcgSlNDOjpK
U09iamVjdDsKIHVzaW5nIEpTQzo6SlNWYWx1ZTsKIHVzaW5nIEpTQzo6TWFya2VkQXJndW1lbnRC
dWZmZXI7CiB1c2luZyBKU0M6OlByb3BlcnR5U2xvdDsKLXVzaW5nIEpTQzo6UnVubmluZ1Njb3Bl
OwogdXNpbmcgSlNDOjpTY3JpcHRFeGVjdXRhYmxlOwogdXNpbmcgSlNDOjpTdGFja1Zpc2l0b3I7
Ci11c2luZyBKU0M6OlN0cm9uZzsKLXVzaW5nIEpTQzo6Vk07CiAKIHVzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7CiAKQEAgLTE2OTQsOCArMTY4Myw4IEBAIHByaXZhdGU6CiAKIFN0cmluZyBJbnRl
cm5hbHM6OnBhcnNlck1ldGFEYXRhKEpTQzo6SlNWYWx1ZSBjb2RlKQogewotICAgIFZNJiB2bSA9
IGNvbnRleHREb2N1bWVudCgpLT52bSgpOwotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHZtLnRvcENh
bGxGcmFtZTsKKyAgICBKU0M6OlZNJiB2bSA9IGNvbnRleHREb2N1bWVudCgpLT52bSgpOworICAg
IEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdm0udG9wQ2FsbEZyYW1lOwogICAgIFNjcmlwdEV4ZWN1
dGFibGUqIGV4ZWN1dGFibGU7CiAKICAgICBpZiAoIWNvZGUgfHwgY29kZS5pc051bGwoKSB8fCBj
b2RlLmlzVW5kZWZpbmVkKCkpIHsKQEAgLTM1NDgsNyArMzUzNyw3IEBAIHZvaWQgSW50ZXJuYWxz
OjpzZXRTaG93QWxsUGx1Z2lucyhib29sIHNob3cpCiAKICNpZiBFTkFCTEUoUkVBREFCTEVfU1RS
RUFNX0FQSSkKIAotYm9vbCBJbnRlcm5hbHM6OmlzUmVhZGFibGVTdHJlYW1EaXN0dXJiZWQoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSBzdHJlYW0pCitib29sIEludGVybmFsczo6aXNSZWFkYWJs
ZVN0cmVhbURpc3R1cmJlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgc3RyZWFtKQog
ewogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdGF0ZS52bUVudHJ5R2xvYmFs
T2JqZWN0KCk7CiAgICAgSlNWTUNsaWVudERhdGEqIGNsaWVudERhdGEgPSBzdGF0aWNfY2FzdDxK
U1ZNQ2xpZW50RGF0YSo+KHN0YXRlLnZtKCkuY2xpZW50RGF0YSk7CkBAIC0zNzIzLDQ3ICszNzEy
LDQgQEAgdm9pZCBJbnRlcm5hbHM6OnNldEFzUnVubmluZ1VzZXJTY3JpcHRzKERvY3VtZW50JiBk
b2N1bWVudCkKICAgICAgICAgZG9jdW1lbnQucGFnZSgpLT5zZXRBc1J1bm5pbmdVc2VyU2NyaXB0
cygpOwogfQogCi1ib29sIEludGVybmFsczo6aXNHQ1J1bm5pbmcoRXhlY1N0YXRlJiBleGVjKQot
ewotICAgIHJldHVybiAhIWV4ZWMudm0oKS5oZWFwLmNvbGxlY3Rpb25TY29wZSgpOwotfQotCi12
b2lkIEludGVybmFsczo6YWRkR0NGaW5hbGl6YXRpb25DYWxsYmFjayhFeGVjU3RhdGUmIGV4ZWMs
IEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gZXhlYy52bSgpOwotICAgIFN0cm9uZzxK
U0M6OlVua25vd24+IGNhbGxiYWNrKHZtLCB2YWx1ZSk7Ci0gICAgU3Ryb25nPEpTR2xvYmFsT2Jq
ZWN0PiBnbG9iYWxPYmplY3Qodm0sIGV4ZWMubGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLSAgICBl
eGVjLnZtKCkuaGVhcC5hZGRGaW5hbGl6YXRpb25DYWxsYmFjaygKLSAgICAgICAgSlNDOjpjcmVh
dGVHQ0ZpbmFsaXphdGlvbkNhbGxiYWNrKAotICAgICAgICAgICAgWz1dIChHQ0ZpbmFsaXphdGlv
bkNhbGxiYWNrKiwgSGVhcCYpIG11dGFibGUgewotICAgICAgICAgICAgICAgIC8vIFRoaXMgY29k
ZSBpcyBiYXNpY2FsbHkgdW5zb3VuZC4gRXZlcnl0aGluZyBpbiBKU0MgYXNzdW1lcyB0aGF0IHNv
bWUgYWxsb2NhdGlvbnMsIGxpa2UKLSAgICAgICAgICAgICAgICAvLyBzdHJpbmcgYWxsb2NhdGlv
bnMsIGFyZSBwdXJlOiB0aGV5IGFyZW4ndCBnb2luZyB0byBjbG9iYmVyIHRoZSBoZWFwLiBTbywg
YW55IEpTIGNvZGUKLSAgICAgICAgICAgICAgICAvLyB5b3Ugc3VwcGx5IHRvIHRoaXMgY2FsbGJh
Y2sgYmV0dGVyIGJlIHN1cGVyIGNhcmVmdWwgdGhhdCBpdCBkb2Vzbid0IHZpb2xhdGUgdGhhdAot
ICAgICAgICAgICAgICAgIC8vIGFzc3VtcHRpb24gaW4gc29tZSBzY2FyeSB3YXkuIFRoaXMga2lu
ZCBvZiBoYWNrIGlzIHJlYWxseSBvbmx5IGFwcHJvcHJpYXRlIGZvciB0ZXN0Ci0gICAgICAgICAg
ICAgICAgLy8gY29kZS4KLSAgICAgICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKTsKLSAgICAgICAgICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgICAgICAgICAgICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKLSAg
ICAgICAgICAgICAgICBSdW5uaW5nU2NvcGUgcnVubmluZ1Njb3BlKHZtLmhlYXApOwotICAgICAg
ICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLSAgICAgICAg
ICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICAgICAgICAgICAgICBDYWxsVHlwZSBjYWxs
VHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoY2FsbGJhY2suZ2V0KCksIGNhbGxEYXRhKTsKLSAgICAg
ICAgICAgICAgICBKU0M6OmNhbGwoZXhlYywgY2FsbGJhY2suZ2V0KCksIGNhbGxUeXBlLCBjYWxs
RGF0YSwgSlNDOjpqc051bGwoKSwgQXJnTGlzdCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoc2Nv
cGUuZXhjZXB0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiV2FybmluZzog
Z290IGV4Y2VwdGlvbi5cbiIpOwotICAgICAgICAgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pKTsKLX0KLQotdm9pZCBJ
bnRlcm5hbHM6OnN0b3BTd2VlcGluZyhFeGVjU3RhdGUmIGV4ZWMpCi17Ci0gICAgZXhlYy52bSgp
LmhlYXAuc3dlZXBlcigpLT5zdG9wU3dlZXBpbmcoKTsKLX0KLQotdm9pZCBJbnRlcm5hbHM6OnN0
YXJ0U3dlZXBpbmcoRXhlY1N0YXRlJiBleGVjKQotewotICAgIGV4ZWMudm0oKS5oZWFwLnN3ZWVw
ZXIoKS0+c3RhcnRTd2VlcGluZygpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuaAppbmRleCA2MjI2NDVjNDcyZGY4YzIwZDVjYmQ2YWMwZGFi
ZmFhZTlmYmUwMDFjLi5mNWMwOGE4N2RmZDc4YTQ2ZTc2MDQwMWFjMzA5YWZhNDNjMzgzZDQ4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKQEAgLTUzMCwxMSArNTMwLDYgQEAgcHVibGlj
OgogI2VuZGlmCiAKICAgICB2b2lkIHNldEFzUnVubmluZ1VzZXJTY3JpcHRzKERvY3VtZW50Jik7
Ci0gICAgCi0gICAgYm9vbCBpc0dDUnVubmluZyhKU0M6OkV4ZWNTdGF0ZSYpOwotICAgIHZvaWQg
YWRkR0NGaW5hbGl6YXRpb25DYWxsYmFjayhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
Ci0gICAgdm9pZCBzdG9wU3dlZXBpbmcoSlNDOjpFeGVjU3RhdGUmKTsKLSAgICB2b2lkIHN0YXJ0
U3dlZXBpbmcoSlNDOjpFeGVjU3RhdGUmKTsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBJbnRl
cm5hbHMoRG9jdW1lbnQmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAppbmRleCBm
MTMxNjEyZmVmOTI5ZmZmOWFlNjlkYjdkNzZjZGI2ZmMxNzIxZWNkLi4xNTViNzBiNGFiZjc1NjQ1
YjE1MmQ4NjUxZDA4ZjQ4YTk1M2RhNDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
aWRsCkBAIC01MDQsOSArNTA0LDQgQEAgZW51bSBFdmVudFRocm90dGxpbmdCZWhhdmlvciB7CiAg
ICAgW0NhbGxXaXRoPURvY3VtZW50XSB2b2lkIHNldEFzUnVubmluZ1VzZXJTY3JpcHRzKCk7CiAK
ICAgICB2b2lkIGRpc2FibGVUaWxlU2l6ZVVwZGF0ZURlbGF5KCk7Ci0gICAgCi0gICAgW0NhbGxX
aXRoPVNjcmlwdFN0YXRlXSBib29sZWFuIGlzR0NSdW5uaW5nKCk7Ci0gICAgW0NhbGxXaXRoPVNj
cmlwdFN0YXRlXSB2b2lkIGFkZEdDRmluYWxpemF0aW9uQ2FsbGJhY2soYW55IGNhbGxiYWNrKTsK
LSAgICBbQ2FsbFdpdGg9U2NyaXB0U3RhdGVdIHZvaWQgc3RvcFN3ZWVwaW5nKCk7Ci0gICAgW0Nh
bGxXaXRoPVNjcmlwdFN0YXRlXSB2b2lkIHN0YXJ0U3dlZXBpbmcoKTsKIH07CmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDJjMWEzYzM0ZTliOGFh
OGVkZjI1NTRhMjg1NjcwMTI0MTNiYTAwYS4uNDliOTA0ZmYxMTU2Njc4MWQ4NjJhZTNmYTkyYTll
NDE2MDk2ZjEzOSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE3LTAyLTE5ICBDb21taXQgUXVldWUgIDxjb21taXQt
cXVldWVAd2Via2l0Lm9yZz4KKworICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjEy
NDY2LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4
NTc3CisKKyAgICAgICAgY2F1c2VzIGNyYXNoZXMgb24gQUFyY2g2NCBvbiBsaW51eCwgbWF5YmUg
aXQncyBjYXVzaW5nIGNyYXNoZXMKKyAgICAgICAgb24gaU9TIHRvbyAoUmVxdWVzdGVkIGJ5IHBp
emxvIG9uICN3ZWJraXQpLgorCisgICAgICAgIFJldmVydGVkIGNoYW5nZXNldDoKKworICAgICAg
ICAiVGhlIGNvbGxlY3RvciB0aHJlYWQgc2hvdWxkIG9ubHkgc3RhcnQgd2hlbiB0aGUgbXV0YXRv
cgorICAgICAgICBkb2Vzbid0IGhhdmUgaGVhcCBhY2Nlc3MiCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc3MzcKKyAgICAgICAgaHR0cDovL3RyYWMu
d2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjEyNDY2CisKIDIwMTctMDItMTcgIEFha2FzaCBKYWluICA8
YWFrYXNoX2phaW5AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBmYWlsdXJlIGZyb20gcjIxMjU3
OS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMgYi9Ub29s
cy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCmluZGV4IDA0MTcwMGVmNzFjZGUzY2YwZmQ3
ZDI3YjllYjZmNjU4YTFhOTg4MDMuLmMzNTA0MWRjOTZkMTIzODlmZTY3NGRjMWU3NjAzMWQzNzg0
NzA2OTUgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKKysr
IGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwpAQCAtMTQ2OCwxMSArMTQ2OCwx
MSBAQCBkZWYgcnVuTm9pc3lUZXN0Tm9GVEwKIGVuZAogCiBkZWYgcnVuTm9pc3lUZXN0Tm9DSklU
Ci0gICAgcnVuTm9pc3lUZXN0KCJmdGwtbm8tY2ppdCIsICItLXZhbGlkYXRlQnl0ZWNvZGU9dHJ1
ZSIsICItLXZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZT10cnVlIiwgKihGVExfT1BUSU9OUyArIE5P
X0NKSVRfT1BUSU9OUyArIENPTExFQ1RfQ09OVElOVU9VU0xZX09QVElPTlMpKQorICAgIHJ1bk5v
aXN5VGVzdCgiZnRsLW5vLWNqaXQiLCAiLS12YWxpZGF0ZUJ5dGVjb2RlPXRydWUiLCAiLS12YWxp
ZGF0ZUdyYXBoQXRFYWNoUGhhc2U9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElP
TlMpKQogZW5kCiAKIGRlZiBydW5Ob2lzeVRlc3RFYWdlck5vQ0pJVAotICAgIHJ1bk5vaXN5VGVz
dCgiZnRsLWVhZ2VyLW5vLWNqaXQiLCAiLS12YWxpZGF0ZUJ5dGVjb2RlPXRydWUiLCAiLS12YWxp
ZGF0ZUdyYXBoQXRFYWNoUGhhc2U9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElP
TlMgKyBFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9DT05USU5VT1VTTFlfT1BUSU9OUykpCisgICAg
cnVuTm9pc3lUZXN0KCJmdGwtZWFnZXItbm8tY2ppdCIsICItLXZhbGlkYXRlQnl0ZWNvZGU9dHJ1
ZSIsICItLXZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZT10cnVlIiwgKihGVExfT1BUSU9OUyArIE5P
X0NKSVRfT1BUSU9OUyArIEVBR0VSX09QVElPTlMpKQogZW5kCiAKIGRlZiBkZWZhdWx0UnVuTm9p
c3lUZXN0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggMjk4YjRlOTgyMjM0YzM2NjI5YWJjOWJjNjIyNWE5ODA3NzQ2NzA4Mi4u
MmUyMWFkMTUzNDg3YTA1Y2JiNzA0OTcxYzMyODdiZTQ1NjhjNzk4OSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE4IEBACisyMDE3LTAyLTE5ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9y
Zz4KKworICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjEyNDY2LgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4NTc3CisKKyAgICAgICAg
Y2F1c2VzIGNyYXNoZXMgb24gQUFyY2g2NCBvbiBsaW51eCwgbWF5YmUgaXQncyBjYXVzaW5nIGNy
YXNoZXMKKyAgICAgICAgb24gaU9TIHRvbyAoUmVxdWVzdGVkIGJ5IHBpemxvIG9uICN3ZWJraXQp
LgorCisgICAgICAgIFJldmVydGVkIGNoYW5nZXNldDoKKworICAgICAgICAiVGhlIGNvbGxlY3Rv
ciB0aHJlYWQgc2hvdWxkIG9ubHkgc3RhcnQgd2hlbiB0aGUgbXV0YXRvcgorICAgICAgICBkb2Vz
bid0IGhhdmUgaGVhcCBhY2Nlc3MiCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjc3MzcKKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFu
Z2VzZXQvMjEyNDY2CisKIDIwMTctMDItMTkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgR1RLKyBnYXJkZW5pbmcuIFJlYmFz
ZWxpbmUgZmFzdC92aXN1YWwtdmlld3BvcnQvcnViYmVyYmFuZGluZy12aWV3cG9ydC1yZWN0cy1l
eHRlbmRlZC1iYWNrZ3JvdW5kLmh0bWwgYWdhaW4uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9q
cy9kb20vZ2Mtc2xvdC12aXNpdG9yLXBhcmFsbGVsLWRyYWluLXBpbmdzLXJ1bmxvb3Atd2hlbi1k
b25lLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL2RvbS9nYy1zbG90LXZpc2l0b3ItcGFy
YWxsZWwtZHJhaW4tcGluZ3MtcnVubG9vcC13aGVuLWRvbmUtZXhwZWN0ZWQudHh0CmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODVlNDlmMjRkMWM5YmIyYjA2NDY3MzU1NzRhZDU3NmNl
MWY0MTVjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xh
eW91dFRlc3RzL2pzL2RvbS9nYy1zbG90LXZpc2l0b3ItcGFyYWxsZWwtZHJhaW4tcGluZ3MtcnVu
bG9vcC13aGVuLWRvbmUtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBA
Ci1UZXN0aW5nIGlmIHRoZSBHQyBTbG90VmlzaXRvciBwaW5ncyB0aGUgcnVubG9vcCB3aGVuIGRv
bmUuCi1SdW5uaW5nIDIwMCBpdGVyYXRpb25zIG9mIHNwbGF5Li4uCi1HQyBmaW5pc2hlZC4KLVRl
c3QgcGFzc2VkLgotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9kb20vZ2Mtc2xvdC12aXNp
dG9yLXBhcmFsbGVsLWRyYWluLXBpbmdzLXJ1bmxvb3Atd2hlbi1kb25lLmh0bWwgYi9MYXlvdXRU
ZXN0cy9qcy9kb20vZ2Mtc2xvdC12aXNpdG9yLXBhcmFsbGVsLWRyYWluLXBpbmdzLXJ1bmxvb3At
d2hlbi1kb25lLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNDRmN2JiMDMz
MjQyNWMwMDQ1NmM4ZmI2MmYxZGRhZDExNTEzMDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvanMvZG9tL2djLXNsb3QtdmlzaXRvci1w
YXJhbGxlbC1kcmFpbi1waW5ncy1ydW5sb29wLXdoZW4tZG9uZS5odG1sCisrKyAvZGV2L251bGwK
QEAgLTEsODk2ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhU
TUwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08L2hlYWQ+Ci08Ym9keT4KLTxzY3JpcHQ+Ci1mdW5j
dGlvbiBnZXRPckNyZWF0ZShpZCwgdGFnTmFtZSkKLXsKLSAgICB2YXIgZWxlbWVudCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKLSAgICBpZiAoZWxlbWVudCkKLSAgICAgICAgcmV0dXJu
IGVsZW1lbnQ7Ci0gICAgCi0gICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFn
TmFtZSk7Ci0gICAgZWxlbWVudC5pZCA9IGlkOwotICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5i
b2R5IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKLSAgICB2YXIgcmVmTm9kZSA9IHBhcmVu
dC5maXJzdENoaWxkOwotICAgIAotICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoZWxlbWVudCwgcmVm
Tm9kZSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci19Ci0KLWZ1bmN0aW9uIGRlYnVnKG1zZykKLXsK
LSAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICBnZXRP
ckNyZWF0ZSgiY29uc29sZSIsICJkaXYiKS5hcHBlbmRDaGlsZChzcGFuKTsgLy8gaW5zZXJ0IGl0
IGZpcnN0IHNvIFhIVE1MIGtub3dzIHRoZSBuYW1lc3BhY2UKLSAgICBzcGFuLmlubmVySFRNTCA9
IG1zZyArICc8YnIgLz4nOwotfQotCi1pZiAod2luZG93LnRlc3RSdW5uZXIpIHsKLSAgICB0ZXN0
UnVubmVyLmR1bXBBc1RleHQoKTsKLSAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKLX0K
LQotLy8gQ29weXJpZ2h0IDIwMTMgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLS8vIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gICAgICAgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLS8vICAgICAg
IGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZAotLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gICAgICAg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCi0vLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8v
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCi0vLyBQZXJmb3JtYW5jZS5ub3cgaXMgdXNl
ZCBpbiBsYXRlbmN5IGJlbmNobWFya3MsIHRoZSBmYWxsYmFjayBpcyBEYXRlLm5vdy4KLXZhciBw
ZXJmb3JtYW5jZSA9IHBlcmZvcm1hbmNlIHx8IHt9OwotcGVyZm9ybWFuY2Uubm93ID0gKGZ1bmN0
aW9uKCkgewotICByZXR1cm4gcGVyZm9ybWFuY2Uubm93ICAgICAgIHx8Ci0gICAgICAgICBwZXJm
b3JtYW5jZS5tb3pOb3cgICAgfHwKLSAgICAgICAgIHBlcmZvcm1hbmNlLm1zTm93ICAgICB8fAot
ICAgICAgICAgcGVyZm9ybWFuY2Uub05vdyAgICAgIHx8Ci0gICAgICAgICBwZXJmb3JtYW5jZS53
ZWJraXROb3cgfHwKLSAgICAgICAgIERhdGUubm93OwotfSkoKTsKLQotLy8gU2ltcGxlIGZyYW1l
d29yayBmb3IgcnVubmluZyB0aGUgYmVuY2htYXJrIHN1aXRlcyBhbmQKLS8vIGNvbXB1dGluZyBh
IHNjb3JlIGJhc2VkIG9uIHRoZSB0aW1pbmcgbWVhc3VyZW1lbnRzLgotCi0KLS8vIEEgYmVuY2ht
YXJrIGhhcyBhIG5hbWUgKHN0cmluZykgYW5kIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHJ1biB0
bwotLy8gZG8gdGhlIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50LiBUaGUgb3B0aW9uYWwgc2V0dXAg
YW5kIHRlYXJEb3duCi0vLyBhcmd1bWVudHMgYXJlIGZ1bmN0aW9ucyB0aGF0IHdpbGwgYmUgaW52
b2tlZCBiZWZvcmUgYW5kIGFmdGVyCi0vLyBydW5uaW5nIHRoZSBiZW5jaG1hcmssIGJ1dCB0aGUg
cnVubmluZyB0aW1lIG9mIHRoZXNlIGZ1bmN0aW9ucyB3aWxsCi0vLyBub3QgYmUgYWNjb3VudGVk
IGZvciBpbiB0aGUgYmVuY2htYXJrIHNjb3JlLgotZnVuY3Rpb24gQmVuY2htYXJrKG5hbWUsIGRv
V2FybXVwLCBkb0RldGVybWluaXN0aWMsIHJ1biwgc2V0dXAsIHRlYXJEb3duLCBsYXRlbmN5UmVz
dWx0LCBtaW5JdGVyYXRpb25zKSB7Ci0gIHRoaXMubmFtZSA9IG5hbWU7Ci0gIHRoaXMuZG9XYXJt
dXAgPSBkb1dhcm11cDsKLSAgdGhpcy5kb0RldGVybWluaXN0aWMgPSBkb0RldGVybWluaXN0aWM7
Ci0gIHRoaXMucnVuID0gcnVuOwotICB0aGlzLlNldHVwID0gc2V0dXAgPyBzZXR1cCA6IGZ1bmN0
aW9uKCkgeyB9OwotICB0aGlzLlRlYXJEb3duID0gdGVhckRvd24gPyB0ZWFyRG93biA6IGZ1bmN0
aW9uKCkgeyB9OwotICB0aGlzLmxhdGVuY3lSZXN1bHQgPSBsYXRlbmN5UmVzdWx0ID8gbGF0ZW5j
eVJlc3VsdCA6IG51bGw7IAotICB0aGlzLm1pbkl0ZXJhdGlvbnMgPSBtaW5JdGVyYXRpb25zID8g
bWluSXRlcmF0aW9ucyA6IDMyOwotfQotCi0KLS8vIEJlbmNobWFyayByZXN1bHRzIGhvbGQgdGhl
IGJlbmNobWFyayBhbmQgdGhlIG1lYXN1cmVkIHRpbWUgdXNlZCB0bwotLy8gcnVuIHRoZSBiZW5j
aG1hcmsuIFRoZSBiZW5jaG1hcmsgc2NvcmUgaXMgY29tcHV0ZWQgbGF0ZXIgb25jZSBhCi0vLyBm
dWxsIGJlbmNobWFyayBzdWl0ZSBoYXMgcnVuIHRvIGNvbXBsZXRpb24uIElmIGxhdGVuY3kgaXMg
c2V0IHRvIDAKLS8vIHRoZW4gdGhlcmUgaXMgbm8gbGF0ZW5jeSBzY29yZSBmb3IgdGhpcyBiZW5j
aG1hcmsuCi1mdW5jdGlvbiBCZW5jaG1hcmtSZXN1bHQoYmVuY2htYXJrLCB0aW1lLCBsYXRlbmN5
KSB7Ci0gIHRoaXMuYmVuY2htYXJrID0gYmVuY2htYXJrOwotICB0aGlzLnRpbWUgPSB0aW1lOwot
ICB0aGlzLmxhdGVuY3kgPSBsYXRlbmN5OwotfQotCi0KLS8vIEF1dG9tYXRpY2FsbHkgY29udmVy
dCByZXN1bHRzIHRvIG51bWJlcnMuIFVzZWQgYnkgdGhlIGdlb21ldHJpYwotLy8gbWVhbiBjb21w
dXRhdGlvbi4KLUJlbmNobWFya1Jlc3VsdC5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uKCkg
ewotICByZXR1cm4gdGhpcy50aW1lOwotfQotCi0KLS8vIFN1aXRlcyBvZiBiZW5jaG1hcmtzIGNv
bnNpc3Qgb2YgYSBuYW1lIGFuZCB0aGUgc2V0IG9mIGJlbmNobWFya3MgaW4KLS8vIGFkZGl0aW9u
IHRvIHRoZSByZWZlcmVuY2UgdGltaW5nIHRoYXQgdGhlIGZpbmFsIHNjb3JlIHdpbGwgYmUgYmFz
ZWQKLS8vIG9uLiBUaGlzIHdheSwgYWxsIHNjb3JlcyBhcmUgcmVsYXRpdmUgdG8gYSByZWZlcmVu
Y2UgcnVuIGFuZCBoaWdoZXIKLS8vIHNjb3JlcyBpbXBsaWVzIGJldHRlciBwZXJmb3JtYW5jZS4K
LWZ1bmN0aW9uIEJlbmNobWFya1N1aXRlKG5hbWUsIHJlZmVyZW5jZSwgYmVuY2htYXJrcykgewot
ICB0aGlzLm5hbWUgPSBuYW1lOwotICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTsKLSAgdGhp
cy5iZW5jaG1hcmtzID0gYmVuY2htYXJrczsKLSAgQmVuY2htYXJrU3VpdGUuc3VpdGVzLnB1c2go
dGhpcyk7Ci19Ci0KLQotLy8gS2VlcCB0cmFjayBvZiBhbGwgZGVjbGFyZWQgYmVuY2htYXJrIHN1
aXRlcy4KLUJlbmNobWFya1N1aXRlLnN1aXRlcyA9IFtdOwotCi0vLyBTY29yZXMgYXJlIG5vdCBj
b21wYXJhYmxlIGFjcm9zcyB2ZXJzaW9ucy4gQnVtcCB0aGUgdmVyc2lvbiBpZgotLy8geW91J3Jl
IG1ha2luZyBjaGFuZ2VzIHRoYXQgd2lsbCBhZmZlY3QgdGhhdCBzY29yZXMsIGUuZy4gaWYgeW91
IGFkZAotLy8gYSBuZXcgYmVuY2htYXJrIG9yIGNoYW5nZSBhbiBleGlzdGluZyBvbmUuCi1CZW5j
aG1hcmtTdWl0ZS52ZXJzaW9uID0gJzknOwotCi0vLyBPdmVycmlkZSB0aGUgYWxlcnQgZnVuY3Rp
b24gdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGluc3RlYWQuCi1hbGVydCA9IGZ1bmN0aW9uKHMpIHsK
LSAgdGhyb3cgIkFsZXJ0IGNhbGxlZCB3aXRoIGFyZ3VtZW50OiAiICsgczsKLX07Ci0KLQotLy8g
VG8gbWFrZSB0aGUgYmVuY2htYXJrIHJlc3VsdHMgcHJlZGljdGFibGUsIHdlIHJlcGxhY2UgTWF0
aC5yYW5kb20KLS8vIHdpdGggYSAxMDAlIGRldGVybWluaXN0aWMgYWx0ZXJuYXRpdmUuCi1CZW5j
aG1hcmtTdWl0ZS5SZXNldFJORyA9IGZ1bmN0aW9uKCkgewotICBNYXRoLnJhbmRvbSA9IChmdW5j
dGlvbigpIHsKLSAgICB2YXIgc2VlZCA9IDQ5NzM0MzIxOwotICAgIHJldHVybiBmdW5jdGlvbigp
IHsKLSAgICAgIC8vIFJvYmVydCBKZW5raW5zJyAzMiBiaXQgaW50ZWdlciBoYXNoIGZ1bmN0aW9u
LgotICAgICAgc2VlZCA9ICgoc2VlZCArIDB4N2VkNTVkMTYpICsgKHNlZWQgPDwgMTIpKSAgJiAw
eGZmZmZmZmZmOwotICAgICAgc2VlZCA9ICgoc2VlZCBeIDB4Yzc2MWMyM2MpIF4gKHNlZWQgPj4+
IDE5KSkgJiAweGZmZmZmZmZmOwotICAgICAgc2VlZCA9ICgoc2VlZCArIDB4MTY1NjY3YjEpICsg
KHNlZWQgPDwgNSkpICAgJiAweGZmZmZmZmZmOwotICAgICAgc2VlZCA9ICgoc2VlZCArIDB4ZDNh
MjY0NmMpIF4gKHNlZWQgPDwgOSkpICAgJiAweGZmZmZmZmZmOwotICAgICAgc2VlZCA9ICgoc2Vl
ZCArIDB4ZmQ3MDQ2YzUpICsgKHNlZWQgPDwgMykpICAgJiAweGZmZmZmZmZmOwotICAgICAgc2Vl
ZCA9ICgoc2VlZCBeIDB4YjU1YTRmMDkpIF4gKHNlZWQgPj4+IDE2KSkgJiAweGZmZmZmZmZmOwot
ICAgICAgcmV0dXJuIChzZWVkICYgMHhmZmZmZmZmKSAvIDB4MTAwMDAwMDA7Ci0gICAgfTsKLSAg
fSkoKTsKLX0KLQotCi0vLyBSdW5zIGFsbCByZWdpc3RlcmVkIGJlbmNobWFyayBzdWl0ZXMgYW5k
IG9wdGlvbmFsbHkgeWllbGRzIGJldHdlZW4KLS8vIGVhY2ggaW5kaXZpZHVhbCBiZW5jaG1hcmsg
dG8gYXZvaWQgcnVubmluZyBmb3IgdG9vIGxvbmcgaW4gdGhlCi0vLyBjb250ZXh0IG9mIGJyb3dz
ZXJzLiBPbmNlIGRvbmUsIHRoZSBmaW5hbCBzY29yZSBpcyByZXBvcnRlZCB0byB0aGUKLS8vIHJ1
bm5lci4KLUJlbmNobWFya1N1aXRlLlJ1blN1aXRlcyA9IGZ1bmN0aW9uKHJ1bm5lcikgewotICB2
YXIgY29udGludWF0aW9uID0gbnVsbDsKLSAgdmFyIHN1aXRlcyA9IEJlbmNobWFya1N1aXRlLnN1
aXRlczsKLSAgdmFyIGxlbmd0aCA9IHN1aXRlcy5sZW5ndGg7Ci0gIEJlbmNobWFya1N1aXRlLnNj
b3JlcyA9IFtdOwotICB2YXIgaW5kZXggPSAwOwotICBmdW5jdGlvbiBSdW5TdGVwKCkgewotICAg
IHdoaWxlIChjb250aW51YXRpb24gfHwgaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgIGlmIChjb250
aW51YXRpb24pIHsKLSAgICAgICAgY29udGludWF0aW9uID0gY29udGludWF0aW9uKCk7Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICB2YXIgc3VpdGUgPSBzdWl0ZXNbaW5kZXgrK107Ci0gICAgICAg
IGlmIChydW5uZXIuTm90aWZ5U3RhcnQpIHJ1bm5lci5Ob3RpZnlTdGFydChzdWl0ZS5uYW1lKTsK
LSAgICAgICAgY29udGludWF0aW9uID0gc3VpdGUuUnVuU3RlcChydW5uZXIpOwotICAgICAgfQot
ICAgICAgaWYgKGNvbnRpbnVhdGlvbiAmJiB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYm
IHdpbmRvdy5zZXRUaW1lb3V0KSB7Ci0gICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KFJ1blN0ZXAs
IDI1KTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIHNob3cgZmlu
YWwgcmVzdWx0Ci0gICAgaWYgKHJ1bm5lci5Ob3RpZnlTY29yZSkgewotICAgICAgdmFyIHNjb3Jl
ID0gQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhbihCZW5jaG1hcmtTdWl0ZS5zY29yZXMpOwot
ICAgICAgdmFyIGZvcm1hdHRlZCA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNjb3JlKDEwMCAqIHNj
b3JlKTsKLSAgICAgIHJ1bm5lci5Ob3RpZnlTY29yZShmb3JtYXR0ZWQpOwotICAgIH0KLSAgfQot
ICBSdW5TdGVwKCk7Ci19Ci0KLQotLy8gQ291bnRzIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVnaXN0
ZXJlZCBiZW5jaG1hcmtzLiBVc2VmdWwgZm9yCi0vLyBzaG93aW5nIHByb2dyZXNzIGFzIGEgcGVy
Y2VudGFnZS4KLUJlbmNobWFya1N1aXRlLkNvdW50QmVuY2htYXJrcyA9IGZ1bmN0aW9uKCkgewot
ICB2YXIgcmVzdWx0ID0gMDsKLSAgdmFyIHN1aXRlcyA9IEJlbmNobWFya1N1aXRlLnN1aXRlczsK
LSAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdWl0ZXMubGVuZ3RoOyBpKyspIHsKLSAgICByZXN1bHQg
Kz0gc3VpdGVzW2ldLmJlbmNobWFya3MubGVuZ3RoOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19
Ci0KLQotLy8gQ29tcHV0ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0IG9mIG51bWJlcnMu
Ci1CZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuID0gZnVuY3Rpb24obnVtYmVycykgewotICB2
YXIgbG9nID0gMDsKLSAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJzLmxlbmd0aDsgaSsrKSB7
Ci0gICAgbG9nICs9IE1hdGgubG9nKG51bWJlcnNbaV0pOwotICB9Ci0gIHJldHVybiBNYXRoLnBv
dyhNYXRoLkUsIGxvZyAvIG51bWJlcnMubGVuZ3RoKTsKLX0KLQotCi0vLyBDb21wdXRlcyB0aGUg
Z2VvbWV0cmljIG1lYW4gb2YgYSBzZXQgb2YgdGhyb3VnaHB1dCB0aW1lIG1lYXN1cmVtZW50cy4K
LUJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5UaW1lID0gZnVuY3Rpb24obWVhc3VyZW1lbnRz
KSB7Ci0gIHZhciBsb2cgPSAwOwotICBmb3IgKHZhciBpID0gMDsgaSA8IG1lYXN1cmVtZW50cy5s
ZW5ndGg7IGkrKykgewotICAgIGxvZyArPSBNYXRoLmxvZyhtZWFzdXJlbWVudHNbaV0udGltZSk7
Ci0gIH0KLSAgcmV0dXJuIE1hdGgucG93KE1hdGguRSwgbG9nIC8gbWVhc3VyZW1lbnRzLmxlbmd0
aCk7Ci19Ci0KLQotLy8gQ29tcHV0ZXMgdGhlIGF2ZXJhZ2Ugb2YgdGhlIHdvcnN0IHNhbXBsZXMu
IEZvciBleGFtcGxlLCBpZiBwZXJjZW50aWxlIGlzIDk5LCB0aGlzIHdpbGwgcmVwb3J0IHRoZQot
Ly8gYXZlcmFnZSBvZiB0aGUgd29yc3QgMSUgb2YgdGhlIHNhbXBsZXMuCi1CZW5jaG1hcmtTdWl0
ZS5BdmVyYWdlQWJvdmVQZXJjZW50aWxlID0gZnVuY3Rpb24obnVtYmVycywgcGVyY2VudGlsZSkg
ewotICAvLyBEb24ndCBjaGFuZ2UgdGhlIG9yaWdpbmFsIGFycmF5LgotICBudW1iZXJzID0gbnVt
YmVycy5zbGljZSgpOwotICAKLSAgLy8gU29ydCBpbiBhc2NlbmRpbmcgb3JkZXIuCi0gIG51bWJl
cnMuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBhIC0gYjsgfSk7Ci0gIAotICAvLyBOb3cg
dGhlIGVsZW1lbnRzIHdlIHdhbnQgYXJlIGF0IHRoZSBlbmQuIEtlZXAgcmVtb3ZpbmcgdGhlbSB1
bnRpbCB0aGUgYXJyYXkgc2l6ZSBzaHJpbmtzIHRvbyBtdWNoLgotICAvLyBFeGFtcGxlcyBhc3N1
bWluZyBwZXJjZW50aWxlID0gOTk6Ci0gIC8vCi0gIC8vIC0gbnVtYmVycy5sZW5ndGggc3RhcnRz
IGF0IDEwMDogd2Ugd2lsbCByZW1vdmUganVzdCB0aGUgd29yc3QgZW50cnkgYW5kIHRoZW4gbm90
IHJlbW92ZSBhbnltb3JlLAotICAvLyAgIHNpbmNlIHRoZW4gbnVtYmVycy5sZW5ndGggLyBvcmln
aW5hbExlbmd0aCA9IDAuOTkuCi0gIC8vCi0gIC8vIC0gbnVtYmVycy5sZW5ndGggc3RhcnRzIGF0
IDEwMDA6IHdlIHdpbGwgcmVtb3ZlIHRoZSB0ZW4gd29yc3QuCi0gIC8vCi0gIC8vIC0gbnVtYmVy
cy5sZW5ndGggc3RhcnRzIGF0IDEwOiB3ZSB3aWxsIHJlbW92ZSBqdXN0IHRoZSB3b3JzdC4KLSAg
dmFyIG51bWJlcnNXZVdhbnQgPSBbXTsKLSAgdmFyIG9yaWdpbmFsTGVuZ3RoID0gbnVtYmVycy5s
ZW5ndGg7Ci0gIHdoaWxlIChudW1iZXJzLmxlbmd0aCAvIG9yaWdpbmFsTGVuZ3RoID4gcGVyY2Vu
dGlsZSAvIDEwMCkKLSAgICBudW1iZXJzV2VXYW50LnB1c2gobnVtYmVycy5wb3AoKSk7Ci0gIAot
ICB2YXIgc3VtID0gMDsKLSAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJzV2VXYW50Lmxlbmd0
aDsgKytpKQotICAgIHN1bSArPSBudW1iZXJzV2VXYW50W2ldOwotICAKLSAgdmFyIHJlc3VsdCA9
IHN1bSAvIG51bWJlcnNXZVdhbnQubGVuZ3RoOwotICAKLSAgLy8gRG8gYSBzYW5pdHkgY2hlY2su
Ci0gIGlmIChudW1iZXJzLmxlbmd0aCAmJiByZXN1bHQgPCBudW1iZXJzW251bWJlcnMubGVuZ3Ro
IC0gMV0pIHsKLSAgICB0aHJvdyAiU2FuaXR5IGNoZWNrIGZhaWw6IHRoZSB3b3JzdCBjYXNlIHJl
c3VsdCBpcyAiICsgcmVzdWx0ICsKLSAgICAgICIgYnV0IHdlIGRpZG4ndCB0YWtlIGludG8gYWNj
b3VudCAiICsgbnVtYmVyczsKLSAgfQotICAKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotCi0vLyBD
b21wdXRlcyB0aGUgZ2VvbWV0cmljIG1lYW4gb2YgYSBzZXQgb2YgbGF0ZW5jeSBtZWFzdXJlbWVu
dHMuCi1CZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuTGF0ZW5jeSA9IGZ1bmN0aW9uKG1lYXN1
cmVtZW50cykgewotICB2YXIgbG9nID0gMDsKLSAgdmFyIGhhc0xhdGVuY3lSZXN1bHQgPSBmYWxz
ZTsKLSAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHsKLSAg
ICBpZiAobWVhc3VyZW1lbnRzW2ldLmxhdGVuY3kgIT0gMCkgewotICAgICAgbG9nICs9IE1hdGgu
bG9nKG1lYXN1cmVtZW50c1tpXS5sYXRlbmN5KTsKLSAgICAgIGhhc0xhdGVuY3lSZXN1bHQgPSB0
cnVlOwotICAgIH0KLSAgfQotICBpZiAoaGFzTGF0ZW5jeVJlc3VsdCkgewotICAgIHJldHVybiBN
YXRoLnBvdyhNYXRoLkUsIGxvZyAvIG1lYXN1cmVtZW50cy5sZW5ndGgpOwotICB9IGVsc2Ugewot
ICAgIHJldHVybiAwOwotICB9Ci19Ci0KLQotLy8gQ29udmVydHMgYSBzY29yZSB2YWx1ZSB0byBh
IHN0cmluZyB3aXRoIGF0IGxlYXN0IHRocmVlIHNpZ25pZmljYW50Ci0vLyBkaWdpdHMuCi1CZW5j
aG1hcmtTdWl0ZS5Gb3JtYXRTY29yZSA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA+
IDEwMCkgewotICAgIHJldHVybiB2YWx1ZS50b0ZpeGVkKDApOwotICB9IGVsc2UgewotICAgIHJl
dHVybiB2YWx1ZS50b1ByZWNpc2lvbigzKTsKLSAgfQotfQotCi0vLyBOb3RpZmllcyB0aGUgcnVu
bmVyIHRoYXQgd2UncmUgZG9uZSBydW5uaW5nIGEgc2luZ2xlIGJlbmNobWFyayBpbgotLy8gdGhl
IGJlbmNobWFyayBzdWl0ZS4gVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHJlcG9ydCBwcm9ncmVzcy4K
LUJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlTdGVwID0gZnVuY3Rpb24ocmVzdWx0KSB7
Ci0gIHRoaXMucmVzdWx0cy5wdXNoKHJlc3VsdCk7Ci0gIGlmICh0aGlzLnJ1bm5lci5Ob3RpZnlT
dGVwKSB0aGlzLnJ1bm5lci5Ob3RpZnlTdGVwKHJlc3VsdC5iZW5jaG1hcmsubmFtZSk7Ci19Ci0K
LQotLy8gTm90aWZpZXMgdGhlIHJ1bm5lciB0aGF0IHdlJ3JlIGRvbmUgd2l0aCBydW5uaW5nIGEg
c3VpdGUgYW5kIHRoYXQKLS8vIHdlIGhhdmUgYSByZXN1bHQgd2hpY2ggY2FuIGJlIHJlcG9ydGVk
IHRvIHRoZSB1c2VyIGlmIG5lZWRlZC4KLUJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlS
ZXN1bHQgPSBmdW5jdGlvbigpIHsKLSAgdmFyIG1lYW4gPSBCZW5jaG1hcmtTdWl0ZS5HZW9tZXRy
aWNNZWFuVGltZSh0aGlzLnJlc3VsdHMpOwotICB2YXIgc2NvcmUgPSB0aGlzLnJlZmVyZW5jZVsw
XSAvIG1lYW47Ci0gIEJlbmNobWFya1N1aXRlLnNjb3Jlcy5wdXNoKHNjb3JlKTsKLSAgaWYgKHRo
aXMucnVubmVyLk5vdGlmeVJlc3VsdCkgewotICAgIHZhciBmb3JtYXR0ZWQgPSBCZW5jaG1hcmtT
dWl0ZS5Gb3JtYXRTY29yZSgxMDAgKiBzY29yZSk7Ci0gICAgdGhpcy5ydW5uZXIuTm90aWZ5UmVz
dWx0KHRoaXMubmFtZSwgZm9ybWF0dGVkKTsKLSAgfQotICBpZiAodGhpcy5yZWZlcmVuY2UubGVu
Z3RoID09IDIpIHsKLSAgICB2YXIgbWVhbkxhdGVuY3kgPSBCZW5jaG1hcmtTdWl0ZS5HZW9tZXRy
aWNNZWFuTGF0ZW5jeSh0aGlzLnJlc3VsdHMpOwotICAgIGlmIChtZWFuTGF0ZW5jeSAhPSAwKSB7
Ci0gICAgICB2YXIgc2NvcmVMYXRlbmN5ID0gdGhpcy5yZWZlcmVuY2VbMV0gLyBtZWFuTGF0ZW5j
eTsKLSAgICAgIEJlbmNobWFya1N1aXRlLnNjb3Jlcy5wdXNoKHNjb3JlTGF0ZW5jeSk7Ci0gICAg
ICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5UmVzdWx0KSB7Ci0gICAgICAgIHZhciBmb3JtYXR0ZWRM
YXRlbmN5ID0gQmVuY2htYXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmVMYXRlbmN5KQot
ICAgICAgICB0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQodGhpcy5uYW1lICsgIkxhdGVuY3kiLCBm
b3JtYXR0ZWRMYXRlbmN5KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQotCi0vLyBOb3RpZmll
cyB0aGUgcnVubmVyIHRoYXQgcnVubmluZyBhIGJlbmNobWFyayByZXN1bHRlZCBpbiBhbiBlcnJv
ci4KLUJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlFcnJvciA9IGZ1bmN0aW9uKGVycm9y
KSB7Ci0gIGlmICh0aGlzLnJ1bm5lci5Ob3RpZnlFcnJvcikgewotICAgIHRoaXMucnVubmVyLk5v
dGlmeUVycm9yKHRoaXMubmFtZSwgZXJyb3IpOwotICB9Ci0gIGlmICh0aGlzLnJ1bm5lci5Ob3Rp
ZnlTdGVwKSB7Ci0gICAgdGhpcy5ydW5uZXIuTm90aWZ5U3RlcCh0aGlzLm5hbWUpOwotICB9Ci19
Ci0KLQotLy8gUnVucyBhIHNpbmdsZSBiZW5jaG1hcmsgZm9yIGF0IGxlYXN0IGEgc2Vjb25kIGFu
ZCBjb21wdXRlcyB0aGUKLS8vIGF2ZXJhZ2UgdGltZSBpdCB0YWtlcyB0byBydW4gYSBzaW5nbGUg
aXRlcmF0aW9uLgotQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLlJ1blNpbmdsZUJlbmNobWFyayA9
IGZ1bmN0aW9uKGJlbmNobWFyaywgZGF0YSkgewotICBmdW5jdGlvbiBNZWFzdXJlKGRhdGEpIHsK
LSAgICB2YXIgZWxhcHNlZCA9IDA7Ci0gICAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoKTsKLSAgCi0g
IC8vIFJ1biBlaXRoZXIgZm9yIDEgc2Vjb25kIG9yIGZvciB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlv
bnMgc3BlY2lmaWVkCi0gIC8vIGJ5IG1pbkl0ZXJhdGlvbnMsIGRlcGVuZGluZyBvbiB0aGUgY29u
ZmlnIGZsYWcgZG9EZXRlcm1pbmlzdGljLgotICAgIGZvciAodmFyIGkgPSAwOyAoYmVuY2htYXJr
LmRvRGV0ZXJtaW5pc3RpYyA/IAotICAgICAgaTxiZW5jaG1hcmsubWluSXRlcmF0aW9ucyA6IGVs
YXBzZWQgPCAxMDAwKTsgaSsrKSB7Ci0gICAgICBiZW5jaG1hcmsucnVuKCk7Ci0gICAgICBlbGFw
c2VkID0gbmV3IERhdGUoKSAtIHN0YXJ0OwotICAgIH0KLSAgICBpZiAoZGF0YSAhPSBudWxsKSB7
Ci0gICAgICBkYXRhLnJ1bnMgKz0gaTsKLSAgICAgIGRhdGEuZWxhcHNlZCArPSBlbGFwc2VkOwot
ICAgIH0KLSAgfQotCi0gIC8vIFNldHMgdXAgZGF0YSBpbiBvcmRlciB0byBza2lwIG9yIG5vdCB0
aGUgd2FybXVwIHBoYXNlLgotICBpZiAoIWJlbmNobWFyay5kb1dhcm11cCAmJiBkYXRhID09IG51
bGwpIHsKLSAgICBkYXRhID0geyBydW5zOiAwLCBlbGFwc2VkOiAwIH07Ci0gIH0KLQotICBpZiAo
ZGF0YSA9PSBudWxsKSB7Ci0gICAgTWVhc3VyZShudWxsKTsKLSAgICByZXR1cm4geyBydW5zOiAw
LCBlbGFwc2VkOiAwIH07Ci0gIH0gZWxzZSB7Ci0gICAgTWVhc3VyZShkYXRhKTsKLSAgICAvLyBJ
ZiB3ZSd2ZSBydW4gdG9vIGZldyBpdGVyYXRpb25zLCB3ZSBjb250aW51ZSBmb3IgYW5vdGhlciBz
ZWNvbmQuCi0gICAgaWYgKGRhdGEucnVucyA8IGJlbmNobWFyay5taW5JdGVyYXRpb25zKSByZXR1
cm4gZGF0YTsKLSAgICB2YXIgdXNlYyA9IChkYXRhLmVsYXBzZWQgKiAxMDAwKSAvIGRhdGEucnVu
czsKLSAgICB2YXIgbGF0ZW5jeVNhbXBsZXMgPSAoYmVuY2htYXJrLmxhdGVuY3lSZXN1bHQgIT0g
bnVsbCkgPyBiZW5jaG1hcmsubGF0ZW5jeVJlc3VsdCgpIDogWzBdOwotICAgIHZhciBwZXJjZW50
aWxlID0gOTkuNTsKLSAgICB2YXIgbGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92
ZVBlcmNlbnRpbGUobGF0ZW5jeVNhbXBsZXMsIHBlcmNlbnRpbGUpICogMTAwMDsKLSAgICB0aGlz
Lk5vdGlmeVN0ZXAobmV3IEJlbmNobWFya1Jlc3VsdChiZW5jaG1hcmssIHVzZWMsIGxhdGVuY3kp
KTsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotfQotCi0KLS8vIFRoaXMgZnVuY3Rpb24gc3RhcnRz
IHJ1bm5pbmcgYSBzdWl0ZSwgYnV0IHN0b3BzIGJldHdlZW4gZWFjaAotLy8gaW5kaXZpZHVhbCBi
ZW5jaG1hcmsgaW4gdGhlIHN1aXRlIGFuZCByZXR1cm5zIGEgY29udGludWF0aW9uCi0vLyBmdW5j
dGlvbiB3aGljaCBjYW4gYmUgaW52b2tlZCB0byBydW4gdGhlIG5leHQgYmVuY2htYXJrLiBPbmNl
IHRoZQotLy8gbGFzdCBiZW5jaG1hcmsgaGFzIGJlZW4gZXhlY3V0ZWQsIG51bGwgaXMgcmV0dXJu
ZWQuCi1CZW5jaG1hcmtTdWl0ZS5wcm90b3R5cGUuUnVuU3RlcCA9IGZ1bmN0aW9uKHJ1bm5lcikg
ewotICBCZW5jaG1hcmtTdWl0ZS5SZXNldFJORygpOwotICB0aGlzLnJlc3VsdHMgPSBbXTsKLSAg
dGhpcy5ydW5uZXIgPSBydW5uZXI7Ci0gIHZhciBsZW5ndGggPSB0aGlzLmJlbmNobWFya3MubGVu
Z3RoOwotICB2YXIgaW5kZXggPSAwOwotICB2YXIgc3VpdGUgPSB0aGlzOwotICB2YXIgZGF0YTsK
LQotICAvLyBSdW4gdGhlIHNldHVwLCB0aGUgYWN0dWFsIGJlbmNobWFyaywgYW5kIHRoZSB0ZWFy
IGRvd24gaW4gdGhyZWUKLSAgLy8gc2VwYXJhdGUgc3RlcHMgdG8gYWxsb3cgdGhlIGZyYW1ld29y
ayB0byB5aWVsZCBiZXR3ZWVuIGFueSBvZiB0aGUKLSAgLy8gc3RlcHMuCi0KLSAgZnVuY3Rpb24g
UnVuTmV4dFNldHVwKCkgewotICAgIGlmIChpbmRleCA8IGxlbmd0aCkgewotICAgICAgdHJ5IHsK
LSAgICAgICAgc3VpdGUuYmVuY2htYXJrc1tpbmRleF0uU2V0dXAoKTsKLSAgICAgIH0gY2F0Y2gg
KGUpIHsKLSAgICAgICAgc3VpdGUuTm90aWZ5RXJyb3IoZSk7Ci0gICAgICAgIHJldHVybiBudWxs
OwotICAgICAgfQotICAgICAgcmV0dXJuIFJ1bk5leHRCZW5jaG1hcms7Ci0gICAgfQotICAgIHN1
aXRlLk5vdGlmeVJlc3VsdCgpOwotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgZnVuY3Rpb24g
UnVuTmV4dEJlbmNobWFyaygpIHsKLSAgICB0cnkgewotICAgICAgZGF0YSA9IHN1aXRlLlJ1blNp
bmdsZUJlbmNobWFyayhzdWl0ZS5iZW5jaG1hcmtzW2luZGV4XSwgZGF0YSk7Ci0gICAgfSBjYXRj
aCAoZSkgewotICAgICAgc3VpdGUuTm90aWZ5RXJyb3IoZSk7Ci0gICAgICByZXR1cm4gbnVsbDsK
LSAgICB9Ci0gICAgLy8gSWYgZGF0YSBpcyBudWxsLCB3ZSdyZSBkb25lIHdpdGggdGhpcyBiZW5j
aG1hcmsuCi0gICAgcmV0dXJuIChkYXRhID09IG51bGwpID8gUnVuTmV4dFRlYXJEb3duIDogUnVu
TmV4dEJlbmNobWFyaygpOwotICB9Ci0KLSAgZnVuY3Rpb24gUnVuTmV4dFRlYXJEb3duKCkgewot
ICAgIHRyeSB7Ci0gICAgICBzdWl0ZS5iZW5jaG1hcmtzW2luZGV4KytdLlRlYXJEb3duKCk7Ci0g
ICAgfSBjYXRjaCAoZSkgewotICAgICAgc3VpdGUuTm90aWZ5RXJyb3IoZSk7Ci0gICAgICByZXR1
cm4gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIFJ1bk5leHRTZXR1cDsKLSAgfQotCi0gIC8vIFN0
YXJ0IG91dCBydW5uaW5nIHRoZSBzZXR1cC4KLSAgcmV0dXJuIFJ1bk5leHRTZXR1cCgpOwotfQot
Ly8gQ29weXJpZ2h0IDIwMDkgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotLy8gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gICAgICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLS8vICAgICAgIGRp
c2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZAotLy8gICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gICAgICAgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0vLyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8gVGhpcyBiZW5jaG1hcmsgaXMgYmFzZWQgb24g
YSBKYXZhU2NyaXB0IGxvZyBwcm9jZXNzaW5nIG1vZHVsZSB1c2VkCi0vLyBieSB0aGUgVjggcHJv
ZmlsZXIgdG8gZ2VuZXJhdGUgZXhlY3V0aW9uIHRpbWUgcHJvZmlsZXMgZm9yIHJ1bnMgb2YKLS8v
IEphdmFTY3JpcHQgYXBwbGljYXRpb25zLCBhbmQgaXQgZWZmZWN0aXZlbHkgbWVhc3VyZXMgaG93
IGZhc3QgdGhlCi0vLyBKYXZhU2NyaXB0IGVuZ2luZSBpcyBhdCBhbGxvY2F0aW5nIG5vZGVzIGFu
ZCByZWNsYWltaW5nIHRoZSBtZW1vcnkKLS8vIHVzZWQgZm9yIG9sZCBub2Rlcy4gQmVjYXVzZSBv
ZiB0aGUgd2F5IHNwbGF5IHRyZWVzIHdvcmssIHRoZSBlbmdpbmUKLS8vIGFsc28gaGFzIHRvIGRl
YWwgd2l0aCBhIGxvdCBvZiBjaGFuZ2VzIHRvIHRoZSBsYXJnZSB0cmVlIG9iamVjdAotLy8gZ3Jh
cGguCi0KLXZhciBTcGxheSA9IG5ldyBCZW5jaG1hcmtTdWl0ZSgnU3BsYXknLCBbODE0OTEsIDI3
Mzk1MTRdLCBbCi0gIG5ldyBCZW5jaG1hcmsoIlNwbGF5IiwgdHJ1ZSwgZmFsc2UsIAotICAgIFNw
bGF5UnVuLCBTcGxheVNldHVwLCBTcGxheVRlYXJEb3duLCBTcGxheUxhdGVuY3kpCi1dKTsKLQot
Ci0vLyBDb25maWd1cmF0aW9uLgotdmFyIGtTcGxheVRyZWVTaXplID0gODAwMDsKLXZhciBrU3Bs
YXlUcmVlTW9kaWZpY2F0aW9ucyA9IDgwOwotdmFyIGtTcGxheVRyZWVQYXlsb2FkRGVwdGggPSA1
OwotCi12YXIgc3BsYXlUcmVlID0gbnVsbDsKLXZhciBzcGxheVNhbXBsZVRpbWVTdGFydCA9IDAu
MDsKLQotZnVuY3Rpb24gR2VuZXJhdGVQYXlsb2FkVHJlZShkZXB0aCwgdGFnKSB7Ci0gIGlmIChk
ZXB0aCA9PSAwKSB7Ci0gICAgcmV0dXJuIHsKLSAgICAgIGFycmF5ICA6IFsgMCwgMSwgMiwgMywg
NCwgNSwgNiwgNywgOCwgOSBdLAotICAgICAgc3RyaW5nIDogJ1N0cmluZyBmb3Iga2V5ICcgKyB0
YWcgKyAnIGluIGxlYWYgbm9kZScKLSAgICB9OwotICB9IGVsc2UgewotICAgIHJldHVybiB7Ci0g
ICAgICBsZWZ0OiAgR2VuZXJhdGVQYXlsb2FkVHJlZShkZXB0aCAtIDEsIHRhZyksCi0gICAgICBy
aWdodDogR2VuZXJhdGVQYXlsb2FkVHJlZShkZXB0aCAtIDEsIHRhZykKLSAgICB9OwotICB9Ci19
Ci0KLQotZnVuY3Rpb24gR2VuZXJhdGVLZXkoKSB7Ci0gIC8vIFRoZSBiZW5jaG1hcmsgZnJhbWV3
b3JrIGd1YXJhbnRlZXMgdGhhdCBNYXRoLnJhbmRvbSBpcwotICAvLyBkZXRlcm1pbmlzdGljOyBz
ZWUgYmFzZS5qcy4KLSAgcmV0dXJuIE1hdGgucmFuZG9tKCk7Ci19Ci0KLXZhciBzcGxheVNhbXBs
ZXMgPSBbXTsKLQotZnVuY3Rpb24gU3BsYXlMYXRlbmN5KCkgewotICByZXR1cm4gc3BsYXlTYW1w
bGVzOwotfQotCi1mdW5jdGlvbiBTcGxheVVwZGF0ZVN0YXRzKHRpbWUpIHsKLSAgdmFyIHBhdXNl
ID0gdGltZSAtIHNwbGF5U2FtcGxlVGltZVN0YXJ0OwotICBzcGxheVNhbXBsZVRpbWVTdGFydCA9
IHRpbWU7Ci0gIHNwbGF5U2FtcGxlcy5wdXNoKHBhdXNlKTsKLX0KLQotZnVuY3Rpb24gSW5zZXJ0
TmV3Tm9kZSgpIHsKLSAgLy8gSW5zZXJ0IG5ldyBub2RlIHdpdGggYSB1bmlxdWUga2V5LgotICB2
YXIga2V5OwotICBkbyB7Ci0gICAga2V5ID0gR2VuZXJhdGVLZXkoKTsKLSAgfSB3aGlsZSAoc3Bs
YXlUcmVlLmZpbmQoa2V5KSAhPSBudWxsKTsKLSAgdmFyIHBheWxvYWQgPSBHZW5lcmF0ZVBheWxv
YWRUcmVlKGtTcGxheVRyZWVQYXlsb2FkRGVwdGgsIFN0cmluZyhrZXkpKTsKLSAgc3BsYXlUcmVl
Lmluc2VydChrZXksIHBheWxvYWQpOwotICByZXR1cm4ga2V5OwotfQotCi0KLWZ1bmN0aW9uIFNw
bGF5U2V0dXAoKSB7Ci0gIC8vIENoZWNrIGlmIHRoZSBwbGF0Zm9ybSBoYXMgdGhlIHBlcmZvcm1h
bmNlLm5vdyBoaWdoIHJlc29sdXRpb24gdGltZXIuCi0gIC8vIElmIG5vdCwgdGhyb3cgZXhjZXB0
aW9uIGFuZCBxdWl0LgotICBpZiAoIXBlcmZvcm1hbmNlLm5vdykgewotICAgIHRocm93ICJQZXJm
b3JtYW5jZU5vd1Vuc3VwcG9ydGVkIjsKLSAgfQotCi0gIHNwbGF5VHJlZSA9IG5ldyBTcGxheVRy
ZWUoKTsKLSAgc3BsYXlTYW1wbGVUaW1lU3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKQotICBmb3Ig
KHZhciBpID0gMDsgaSA8IGtTcGxheVRyZWVTaXplOyBpKyspIHsKLSAgICBJbnNlcnROZXdOb2Rl
KCk7Ci0gICAgaWYgKChpKzEpICUgMjAgPT0gMTkpIHsKLSAgICAgIFNwbGF5VXBkYXRlU3RhdHMo
cGVyZm9ybWFuY2Uubm93KCkpOwotICAgIH0KLSAgfQotfQotCi0KLWZ1bmN0aW9uIFNwbGF5VGVh
ckRvd24oKSB7Ci0gIC8vIEFsbG93IHRoZSBnYXJiYWdlIGNvbGxlY3RvciB0byByZWNsYWltIHRo
ZSBtZW1vcnkKLSAgLy8gdXNlZCBieSB0aGUgc3BsYXkgdHJlZSBubyBtYXR0ZXIgaG93IHdlIGV4
aXQgdGhlCi0gIC8vIHRlYXIgZG93biBmdW5jdGlvbi4KLSAgdmFyIGtleXMgPSBzcGxheVRyZWUu
ZXhwb3J0S2V5cygpOwotICBzcGxheVRyZWUgPSBudWxsOwotCi0gIHNwbGF5U2FtcGxlcyA9IFtd
OwotCi0gIC8vIFZlcmlmeSB0aGF0IHRoZSBzcGxheSB0cmVlIGhhcyB0aGUgcmlnaHQgc2l6ZS4K
LSAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoOwotICBpZiAobGVuZ3RoICE9IGtTcGxheVRyZWVT
aXplKSB7Ci0gICAgdGhyb3cgbmV3IEVycm9yKCJTcGxheSB0cmVlIGhhcyB3cm9uZyBzaXplIik7
Ci0gIH0KLQotICAvLyBWZXJpZnkgdGhhdCB0aGUgc3BsYXkgdHJlZSBoYXMgc29ydGVkLCB1bmlx
dWUga2V5cy4KLSAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGggLSAxOyBpKyspIHsKLSAgICBp
ZiAoa2V5c1tpXSA+PSBrZXlzW2kgKyAxXSkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCJTcGxh
eSB0cmVlIG5vdCBzb3J0ZWQiKTsKLSAgICB9Ci0gIH0KLX0KLQotCi1mdW5jdGlvbiBTcGxheVJ1
bigpIHsKLSAgLy8gUmVwbGFjZSBhIGZldyBub2RlcyBpbiB0aGUgc3BsYXkgdHJlZS4KLSAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBrU3BsYXlUcmVlTW9kaWZpY2F0aW9uczsgaSsrKSB7Ci0gICAgdmFy
IGtleSA9IEluc2VydE5ld05vZGUoKTsKLSAgICB2YXIgZ3JlYXRlc3QgPSBzcGxheVRyZWUuZmlu
ZEdyZWF0ZXN0TGVzc1RoYW4oa2V5KTsKLSAgICBpZiAoZ3JlYXRlc3QgPT0gbnVsbCkgc3BsYXlU
cmVlLnJlbW92ZShrZXkpOwotICAgIGVsc2Ugc3BsYXlUcmVlLnJlbW92ZShncmVhdGVzdC5rZXkp
OwotICB9Ci0gIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9ybWFuY2Uubm93KCkpOwotfQotCi0KLS8q
KgotICogQ29uc3RydWN0cyBhIFNwbGF5IHRyZWUuICBBIHNwbGF5IHRyZWUgaXMgYSBzZWxmLWJh
bGFuY2luZyBiaW5hcnkKLSAqIHNlYXJjaCB0cmVlIHdpdGggdGhlIGFkZGl0aW9uYWwgcHJvcGVy
dHkgdGhhdCByZWNlbnRseSBhY2Nlc3NlZAotICogZWxlbWVudHMgYXJlIHF1aWNrIHRvIGFjY2Vz
cyBhZ2Fpbi4gSXQgcGVyZm9ybXMgYmFzaWMgb3BlcmF0aW9ucwotICogc3VjaCBhcyBpbnNlcnRp
b24sIGxvb2stdXAgYW5kIHJlbW92YWwgaW4gTyhsb2cobikpIGFtb3J0aXplZCB0aW1lLgotICoK
LSAqIEBjb25zdHJ1Y3RvcgotICovCi1mdW5jdGlvbiBTcGxheVRyZWUoKSB7Ci19OwotCi0KLS8q
KgotICogUG9pbnRlciB0byB0aGUgcm9vdCBub2RlIG9mIHRoZSB0cmVlLgotICoKLSAqIEB0eXBl
IHtTcGxheVRyZWUuTm9kZX0KLSAqIEBwcml2YXRlCi0gKi8KLVNwbGF5VHJlZS5wcm90b3R5cGUu
cm9vdF8gPSBudWxsOwotCi0KLS8qKgotICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUg
dHJlZSBpcyBlbXB0eS4KLSAqLwotU3BsYXlUcmVlLnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rp
b24oKSB7Ci0gIHJldHVybiAhdGhpcy5yb290XzsKLX07Ci0KLQotLyoqCi0gKiBJbnNlcnRzIGEg
bm9kZSBpbnRvIHRoZSB0cmVlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgYW5kIHZhbHVlIGlmCi0g
KiB0aGUgdHJlZSBkb2VzIG5vdCBhbHJlYWR5IGNvbnRhaW4gYSBub2RlIHdpdGggdGhlIHNwZWNp
ZmllZCBrZXkuIElmCi0gKiB0aGUgdmFsdWUgaXMgaW5zZXJ0ZWQsIGl0IGJlY29tZXMgdGhlIHJv
b3Qgb2YgdGhlIHRyZWUuCi0gKgotICogQHBhcmFtIHtudW1iZXJ9IGtleSBLZXkgdG8gaW5zZXJ0
IGludG8gdGhlIHRyZWUuCi0gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIGluc2VydCBpbnRv
IHRoZSB0cmVlLgotICovCi1TcGxheVRyZWUucHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9uKGtl
eSwgdmFsdWUpIHsKLSAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7Ci0gICAgdGhpcy5yb290XyA9IG5l
dyBTcGxheVRyZWUuTm9kZShrZXksIHZhbHVlKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgLy8gU3Bs
YXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBsYXN0IG5vZGUgb24gdGhlIHNlYXJjaCBwYXRoIGZv
cgotICAvLyB0aGUga2V5IHRvIHRoZSByb290IG9mIHRoZSB0cmVlLgotICB0aGlzLnNwbGF5Xyhr
ZXkpOwotICBpZiAodGhpcy5yb290Xy5rZXkgPT0ga2V5KSB7Ci0gICAgcmV0dXJuOwotICB9Ci0g
IHZhciBub2RlID0gbmV3IFNwbGF5VHJlZS5Ob2RlKGtleSwgdmFsdWUpOwotICBpZiAoa2V5ID4g
dGhpcy5yb290Xy5rZXkpIHsKLSAgICBub2RlLmxlZnQgPSB0aGlzLnJvb3RfOwotICAgIG5vZGUu
cmlnaHQgPSB0aGlzLnJvb3RfLnJpZ2h0OwotICAgIHRoaXMucm9vdF8ucmlnaHQgPSBudWxsOwot
ICB9IGVsc2UgewotICAgIG5vZGUucmlnaHQgPSB0aGlzLnJvb3RfOwotICAgIG5vZGUubGVmdCA9
IHRoaXMucm9vdF8ubGVmdDsKLSAgICB0aGlzLnJvb3RfLmxlZnQgPSBudWxsOwotICB9Ci0gIHRo
aXMucm9vdF8gPSBub2RlOwotfTsKLQotCi0vKioKLSAqIFJlbW92ZXMgYSBub2RlIHdpdGggdGhl
IHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgdHJlZSBpZiB0aGUgdHJlZQotICogY29udGFpbnMgYSBu
b2RlIHdpdGggdGhpcyBrZXkuIFRoZSByZW1vdmVkIG5vZGUgaXMgcmV0dXJuZWQuIElmIHRoZQot
ICoga2V5IGlzIG5vdCBmb3VuZCwgYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KLSAqCi0gKiBAcGFy
YW0ge251bWJlcn0ga2V5IEtleSB0byBmaW5kIGFuZCByZW1vdmUgZnJvbSB0aGUgdHJlZS4KLSAq
IEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBUaGUgcmVtb3ZlZCBub2RlLgotICovCi1TcGxheVRy
ZWUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGtleSkgewotICBpZiAodGhpcy5pc0VtcHR5
KCkpIHsKLSAgICB0aHJvdyBFcnJvcignS2V5IG5vdCBmb3VuZDogJyArIGtleSk7Ci0gIH0KLSAg
dGhpcy5zcGxheV8oa2V5KTsKLSAgaWYgKHRoaXMucm9vdF8ua2V5ICE9IGtleSkgewotICAgIHRo
cm93IEVycm9yKCdLZXkgbm90IGZvdW5kOiAnICsga2V5KTsKLSAgfQotICB2YXIgcmVtb3ZlZCA9
IHRoaXMucm9vdF87Ci0gIGlmICghdGhpcy5yb290Xy5sZWZ0KSB7Ci0gICAgdGhpcy5yb290XyA9
IHRoaXMucm9vdF8ucmlnaHQ7Ci0gIH0gZWxzZSB7Ci0gICAgdmFyIHJpZ2h0ID0gdGhpcy5yb290
Xy5yaWdodDsKLSAgICB0aGlzLnJvb3RfID0gdGhpcy5yb290Xy5sZWZ0OwotICAgIC8vIFNwbGF5
IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgcm9vdCBoYXMgYW4gZW1wdHkgcmlnaHQgY2hpbGQu
Ci0gICAgdGhpcy5zcGxheV8oa2V5KTsKLSAgICAvLyBJbnNlcnQgdGhlIG9yaWdpbmFsIHJpZ2h0
IGNoaWxkIGFzIHRoZSByaWdodCBjaGlsZCBvZiB0aGUgbmV3Ci0gICAgLy8gcm9vdC4KLSAgICB0
aGlzLnJvb3RfLnJpZ2h0ID0gcmlnaHQ7Ci0gIH0KLSAgcmV0dXJuIHJlbW92ZWQ7Ci19OwotCi0K
LS8qKgotICogUmV0dXJucyB0aGUgbm9kZSBoYXZpbmcgdGhlIHNwZWNpZmllZCBrZXkgb3IgbnVs
bCBpZiB0aGUgdHJlZSBkb2Vzbid0IGNvbnRhaW4KLSAqIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZp
ZWQga2V5LgotICoKLSAqIEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5IHRvIGZpbmQgaW4gdGhlIHRy
ZWUuCi0gKiBAcmV0dXJuIHtTcGxheVRyZWUuTm9kZX0gTm9kZSBoYXZpbmcgdGhlIHNwZWNpZmll
ZCBrZXkuCi0gKi8KLVNwbGF5VHJlZS5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKGtleSkgewot
ICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICB0aGlzLnNw
bGF5XyhrZXkpOwotICByZXR1cm4gdGhpcy5yb290Xy5rZXkgPT0ga2V5ID8gdGhpcy5yb290XyA6
IG51bGw7Ci19OwotCi0KLS8qKgotICogQHJldHVybiB7U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2
aW5nIHRoZSBtYXhpbXVtIGtleSB2YWx1ZS4KLSAqLwotU3BsYXlUcmVlLnByb3RvdHlwZS5maW5k
TWF4ID0gZnVuY3Rpb24ob3B0X3N0YXJ0Tm9kZSkgewotICBpZiAodGhpcy5pc0VtcHR5KCkpIHsK
LSAgICByZXR1cm4gbnVsbDsKLSAgfQotICB2YXIgY3VycmVudCA9IG9wdF9zdGFydE5vZGUgfHwg
dGhpcy5yb290XzsKLSAgd2hpbGUgKGN1cnJlbnQucmlnaHQpIHsKLSAgICBjdXJyZW50ID0gY3Vy
cmVudC5yaWdodDsKLSAgfQotICByZXR1cm4gY3VycmVudDsKLX07Ci0KLQotLyoqCi0gKiBAcmV0
dXJuIHtTcGxheVRyZWUuTm9kZX0gTm9kZSBoYXZpbmcgdGhlIG1heGltdW0ga2V5IHZhbHVlIHRo
YXQKLSAqICAgICBpcyBsZXNzIHRoYW4gdGhlIHNwZWNpZmllZCBrZXkgdmFsdWUuCi0gKi8KLVNw
bGF5VHJlZS5wcm90b3R5cGUuZmluZEdyZWF0ZXN0TGVzc1RoYW4gPSBmdW5jdGlvbihrZXkpIHsK
LSAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgLy8gU3Bs
YXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBub2RlIHdpdGggdGhlIGdpdmVuIGtleSBvciB0aGUg
bGFzdAotICAvLyBub2RlIG9uIHRoZSBzZWFyY2ggcGF0aCB0byB0aGUgdG9wIG9mIHRoZSB0cmVl
LgotICB0aGlzLnNwbGF5XyhrZXkpOwotICAvLyBOb3cgdGhlIHJlc3VsdCBpcyBlaXRoZXIgdGhl
IHJvb3Qgbm9kZSBvciB0aGUgZ3JlYXRlc3Qgbm9kZSBpbgotICAvLyB0aGUgbGVmdCBzdWJ0cmVl
LgotICBpZiAodGhpcy5yb290Xy5rZXkgPCBrZXkpIHsKLSAgICByZXR1cm4gdGhpcy5yb290XzsK
LSAgfSBlbHNlIGlmICh0aGlzLnJvb3RfLmxlZnQpIHsKLSAgICByZXR1cm4gdGhpcy5maW5kTWF4
KHRoaXMucm9vdF8ubGVmdCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX07
Ci0KLQotLyoqCi0gKiBAcmV0dXJuIHtBcnJheTwqPn0gQW4gYXJyYXkgY29udGFpbmluZyBhbGwg
dGhlIGtleXMgb2YgdHJlZSdzIG5vZGVzLgotICovCi1TcGxheVRyZWUucHJvdG90eXBlLmV4cG9y
dEtleXMgPSBmdW5jdGlvbigpIHsKLSAgdmFyIHJlc3VsdCA9IFtdOwotICBpZiAoIXRoaXMuaXNF
bXB0eSgpKSB7Ci0gICAgdGhpcy5yb290Xy50cmF2ZXJzZV8oZnVuY3Rpb24obm9kZSkgeyByZXN1
bHQucHVzaChub2RlLmtleSk7IH0pOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19OwotCi0KLS8q
KgotICogUGVyZm9ybSB0aGUgc3BsYXkgb3BlcmF0aW9uIGZvciB0aGUgZ2l2ZW4ga2V5LiBNb3Zl
cyB0aGUgbm9kZSB3aXRoCi0gKiB0aGUgZ2l2ZW4ga2V5IHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUu
ICBJZiBubyBub2RlIGhhcyB0aGUgZ2l2ZW4KLSAqIGtleSwgdGhlIGxhc3Qgbm9kZSBvbiB0aGUg
c2VhcmNoIHBhdGggaXMgbW92ZWQgdG8gdGhlIHRvcCBvZiB0aGUKLSAqIHRyZWUuIFRoaXMgaXMg
dGhlIHNpbXBsaWZpZWQgdG9wLWRvd24gc3BsYXlpbmcgYWxnb3JpdGhtIGZyb206Ci0gKiAiU2Vs
Zi1hZGp1c3RpbmcgQmluYXJ5IFNlYXJjaCBUcmVlcyIgYnkgU2xlYXRvciBhbmQgVGFyamFuCi0g
KgotICogQHBhcmFtIHtudW1iZXJ9IGtleSBLZXkgdG8gc3BsYXkgdGhlIHRyZWUgb24uCi0gKiBA
cHJpdmF0ZQotICovCi1TcGxheVRyZWUucHJvdG90eXBlLnNwbGF5XyA9IGZ1bmN0aW9uKGtleSkg
ewotICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKLSAgICByZXR1cm47Ci0gIH0KLSAgLy8gQ3JlYXRl
IGEgZHVtbXkgbm9kZS4gIFRoZSB1c2Ugb2YgdGhlIGR1bW15IG5vZGUgaXMgYSBiaXQKLSAgLy8g
Y291bnRlci1pbnR1aXRpdmU6IFRoZSByaWdodCBjaGlsZCBvZiB0aGUgZHVtbXkgbm9kZSB3aWxs
IGhvbGQKLSAgLy8gdGhlIEwgdHJlZSBvZiB0aGUgYWxnb3JpdGhtLiAgVGhlIGxlZnQgY2hpbGQg
b2YgdGhlIGR1bW15IG5vZGUKLSAgLy8gd2lsbCBob2xkIHRoZSBSIHRyZWUgb2YgdGhlIGFsZ29y
aXRobS4gIFVzaW5nIGEgZHVtbXkgbm9kZSwgbGVmdAotICAvLyBhbmQgcmlnaHQgd2lsbCBhbHdh
eXMgYmUgbm9kZXMgYW5kIHdlIGF2b2lkIHNwZWNpYWwgY2FzZXMuCi0gIHZhciBkdW1teSwgbGVm
dCwgcmlnaHQ7Ci0gIGR1bW15ID0gbGVmdCA9IHJpZ2h0ID0gbmV3IFNwbGF5VHJlZS5Ob2RlKG51
bGwsIG51bGwpOwotICB2YXIgY3VycmVudCA9IHRoaXMucm9vdF87Ci0gIHdoaWxlICh0cnVlKSB7
Ci0gICAgaWYgKGtleSA8IGN1cnJlbnQua2V5KSB7Ci0gICAgICBpZiAoIWN1cnJlbnQubGVmdCkg
ewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmIChrZXkgPCBjdXJyZW50LmxlZnQu
a2V5KSB7Ci0gICAgICAgIC8vIFJvdGF0ZSByaWdodC4KLSAgICAgICAgdmFyIHRtcCA9IGN1cnJl
bnQubGVmdDsKLSAgICAgICAgY3VycmVudC5sZWZ0ID0gdG1wLnJpZ2h0OwotICAgICAgICB0bXAu
cmlnaHQgPSBjdXJyZW50OwotICAgICAgICBjdXJyZW50ID0gdG1wOwotICAgICAgICBpZiAoIWN1
cnJlbnQubGVmdCkgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
ICAvLyBMaW5rIHJpZ2h0LgotICAgICAgcmlnaHQubGVmdCA9IGN1cnJlbnQ7Ci0gICAgICByaWdo
dCA9IGN1cnJlbnQ7Ci0gICAgICBjdXJyZW50ID0gY3VycmVudC5sZWZ0OwotICAgIH0gZWxzZSBp
ZiAoa2V5ID4gY3VycmVudC5rZXkpIHsKLSAgICAgIGlmICghY3VycmVudC5yaWdodCkgewotICAg
ICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmIChrZXkgPiBjdXJyZW50LnJpZ2h0LmtleSkg
ewotICAgICAgICAvLyBSb3RhdGUgbGVmdC4KLSAgICAgICAgdmFyIHRtcCA9IGN1cnJlbnQucmln
aHQ7Ci0gICAgICAgIGN1cnJlbnQucmlnaHQgPSB0bXAubGVmdDsKLSAgICAgICAgdG1wLmxlZnQg
PSBjdXJyZW50OwotICAgICAgICBjdXJyZW50ID0gdG1wOwotICAgICAgICBpZiAoIWN1cnJlbnQu
cmlnaHQpIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8g
TGluayBsZWZ0LgotICAgICAgbGVmdC5yaWdodCA9IGN1cnJlbnQ7Ci0gICAgICBsZWZ0ID0gY3Vy
cmVudDsKLSAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJpZ2h0OwotICAgIH0gZWxzZSB7Ci0gICAg
ICBicmVhazsKLSAgICB9Ci0gIH0KLSAgLy8gQXNzZW1ibGUuCi0gIGxlZnQucmlnaHQgPSBjdXJy
ZW50LmxlZnQ7Ci0gIHJpZ2h0LmxlZnQgPSBjdXJyZW50LnJpZ2h0OwotICBjdXJyZW50LmxlZnQg
PSBkdW1teS5yaWdodDsKLSAgY3VycmVudC5yaWdodCA9IGR1bW15LmxlZnQ7Ci0gIHRoaXMucm9v
dF8gPSBjdXJyZW50OwotfTsKLQotCi0vKioKLSAqIENvbnN0cnVjdHMgYSBTcGxheSB0cmVlIG5v
ZGUuCi0gKgotICogQHBhcmFtIHtudW1iZXJ9IGtleSBLZXkuCi0gKiBAcGFyYW0geyp9IHZhbHVl
IFZhbHVlLgotICovCi1TcGxheVRyZWUuTm9kZSA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKLSAg
dGhpcy5rZXkgPSBrZXk7Ci0gIHRoaXMudmFsdWUgPSB2YWx1ZTsKLX07Ci0KLQotLyoqCi0gKiBA
dHlwZSB7U3BsYXlUcmVlLk5vZGV9Ci0gKi8KLVNwbGF5VHJlZS5Ob2RlLnByb3RvdHlwZS5sZWZ0
ID0gbnVsbDsKLQotCi0vKioKLSAqIEB0eXBlIHtTcGxheVRyZWUuTm9kZX0KLSAqLwotU3BsYXlU
cmVlLk5vZGUucHJvdG90eXBlLnJpZ2h0ID0gbnVsbDsKLQotCi0vKioKLSAqIFBlcmZvcm1zIGFu
IG9yZGVyZWQgdHJhdmVyc2FsIG9mIHRoZSBzdWJ0cmVlIHN0YXJ0aW5nIGF0Ci0gKiB0aGlzIFNw
bGF5VHJlZS5Ob2RlLgotICoKLSAqIEBwYXJhbSB7ZnVuY3Rpb24oU3BsYXlUcmVlLk5vZGUpfSBm
IFZpc2l0b3IgZnVuY3Rpb24uCi0gKiBAcHJpdmF0ZQotICovCi1TcGxheVRyZWUuTm9kZS5wcm90
b3R5cGUudHJhdmVyc2VfID0gZnVuY3Rpb24oZikgewotICB2YXIgY3VycmVudCA9IHRoaXM7Ci0g
IHdoaWxlIChjdXJyZW50KSB7Ci0gICAgdmFyIGxlZnQgPSBjdXJyZW50LmxlZnQ7Ci0gICAgaWYg
KGxlZnQpIGxlZnQudHJhdmVyc2VfKGYpOwotICAgIGYoY3VycmVudCk7Ci0gICAgY3VycmVudCA9
IGN1cnJlbnQucmlnaHQ7Ci0gIH0KLX07Ci1mdW5jdGlvbiBqc2NTZXRVcCgpIHsKLSAgICBTcGxh
eVNldHVwKCk7Ci19Ci0KLWZ1bmN0aW9uIGpzY1RlYXJEb3duKCkgewotICAgIFNwbGF5VGVhckRv
d24oKTsKLX0KLQotZnVuY3Rpb24ganNjUnVuKCkgewotICAgIFNwbGF5UnVuKCk7Ci19Ci0KLWRl
YnVnKCJUZXN0aW5nIGlmIHRoZSBHQyBTbG90VmlzaXRvciBwaW5ncyB0aGUgcnVubG9vcCB3aGVu
IGRvbmUuIik7Ci1kZWJ1ZygiUnVubmluZyAyMDAgaXRlcmF0aW9ucyBvZiBzcGxheS4uLiIpOwot
Ci13aW5kb3cuaW50ZXJuYWxzLnN0b3BTd2VlcGluZygpOwotCi0vLyBBbGxvY2F0ZSB0aGUgY2Fs
bGJhY2sgaGVyZS4KLXZhciBjYWxsYmFjayA9IGZ1bmN0aW9uKCkgewotICAgIGRlYnVnKCJHQyBm
aW5pc2hlZC4iKTsKLSAgICBkZWJ1ZygiVGVzdCBwYXNzZWQuIik7Ci0gICAgd2luZG93LmludGVy
bmFscy5zdGFydFN3ZWVwaW5nKCk7Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAg
ICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKLX07Ci0KLWpzY1NldFVwKCk7Ci1mb3IgKHZhciBp
ID0gMDsgaSA8IDUwIHx8ICF3aW5kb3cuaW50ZXJuYWxzLmlzR0NSdW5uaW5nKCk7ICsraSkKLSAg
ICBqc2NSdW4oKTsKLS8vIFdlIGFyZSByZWx5aW5nIG9uIHRoZSBmYWN0IHRoYXQgdGhlcmUgd2ls
bCBub3QgYmUgYW55IHNhZmVwb2ludHMgYmV0d2VlbiBpc0dDUnVubmluZyBhbmQKLS8vIGFkZEdD
RmluYWxpemF0aW9uQ2FsbGJhY2suIElmIHRoZXJlIGlzIGEgc2FmZXBvaW50LCB0aGVuIHRoZSB0
ZXN0IG1pZ2h0IHBhc3MgZXZlbiBpZiB0aGUgR0MgZG9lc24ndAotLy8gZG8gdGhlIFNsb3RWaXNp
dG9yIHRoaW5nLiBTbywgd2Ugc2hvdWxkIHRyeSB0byBhdm9pZCBwdXR0aW5nIHNhZmVwb2ludHMg
b24gdGhpcyBwYXRoLCBidXQgaXQncyBub3QKLS8vIHRoZSBlbmQgb2YgdGhlIHdvcmxkIGlmIHdl
IGhhdmUgdG8uCi0KLS8vIFdlIGhhdmUgdG8gc3RvcCB0aGUgc3dlZXBlciwgYmVjYXVzZSB0aGUg
c3dlZXBlciB3aWxsIHBvbGwgdGhlIEdDIGV2ZW4gaWYgU2xvdFZpc2l0b3IgZG9lc24ndCBub3Rp
ZnkKLS8vIHRoZSBydW5sb29wLgotd2luZG93LmludGVybmFscy5zdG9wU3dlZXBpbmcoKTsKLQot
Ly8gUmVnaXN0ZXIgYSB0b3RhbGx5IHNoYWR5IGNhbGxiYWNrIGludG8gdGhlIGhlYXJ0IG9mIHRo
ZSBHQy4gSXQgd2lsbCBydW4gd2hlbiB0aGUgR0MgZmluYWxpemVzLgotd2luZG93LmludGVybmFs
cy5hZGRHQ0ZpbmFsaXphdGlvbkNhbGxiYWNrKGNhbGxiYWNrKTsKLTwvc2NyaXB0PgotPC9ib2R5
PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5n
ZUxvZwppbmRleCAzYzEwZWE4YTJmYjgzN2QxNWIwMGUxYzJiOTZhNGFiYTNjNWJhZWM3Li44NjFi
YmNjNmY5MWI4NjQ4NTMxNzgzZjA1YzJkMzAyZWEyMDdiNTBiIDEwMDY0NAotLS0gYS9KU1Rlc3Rz
L0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE3
LTAyLTE5ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KKworICAgICAg
ICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjEyNDY2LgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4NTc3CisKKyAgICAgICAgY2F1c2VzIGNyYXNo
ZXMgb24gQUFyY2g2NCBvbiBsaW51eCwgbWF5YmUgaXQncyBjYXVzaW5nIGNyYXNoZXMKKyAgICAg
ICAgb24gaU9TIHRvbyAoUmVxdWVzdGVkIGJ5IHBpemxvIG9uICN3ZWJraXQpLgorCisgICAgICAg
IFJldmVydGVkIGNoYW5nZXNldDoKKworICAgICAgICAiVGhlIGNvbGxlY3RvciB0aHJlYWQgc2hv
dWxkIG9ubHkgc3RhcnQgd2hlbiB0aGUgbXV0YXRvcgorICAgICAgICBkb2Vzbid0IGhhdmUgaGVh
cCBhY2Nlc3MiCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjc3MzcKKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjEyNDY2
CisKIDIwMTctMDItMTAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBUaGUgY29sbGVjdG9yIHRocmVhZCBzaG91bGQgb25seSBzdGFydCB3aGVuIHRoZSBtdXRhdG9y
IGRvZXNuJ3QgaGF2ZSBoZWFwIGFjY2VzcwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3Mvc3Bs
YXktZmxhc2gtYWNjZXNzLTFtcy5qcyBiL0pTVGVzdHMvc3RyZXNzL3NwbGF5LWZsYXNoLWFjY2Vz
cy0xbXMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhYWQ5NjQyZmQ2NjhkOWYz
NTdiN2NmM2NmZjcyOGJhZDAxMTFmMjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvSlNUZXN0cy9zdHJlc3Mvc3BsYXktZmxhc2gtYWNjZXNzLTFtcy5qcwor
KysgL2Rldi9udWxsCkBAIC0xLDkwMiArMCwwIEBACi0vL0AgcnVuTm9pc3lUZXN0RGVmYXVsdAot
Ly9AIHJ1bk5vaXN5VGVzdE5vQ0pJVAotCi0vLyBDb3B5cmlnaHQgMjAxMyB0aGUgVjggcHJvamVj
dCBhdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0vLyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZwotLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0vLyAgICAgICB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0vLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLS8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8g
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0KLS8v
IFBlcmZvcm1hbmNlLm5vdyBpcyB1c2VkIGluIGxhdGVuY3kgYmVuY2htYXJrcywgdGhlIGZhbGxi
YWNrIGlzIERhdGUubm93LgotdmFyIHBlcmZvcm1hbmNlID0gcGVyZm9ybWFuY2UgfHwge307Ci1w
ZXJmb3JtYW5jZS5ub3cgPSAoZnVuY3Rpb24oKSB7Ci0gIHJldHVybiBwZXJmb3JtYW5jZS5ub3cg
ICAgICAgfHwKLSAgICAgICAgIHBlcmZvcm1hbmNlLm1vek5vdyAgICB8fAotICAgICAgICAgcGVy
Zm9ybWFuY2UubXNOb3cgICAgIHx8Ci0gICAgICAgICBwZXJmb3JtYW5jZS5vTm93ICAgICAgfHwK
LSAgICAgICAgIHBlcmZvcm1hbmNlLndlYmtpdE5vdyB8fAotICAgICAgICAgRGF0ZS5ub3c7Ci19
KSgpOwotCi0vLyBTaW1wbGUgZnJhbWV3b3JrIGZvciBydW5uaW5nIHRoZSBiZW5jaG1hcmsgc3Vp
dGVzIGFuZAotLy8gY29tcHV0aW5nIGEgc2NvcmUgYmFzZWQgb24gdGhlIHRpbWluZyBtZWFzdXJl
bWVudHMuCi0KLQotLy8gQSBiZW5jaG1hcmsgaGFzIGEgbmFtZSAoc3RyaW5nKSBhbmQgYSBmdW5j
dGlvbiB0aGF0IHdpbGwgYmUgcnVuIHRvCi0vLyBkbyB0aGUgcGVyZm9ybWFuY2UgbWVhc3VyZW1l
bnQuIFRoZSBvcHRpb25hbCBzZXR1cCBhbmQgdGVhckRvd24KLS8vIGFyZ3VtZW50cyBhcmUgZnVu
Y3Rpb25zIHRoYXQgd2lsbCBiZSBpbnZva2VkIGJlZm9yZSBhbmQgYWZ0ZXIKLS8vIHJ1bm5pbmcg
dGhlIGJlbmNobWFyaywgYnV0IHRoZSBydW5uaW5nIHRpbWUgb2YgdGhlc2UgZnVuY3Rpb25zIHdp
bGwKLS8vIG5vdCBiZSBhY2NvdW50ZWQgZm9yIGluIHRoZSBiZW5jaG1hcmsgc2NvcmUuCi1mdW5j
dGlvbiBCZW5jaG1hcmsobmFtZSwgZG9XYXJtdXAsIGRvRGV0ZXJtaW5pc3RpYywgcnVuLCBzZXR1
cCwgdGVhckRvd24sIGxhdGVuY3lSZXN1bHQsIG1pbkl0ZXJhdGlvbnMpIHsKLSAgdGhpcy5uYW1l
ID0gbmFtZTsKLSAgdGhpcy5kb1dhcm11cCA9IGRvV2FybXVwOwotICB0aGlzLmRvRGV0ZXJtaW5p
c3RpYyA9IGRvRGV0ZXJtaW5pc3RpYzsKLSAgdGhpcy5ydW4gPSBydW47Ci0gIHRoaXMuU2V0dXAg
PSBzZXR1cCA/IHNldHVwIDogZnVuY3Rpb24oKSB7IH07Ci0gIHRoaXMuVGVhckRvd24gPSB0ZWFy
RG93biA/IHRlYXJEb3duIDogZnVuY3Rpb24oKSB7IH07Ci0gIHRoaXMubGF0ZW5jeVJlc3VsdCA9
IGxhdGVuY3lSZXN1bHQgPyBsYXRlbmN5UmVzdWx0IDogbnVsbDsgCi0gIHRoaXMubWluSXRlcmF0
aW9ucyA9IG1pbkl0ZXJhdGlvbnMgPyBtaW5JdGVyYXRpb25zIDogMzI7Ci19Ci0KLQotLy8gQmVu
Y2htYXJrIHJlc3VsdHMgaG9sZCB0aGUgYmVuY2htYXJrIGFuZCB0aGUgbWVhc3VyZWQgdGltZSB1
c2VkIHRvCi0vLyBydW4gdGhlIGJlbmNobWFyay4gVGhlIGJlbmNobWFyayBzY29yZSBpcyBjb21w
dXRlZCBsYXRlciBvbmNlIGEKLS8vIGZ1bGwgYmVuY2htYXJrIHN1aXRlIGhhcyBydW4gdG8gY29t
cGxldGlvbi4gSWYgbGF0ZW5jeSBpcyBzZXQgdG8gMAotLy8gdGhlbiB0aGVyZSBpcyBubyBsYXRl
bmN5IHNjb3JlIGZvciB0aGlzIGJlbmNobWFyay4KLWZ1bmN0aW9uIEJlbmNobWFya1Jlc3VsdChi
ZW5jaG1hcmssIHRpbWUsIGxhdGVuY3kpIHsKLSAgdGhpcy5iZW5jaG1hcmsgPSBiZW5jaG1hcms7
Ci0gIHRoaXMudGltZSA9IHRpbWU7Ci0gIHRoaXMubGF0ZW5jeSA9IGxhdGVuY3k7Ci19Ci0KLQot
Ly8gQXV0b21hdGljYWxseSBjb252ZXJ0IHJlc3VsdHMgdG8gbnVtYmVycy4gVXNlZCBieSB0aGUg
Z2VvbWV0cmljCi0vLyBtZWFuIGNvbXB1dGF0aW9uLgotQmVuY2htYXJrUmVzdWx0LnByb3RvdHlw
ZS52YWx1ZU9mID0gZnVuY3Rpb24oKSB7Ci0gIHJldHVybiB0aGlzLnRpbWU7Ci19Ci0KLQotLy8g
U3VpdGVzIG9mIGJlbmNobWFya3MgY29uc2lzdCBvZiBhIG5hbWUgYW5kIHRoZSBzZXQgb2YgYmVu
Y2htYXJrcyBpbgotLy8gYWRkaXRpb24gdG8gdGhlIHJlZmVyZW5jZSB0aW1pbmcgdGhhdCB0aGUg
ZmluYWwgc2NvcmUgd2lsbCBiZSBiYXNlZAotLy8gb24uIFRoaXMgd2F5LCBhbGwgc2NvcmVzIGFy
ZSByZWxhdGl2ZSB0byBhIHJlZmVyZW5jZSBydW4gYW5kIGhpZ2hlcgotLy8gc2NvcmVzIGltcGxp
ZXMgYmV0dGVyIHBlcmZvcm1hbmNlLgotZnVuY3Rpb24gQmVuY2htYXJrU3VpdGUobmFtZSwgcmVm
ZXJlbmNlLCBiZW5jaG1hcmtzKSB7Ci0gIHRoaXMubmFtZSA9IG5hbWU7Ci0gIHRoaXMucmVmZXJl
bmNlID0gcmVmZXJlbmNlOwotICB0aGlzLmJlbmNobWFya3MgPSBiZW5jaG1hcmtzOwotICBCZW5j
aG1hcmtTdWl0ZS5zdWl0ZXMucHVzaCh0aGlzKTsKLX0KLQotCi0vLyBLZWVwIHRyYWNrIG9mIGFs
bCBkZWNsYXJlZCBiZW5jaG1hcmsgc3VpdGVzLgotQmVuY2htYXJrU3VpdGUuc3VpdGVzID0gW107
Ci0KLS8vIFNjb3JlcyBhcmUgbm90IGNvbXBhcmFibGUgYWNyb3NzIHZlcnNpb25zLiBCdW1wIHRo
ZSB2ZXJzaW9uIGlmCi0vLyB5b3UncmUgbWFraW5nIGNoYW5nZXMgdGhhdCB3aWxsIGFmZmVjdCB0
aGF0IHNjb3JlcywgZS5nLiBpZiB5b3UgYWRkCi0vLyBhIG5ldyBiZW5jaG1hcmsgb3IgY2hhbmdl
IGFuIGV4aXN0aW5nIG9uZS4KLUJlbmNobWFya1N1aXRlLnZlcnNpb24gPSAnOSc7Ci0KLS8vIE92
ZXJyaWRlIHRoZSBhbGVydCBmdW5jdGlvbiB0byB0aHJvdyBhbiBleGNlcHRpb24gaW5zdGVhZC4K
LWFsZXJ0ID0gZnVuY3Rpb24ocykgewotICB0aHJvdyAiQWxlcnQgY2FsbGVkIHdpdGggYXJndW1l
bnQ6ICIgKyBzOwotfTsKLQotCi0vLyBUbyBtYWtlIHRoZSBiZW5jaG1hcmsgcmVzdWx0cyBwcmVk
aWN0YWJsZSwgd2UgcmVwbGFjZSBNYXRoLnJhbmRvbQotLy8gd2l0aCBhIDEwMCUgZGV0ZXJtaW5p
c3RpYyBhbHRlcm5hdGl2ZS4KLUJlbmNobWFya1N1aXRlLlJlc2V0Uk5HID0gZnVuY3Rpb24oKSB7
Ci0gIE1hdGgucmFuZG9tID0gKGZ1bmN0aW9uKCkgewotICAgIHZhciBzZWVkID0gNDk3MzQzMjE7
Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAgLy8gUm9iZXJ0IEplbmtpbnMnIDMyIGJp
dCBpbnRlZ2VyIGhhc2ggZnVuY3Rpb24uCi0gICAgICBzZWVkID0gKChzZWVkICsgMHg3ZWQ1NWQx
NikgKyAoc2VlZCA8PCAxMikpICAmIDB4ZmZmZmZmZmY7Ci0gICAgICBzZWVkID0gKChzZWVkIF4g
MHhjNzYxYzIzYykgXiAoc2VlZCA+Pj4gMTkpKSAmIDB4ZmZmZmZmZmY7Ci0gICAgICBzZWVkID0g
KChzZWVkICsgMHgxNjU2NjdiMSkgKyAoc2VlZCA8PCA1KSkgICAmIDB4ZmZmZmZmZmY7Ci0gICAg
ICBzZWVkID0gKChzZWVkICsgMHhkM2EyNjQ2YykgXiAoc2VlZCA8PCA5KSkgICAmIDB4ZmZmZmZm
ZmY7Ci0gICAgICBzZWVkID0gKChzZWVkICsgMHhmZDcwNDZjNSkgKyAoc2VlZCA8PCAzKSkgICAm
IDB4ZmZmZmZmZmY7Ci0gICAgICBzZWVkID0gKChzZWVkIF4gMHhiNTVhNGYwOSkgXiAoc2VlZCA+
Pj4gMTYpKSAmIDB4ZmZmZmZmZmY7Ci0gICAgICByZXR1cm4gKHNlZWQgJiAweGZmZmZmZmYpIC8g
MHgxMDAwMDAwMDsKLSAgICB9OwotICB9KSgpOwotfQotCi0KLS8vIFJ1bnMgYWxsIHJlZ2lzdGVy
ZWQgYmVuY2htYXJrIHN1aXRlcyBhbmQgb3B0aW9uYWxseSB5aWVsZHMgYmV0d2VlbgotLy8gZWFj
aCBpbmRpdmlkdWFsIGJlbmNobWFyayB0byBhdm9pZCBydW5uaW5nIGZvciB0b28gbG9uZyBpbiB0
aGUKLS8vIGNvbnRleHQgb2YgYnJvd3NlcnMuIE9uY2UgZG9uZSwgdGhlIGZpbmFsIHNjb3JlIGlz
IHJlcG9ydGVkIHRvIHRoZQotLy8gcnVubmVyLgotQmVuY2htYXJrU3VpdGUuUnVuU3VpdGVzID0g
ZnVuY3Rpb24ocnVubmVyKSB7Ci0gIHZhciBjb250aW51YXRpb24gPSBudWxsOwotICB2YXIgc3Vp
dGVzID0gQmVuY2htYXJrU3VpdGUuc3VpdGVzOwotICB2YXIgbGVuZ3RoID0gc3VpdGVzLmxlbmd0
aDsKLSAgQmVuY2htYXJrU3VpdGUuc2NvcmVzID0gW107Ci0gIHZhciBpbmRleCA9IDA7Ci0gIGZ1
bmN0aW9uIFJ1blN0ZXAoKSB7Ci0gICAgd2hpbGUgKGNvbnRpbnVhdGlvbiB8fCBpbmRleCA8IGxl
bmd0aCkgewotICAgICAgaWYgKGNvbnRpbnVhdGlvbikgewotICAgICAgICBjb250aW51YXRpb24g
PSBjb250aW51YXRpb24oKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHZhciBzdWl0ZSA9IHN1
aXRlc1tpbmRleCsrXTsKLSAgICAgICAgaWYgKHJ1bm5lci5Ob3RpZnlTdGFydCkgcnVubmVyLk5v
dGlmeVN0YXJ0KHN1aXRlLm5hbWUpOwotICAgICAgICBjb250aW51YXRpb24gPSBzdWl0ZS5SdW5T
dGVwKHJ1bm5lcik7Ci0gICAgICB9Ci0gICAgICBpZiAoY29udGludWF0aW9uICYmIHR5cGVvZiB3
aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnNldFRpbWVvdXQpIHsKLSAgICAgICAgd2lu
ZG93LnNldFRpbWVvdXQoUnVuU3RlcCwgMjUpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgLy8gc2hvdyBmaW5hbCByZXN1bHQKLSAgICBpZiAocnVubmVyLk5vdGlmeVNj
b3JlKSB7Ci0gICAgICB2YXIgc2NvcmUgPSBCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuKEJl
bmNobWFya1N1aXRlLnNjb3Jlcyk7Ci0gICAgICB2YXIgZm9ybWF0dGVkID0gQmVuY2htYXJrU3Vp
dGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmUpOwotICAgICAgcnVubmVyLk5vdGlmeVNjb3JlKGZv
cm1hdHRlZCk7Ci0gICAgfQotICB9Ci0gIFJ1blN0ZXAoKTsKLX0KLQotCi0vLyBDb3VudHMgdGhl
IHRvdGFsIG51bWJlciBvZiByZWdpc3RlcmVkIGJlbmNobWFya3MuIFVzZWZ1bCBmb3IKLS8vIHNo
b3dpbmcgcHJvZ3Jlc3MgYXMgYSBwZXJjZW50YWdlLgotQmVuY2htYXJrU3VpdGUuQ291bnRCZW5j
aG1hcmtzID0gZnVuY3Rpb24oKSB7Ci0gIHZhciByZXN1bHQgPSAwOwotICB2YXIgc3VpdGVzID0g
QmVuY2htYXJrU3VpdGUuc3VpdGVzOwotICBmb3IgKHZhciBpID0gMDsgaSA8IHN1aXRlcy5sZW5n
dGg7IGkrKykgewotICAgIHJlc3VsdCArPSBzdWl0ZXNbaV0uYmVuY2htYXJrcy5sZW5ndGg7Ci0g
IH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotCi0vLyBDb21wdXRlcyB0aGUgZ2VvbWV0cmljIG1l
YW4gb2YgYSBzZXQgb2YgbnVtYmVycy4KLUJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW4gPSBm
dW5jdGlvbihudW1iZXJzKSB7Ci0gIHZhciBsb2cgPSAwOwotICBmb3IgKHZhciBpID0gMDsgaSA8
IG51bWJlcnMubGVuZ3RoOyBpKyspIHsKLSAgICBsb2cgKz0gTWF0aC5sb2cobnVtYmVyc1tpXSk7
Ci0gIH0KLSAgcmV0dXJuIE1hdGgucG93KE1hdGguRSwgbG9nIC8gbnVtYmVycy5sZW5ndGgpOwot
fQotCi0KLS8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVhbiBvZiBhIHNldCBvZiB0aHJvdWdo
cHV0IHRpbWUgbWVhc3VyZW1lbnRzLgotQmVuY2htYXJrU3VpdGUuR2VvbWV0cmljTWVhblRpbWUg
PSBmdW5jdGlvbihtZWFzdXJlbWVudHMpIHsKLSAgdmFyIGxvZyA9IDA7Ci0gIGZvciAodmFyIGkg
PSAwOyBpIDwgbWVhc3VyZW1lbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgbG9nICs9IE1hdGgubG9n
KG1lYXN1cmVtZW50c1tpXS50aW1lKTsKLSAgfQotICByZXR1cm4gTWF0aC5wb3coTWF0aC5FLCBs
b2cgLyBtZWFzdXJlbWVudHMubGVuZ3RoKTsKLX0KLQotCi0vLyBDb21wdXRlcyB0aGUgYXZlcmFn
ZSBvZiB0aGUgd29yc3Qgc2FtcGxlcy4gRm9yIGV4YW1wbGUsIGlmIHBlcmNlbnRpbGUgaXMgOTks
IHRoaXMgd2lsbCByZXBvcnQgdGhlCi0vLyBhdmVyYWdlIG9mIHRoZSB3b3JzdCAxJSBvZiB0aGUg
c2FtcGxlcy4KLUJlbmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92ZVBlcmNlbnRpbGUgPSBmdW5jdGlv
bihudW1iZXJzLCBwZXJjZW50aWxlKSB7Ci0gIC8vIERvbid0IGNoYW5nZSB0aGUgb3JpZ2luYWwg
YXJyYXkuCi0gIG51bWJlcnMgPSBudW1iZXJzLnNsaWNlKCk7Ci0gIAotICAvLyBTb3J0IGluIGFz
Y2VuZGluZyBvcmRlci4KLSAgbnVtYmVycy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGEg
LSBiOyB9KTsKLSAgCi0gIC8vIE5vdyB0aGUgZWxlbWVudHMgd2Ugd2FudCBhcmUgYXQgdGhlIGVu
ZC4gS2VlcCByZW1vdmluZyB0aGVtIHVudGlsIHRoZSBhcnJheSBzaXplIHNocmlua3MgdG9vIG11
Y2guCi0gIC8vIEV4YW1wbGVzIGFzc3VtaW5nIHBlcmNlbnRpbGUgPSA5OToKLSAgLy8KLSAgLy8g
LSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwOiB3ZSB3aWxsIHJlbW92ZSBqdXN0IHRoZSB3
b3JzdCBlbnRyeSBhbmQgdGhlbiBub3QgcmVtb3ZlIGFueW1vcmUsCi0gIC8vICAgc2luY2UgdGhl
biBudW1iZXJzLmxlbmd0aCAvIG9yaWdpbmFsTGVuZ3RoID0gMC45OS4KLSAgLy8KLSAgLy8gLSBu
dW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwMDogd2Ugd2lsbCByZW1vdmUgdGhlIHRlbiB3b3Jz
dC4KLSAgLy8KLSAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTA6IHdlIHdpbGwgcmVt
b3ZlIGp1c3QgdGhlIHdvcnN0LgotICB2YXIgbnVtYmVyc1dlV2FudCA9IFtdOwotICB2YXIgb3Jp
Z2luYWxMZW5ndGggPSBudW1iZXJzLmxlbmd0aDsKLSAgd2hpbGUgKG51bWJlcnMubGVuZ3RoIC8g
b3JpZ2luYWxMZW5ndGggPiBwZXJjZW50aWxlIC8gMTAwKQotICAgIG51bWJlcnNXZVdhbnQucHVz
aChudW1iZXJzLnBvcCgpKTsKLSAgCi0gIHZhciBzdW0gPSAwOwotICBmb3IgKHZhciBpID0gMDsg
aSA8IG51bWJlcnNXZVdhbnQubGVuZ3RoOyArK2kpCi0gICAgc3VtICs9IG51bWJlcnNXZVdhbnRb
aV07Ci0gIAotICB2YXIgcmVzdWx0ID0gc3VtIC8gbnVtYmVyc1dlV2FudC5sZW5ndGg7Ci0gIAot
ICAvLyBEbyBhIHNhbml0eSBjaGVjay4KLSAgaWYgKG51bWJlcnMubGVuZ3RoICYmIHJlc3VsdCA8
IG51bWJlcnNbbnVtYmVycy5sZW5ndGggLSAxXSkgewotICAgIHRocm93ICJTYW5pdHkgY2hlY2sg
ZmFpbDogdGhlIHdvcnN0IGNhc2UgcmVzdWx0IGlzICIgKyByZXN1bHQgKwotICAgICAgIiBidXQg
d2UgZGlkbid0IHRha2UgaW50byBhY2NvdW50ICIgKyBudW1iZXJzOwotICB9Ci0gIAotICByZXR1
cm4gcmVzdWx0OwotfQotCi0KLS8vIENvbXB1dGVzIHRoZSBnZW9tZXRyaWMgbWVhbiBvZiBhIHNl
dCBvZiBsYXRlbmN5IG1lYXN1cmVtZW50cy4KLUJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5M
YXRlbmN5ID0gZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7Ci0gIHZhciBsb2cgPSAwOwotICB2YXIg
aGFzTGF0ZW5jeVJlc3VsdCA9IGZhbHNlOwotICBmb3IgKHZhciBpID0gMDsgaSA8IG1lYXN1cmVt
ZW50cy5sZW5ndGg7IGkrKykgewotICAgIGlmIChtZWFzdXJlbWVudHNbaV0ubGF0ZW5jeSAhPSAw
KSB7Ci0gICAgICBsb2cgKz0gTWF0aC5sb2cobWVhc3VyZW1lbnRzW2ldLmxhdGVuY3kpOwotICAg
ICAgaGFzTGF0ZW5jeVJlc3VsdCA9IHRydWU7Ci0gICAgfQotICB9Ci0gIGlmIChoYXNMYXRlbmN5
UmVzdWx0KSB7Ci0gICAgcmV0dXJuIE1hdGgucG93KE1hdGguRSwgbG9nIC8gbWVhc3VyZW1lbnRz
Lmxlbmd0aCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLX0KLQotCi0vLyBDb252
ZXJ0cyBhIHNjb3JlIHZhbHVlIHRvIGEgc3RyaW5nIHdpdGggYXQgbGVhc3QgdGhyZWUgc2lnbmlm
aWNhbnQKLS8vIGRpZ2l0cy4KLUJlbmNobWFya1N1aXRlLkZvcm1hdFNjb3JlID0gZnVuY3Rpb24o
dmFsdWUpIHsKLSAgaWYgKHZhbHVlID4gMTAwKSB7Ci0gICAgcmV0dXJuIHZhbHVlLnRvRml4ZWQo
MCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIHZhbHVlLnRvUHJlY2lzaW9uKDMpOwotICB9Ci19
Ci0KLS8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCB3ZSdyZSBkb25lIHJ1bm5pbmcgYSBzaW5n
bGUgYmVuY2htYXJrIGluCi0vLyB0aGUgYmVuY2htYXJrIHN1aXRlLiBUaGlzIGNhbiBiZSB1c2Vm
dWwgdG8gcmVwb3J0IHByb2dyZXNzLgotQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlmeVN0
ZXAgPSBmdW5jdGlvbihyZXN1bHQpIHsKLSAgdGhpcy5yZXN1bHRzLnB1c2gocmVzdWx0KTsKLSAg
aWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHRoaXMucnVubmVyLk5vdGlmeVN0ZXAocmVzdWx0
LmJlbmNobWFyay5uYW1lKTsKLX0KLQotCi0vLyBOb3RpZmllcyB0aGUgcnVubmVyIHRoYXQgd2Un
cmUgZG9uZSB3aXRoIHJ1bm5pbmcgYSBzdWl0ZSBhbmQgdGhhdAotLy8gd2UgaGF2ZSBhIHJlc3Vs
dCB3aGljaCBjYW4gYmUgcmVwb3J0ZWQgdG8gdGhlIHVzZXIgaWYgbmVlZGVkLgotQmVuY2htYXJr
U3VpdGUucHJvdG90eXBlLk5vdGlmeVJlc3VsdCA9IGZ1bmN0aW9uKCkgewotICB2YXIgbWVhbiA9
IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5UaW1lKHRoaXMucmVzdWx0cyk7Ci0gIHZhciBz
Y29yZSA9IHRoaXMucmVmZXJlbmNlWzBdIC8gbWVhbjsKLSAgQmVuY2htYXJrU3VpdGUuc2NvcmVz
LnB1c2goc2NvcmUpOwotICBpZiAodGhpcy5ydW5uZXIuTm90aWZ5UmVzdWx0KSB7Ci0gICAgdmFy
IGZvcm1hdHRlZCA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNjb3JlKDEwMCAqIHNjb3JlKTsKLSAg
ICB0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQodGhpcy5uYW1lLCBmb3JtYXR0ZWQpOwotICB9Ci0g
IGlmICh0aGlzLnJlZmVyZW5jZS5sZW5ndGggPT0gMikgewotICAgIHZhciBtZWFuTGF0ZW5jeSA9
IEJlbmNobWFya1N1aXRlLkdlb21ldHJpY01lYW5MYXRlbmN5KHRoaXMucmVzdWx0cyk7Ci0gICAg
aWYgKG1lYW5MYXRlbmN5ICE9IDApIHsKLSAgICAgIHZhciBzY29yZUxhdGVuY3kgPSB0aGlzLnJl
ZmVyZW5jZVsxXSAvIG1lYW5MYXRlbmN5OwotICAgICAgQmVuY2htYXJrU3VpdGUuc2NvcmVzLnB1
c2goc2NvcmVMYXRlbmN5KTsKLSAgICAgIGlmICh0aGlzLnJ1bm5lci5Ob3RpZnlSZXN1bHQpIHsK
LSAgICAgICAgdmFyIGZvcm1hdHRlZExhdGVuY3kgPSBCZW5jaG1hcmtTdWl0ZS5Gb3JtYXRTY29y
ZSgxMDAgKiBzY29yZUxhdGVuY3kpCi0gICAgICAgIHRoaXMucnVubmVyLk5vdGlmeVJlc3VsdCh0
aGlzLm5hbWUgKyAiTGF0ZW5jeSIsIGZvcm1hdHRlZExhdGVuY3kpOwotICAgICAgfQotICAgIH0K
LSAgfQotfQotCi0KLS8vIE5vdGlmaWVzIHRoZSBydW5uZXIgdGhhdCBydW5uaW5nIGEgYmVuY2ht
YXJrIHJlc3VsdGVkIGluIGFuIGVycm9yLgotQmVuY2htYXJrU3VpdGUucHJvdG90eXBlLk5vdGlm
eUVycm9yID0gZnVuY3Rpb24oZXJyb3IpIHsKLSAgaWYgKHRoaXMucnVubmVyLk5vdGlmeUVycm9y
KSB7Ci0gICAgdGhpcy5ydW5uZXIuTm90aWZ5RXJyb3IodGhpcy5uYW1lLCBlcnJvcik7Ci0gIH0K
LSAgaWYgKHRoaXMucnVubmVyLk5vdGlmeVN0ZXApIHsKLSAgICB0aGlzLnJ1bm5lci5Ob3RpZnlT
dGVwKHRoaXMubmFtZSk7Ci0gIH0KLX0KLQotCi0vLyBSdW5zIGEgc2luZ2xlIGJlbmNobWFyayBm
b3IgYXQgbGVhc3QgYSBzZWNvbmQgYW5kIGNvbXB1dGVzIHRoZQotLy8gYXZlcmFnZSB0aW1lIGl0
IHRha2VzIHRvIHJ1biBhIHNpbmdsZSBpdGVyYXRpb24uCi1CZW5jaG1hcmtTdWl0ZS5wcm90b3R5
cGUuUnVuU2luZ2xlQmVuY2htYXJrID0gZnVuY3Rpb24oYmVuY2htYXJrLCBkYXRhKSB7Ci0gIGZ1
bmN0aW9uIE1lYXN1cmUoZGF0YSkgewotICAgIHZhciBlbGFwc2VkID0gMDsKLSAgICB2YXIgc3Rh
cnQgPSBuZXcgRGF0ZSgpOwotICAKLSAgLy8gUnVuIGVpdGhlciBmb3IgMSBzZWNvbmQgb3IgZm9y
IHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBzcGVjaWZpZWQKLSAgLy8gYnkgbWluSXRlcmF0aW9u
cywgZGVwZW5kaW5nIG9uIHRoZSBjb25maWcgZmxhZyBkb0RldGVybWluaXN0aWMuCi0gICAgZm9y
ICh2YXIgaSA9IDA7IChiZW5jaG1hcmsuZG9EZXRlcm1pbmlzdGljID8gCi0gICAgICBpPGJlbmNo
bWFyay5taW5JdGVyYXRpb25zIDogZWxhcHNlZCA8IDEwMDApOyBpKyspIHsKLSAgICAgIGJlbmNo
bWFyay5ydW4oKTsKLSAgICAgIGVsYXBzZWQgPSBuZXcgRGF0ZSgpIC0gc3RhcnQ7Ci0gICAgfQot
ICAgIGlmIChkYXRhICE9IG51bGwpIHsKLSAgICAgIGRhdGEucnVucyArPSBpOwotICAgICAgZGF0
YS5lbGFwc2VkICs9IGVsYXBzZWQ7Ci0gICAgfQotICB9Ci0KLSAgLy8gU2V0cyB1cCBkYXRhIGlu
IG9yZGVyIHRvIHNraXAgb3Igbm90IHRoZSB3YXJtdXAgcGhhc2UuCi0gIGlmICghYmVuY2htYXJr
LmRvV2FybXVwICYmIGRhdGEgPT0gbnVsbCkgewotICAgIGRhdGEgPSB7IHJ1bnM6IDAsIGVsYXBz
ZWQ6IDAgfTsKLSAgfQotCi0gIGlmIChkYXRhID09IG51bGwpIHsKLSAgICBNZWFzdXJlKG51bGwp
OwotICAgIHJldHVybiB7IHJ1bnM6IDAsIGVsYXBzZWQ6IDAgfTsKLSAgfSBlbHNlIHsKLSAgICBN
ZWFzdXJlKGRhdGEpOwotICAgIC8vIElmIHdlJ3ZlIHJ1biB0b28gZmV3IGl0ZXJhdGlvbnMsIHdl
IGNvbnRpbnVlIGZvciBhbm90aGVyIHNlY29uZC4KLSAgICBpZiAoZGF0YS5ydW5zIDwgYmVuY2ht
YXJrLm1pbkl0ZXJhdGlvbnMpIHJldHVybiBkYXRhOwotICAgIHZhciB1c2VjID0gKGRhdGEuZWxh
cHNlZCAqIDEwMDApIC8gZGF0YS5ydW5zOwotICAgIHZhciBsYXRlbmN5U2FtcGxlcyA9IChiZW5j
aG1hcmsubGF0ZW5jeVJlc3VsdCAhPSBudWxsKSA/IGJlbmNobWFyay5sYXRlbmN5UmVzdWx0KCkg
OiBbMF07Ci0gICAgdmFyIHBlcmNlbnRpbGUgPSA5OS41OwotICAgIHZhciBsYXRlbmN5ID0gQmVu
Y2htYXJrU3VpdGUuQXZlcmFnZUFib3ZlUGVyY2VudGlsZShsYXRlbmN5U2FtcGxlcywgcGVyY2Vu
dGlsZSkgKiAxMDAwOwotICAgIHRoaXMuTm90aWZ5U3RlcChuZXcgQmVuY2htYXJrUmVzdWx0KGJl
bmNobWFyaywgdXNlYywgbGF0ZW5jeSkpOwotICAgIHJldHVybiBudWxsOwotICB9Ci19Ci0KLQot
Ly8gVGhpcyBmdW5jdGlvbiBzdGFydHMgcnVubmluZyBhIHN1aXRlLCBidXQgc3RvcHMgYmV0d2Vl
biBlYWNoCi0vLyBpbmRpdmlkdWFsIGJlbmNobWFyayBpbiB0aGUgc3VpdGUgYW5kIHJldHVybnMg
YSBjb250aW51YXRpb24KLS8vIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBpbnZva2VkIHRvIHJ1biB0
aGUgbmV4dCBiZW5jaG1hcmsuIE9uY2UgdGhlCi0vLyBsYXN0IGJlbmNobWFyayBoYXMgYmVlbiBl
eGVjdXRlZCwgbnVsbCBpcyByZXR1cm5lZC4KLUJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5SdW5T
dGVwID0gZnVuY3Rpb24ocnVubmVyKSB7Ci0gIEJlbmNobWFya1N1aXRlLlJlc2V0Uk5HKCk7Ci0g
IHRoaXMucmVzdWx0cyA9IFtdOwotICB0aGlzLnJ1bm5lciA9IHJ1bm5lcjsKLSAgdmFyIGxlbmd0
aCA9IHRoaXMuYmVuY2htYXJrcy5sZW5ndGg7Ci0gIHZhciBpbmRleCA9IDA7Ci0gIHZhciBzdWl0
ZSA9IHRoaXM7Ci0gIHZhciBkYXRhOwotCi0gIC8vIFJ1biB0aGUgc2V0dXAsIHRoZSBhY3R1YWwg
YmVuY2htYXJrLCBhbmQgdGhlIHRlYXIgZG93biBpbiB0aHJlZQotICAvLyBzZXBhcmF0ZSBzdGVw
cyB0byBhbGxvdyB0aGUgZnJhbWV3b3JrIHRvIHlpZWxkIGJldHdlZW4gYW55IG9mIHRoZQotICAv
LyBzdGVwcy4KLQotICBmdW5jdGlvbiBSdW5OZXh0U2V0dXAoKSB7Ci0gICAgaWYgKGluZGV4IDwg
bGVuZ3RoKSB7Ci0gICAgICB0cnkgewotICAgICAgICBzdWl0ZS5iZW5jaG1hcmtzW2luZGV4XS5T
ZXR1cCgpOwotICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICBzdWl0ZS5Ob3RpZnlFcnJvcihl
KTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gUnVuTmV4dEJl
bmNobWFyazsKLSAgICB9Ci0gICAgc3VpdGUuTm90aWZ5UmVzdWx0KCk7Ci0gICAgcmV0dXJuIG51
bGw7Ci0gIH0KLQotICBmdW5jdGlvbiBSdW5OZXh0QmVuY2htYXJrKCkgewotICAgIHRyeSB7Ci0g
ICAgICBkYXRhID0gc3VpdGUuUnVuU2luZ2xlQmVuY2htYXJrKHN1aXRlLmJlbmNobWFya3NbaW5k
ZXhdLCBkYXRhKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICBzdWl0ZS5Ob3RpZnlFcnJvcihl
KTsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICAvLyBJZiBkYXRhIGlzIG51bGwsIHdl
J3JlIGRvbmUgd2l0aCB0aGlzIGJlbmNobWFyay4KLSAgICByZXR1cm4gKGRhdGEgPT0gbnVsbCkg
PyBSdW5OZXh0VGVhckRvd24gOiBSdW5OZXh0QmVuY2htYXJrKCk7Ci0gIH0KLQotICBmdW5jdGlv
biBSdW5OZXh0VGVhckRvd24oKSB7Ci0gICAgdHJ5IHsKLSAgICAgIHN1aXRlLmJlbmNobWFya3Nb
aW5kZXgrK10uVGVhckRvd24oKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICBzdWl0ZS5Ob3Rp
ZnlFcnJvcihlKTsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICByZXR1cm4gUnVuTmV4
dFNldHVwOwotICB9Ci0KLSAgLy8gU3RhcnQgb3V0IHJ1bm5pbmcgdGhlIHNldHVwLgotICByZXR1
cm4gUnVuTmV4dFNldHVwKCk7Ci19Ci0vLyBDb3B5cmlnaHQgMjAwOSB0aGUgVjggcHJvamVjdCBh
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyAgICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0v
LyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZwotLy8gICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0vLyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0vLyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLS8vICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
Ly8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBUaGlz
IGJlbmNobWFyayBpcyBiYXNlZCBvbiBhIEphdmFTY3JpcHQgbG9nIHByb2Nlc3NpbmcgbW9kdWxl
IHVzZWQKLS8vIGJ5IHRoZSBWOCBwcm9maWxlciB0byBnZW5lcmF0ZSBleGVjdXRpb24gdGltZSBw
cm9maWxlcyBmb3IgcnVucyBvZgotLy8gSmF2YVNjcmlwdCBhcHBsaWNhdGlvbnMsIGFuZCBpdCBl
ZmZlY3RpdmVseSBtZWFzdXJlcyBob3cgZmFzdCB0aGUKLS8vIEphdmFTY3JpcHQgZW5naW5lIGlz
IGF0IGFsbG9jYXRpbmcgbm9kZXMgYW5kIHJlY2xhaW1pbmcgdGhlIG1lbW9yeQotLy8gdXNlZCBm
b3Igb2xkIG5vZGVzLiBCZWNhdXNlIG9mIHRoZSB3YXkgc3BsYXkgdHJlZXMgd29yaywgdGhlIGVu
Z2luZQotLy8gYWxzbyBoYXMgdG8gZGVhbCB3aXRoIGEgbG90IG9mIGNoYW5nZXMgdG8gdGhlIGxh
cmdlIHRyZWUgb2JqZWN0Ci0vLyBncmFwaC4KLQotdmFyIFNwbGF5ID0gbmV3IEJlbmNobWFya1N1
aXRlKCdTcGxheScsIFs4MTQ5MSwgMjczOTUxNF0sIFsKLSAgbmV3IEJlbmNobWFyaygiU3BsYXki
LCB0cnVlLCBmYWxzZSwgCi0gICAgU3BsYXlSdW4sIFNwbGF5U2V0dXAsIFNwbGF5VGVhckRvd24s
IFNwbGF5TGF0ZW5jeSkKLV0pOwotCi0KLS8vIENvbmZpZ3VyYXRpb24uCi12YXIga1NwbGF5VHJl
ZVNpemUgPSA4MDAwOwotdmFyIGtTcGxheVRyZWVNb2RpZmljYXRpb25zID0gODA7Ci12YXIga1Nw
bGF5VHJlZVBheWxvYWREZXB0aCA9IDU7Ci0KLXZhciBzcGxheVRyZWUgPSBudWxsOwotdmFyIHNw
bGF5U2FtcGxlVGltZVN0YXJ0ID0gMC4wOwotCi1mdW5jdGlvbiBHZW5lcmF0ZVBheWxvYWRUcmVl
KGRlcHRoLCB0YWcpIHsKLSAgaWYgKGRlcHRoID09IDApIHsKLSAgICByZXR1cm4gewotICAgICAg
YXJyYXkgIDogWyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5IF0sCi0gICAgICBzdHJpbmcg
OiAnU3RyaW5nIGZvciBrZXkgJyArIHRhZyArICcgaW4gbGVhZiBub2RlJwotICAgIH07Ci0gIH0g
ZWxzZSB7Ci0gICAgcmV0dXJuIHsKLSAgICAgIGxlZnQ6ICBHZW5lcmF0ZVBheWxvYWRUcmVlKGRl
cHRoIC0gMSwgdGFnKSwKLSAgICAgIHJpZ2h0OiBHZW5lcmF0ZVBheWxvYWRUcmVlKGRlcHRoIC0g
MSwgdGFnKQotICAgIH07Ci0gIH0KLX0KLQotCi1mdW5jdGlvbiBHZW5lcmF0ZUtleSgpIHsKLSAg
Ly8gVGhlIGJlbmNobWFyayBmcmFtZXdvcmsgZ3VhcmFudGVlcyB0aGF0IE1hdGgucmFuZG9tIGlz
Ci0gIC8vIGRldGVybWluaXN0aWM7IHNlZSBiYXNlLmpzLgotICByZXR1cm4gTWF0aC5yYW5kb20o
KTsKLX0KLQotdmFyIHNwbGF5U2FtcGxlcyA9IFtdOwotCi1mdW5jdGlvbiBTcGxheUxhdGVuY3ko
KSB7Ci0gIHJldHVybiBzcGxheVNhbXBsZXM7Ci19Ci0KLWZ1bmN0aW9uIFNwbGF5VXBkYXRlU3Rh
dHModGltZSkgewotICB2YXIgcGF1c2UgPSB0aW1lIC0gc3BsYXlTYW1wbGVUaW1lU3RhcnQ7Ci0g
IHNwbGF5U2FtcGxlVGltZVN0YXJ0ID0gdGltZTsKLSAgc3BsYXlTYW1wbGVzLnB1c2gocGF1c2Up
OwotfQotCi1mdW5jdGlvbiBJbnNlcnROZXdOb2RlKCkgewotICAvLyBJbnNlcnQgbmV3IG5vZGUg
d2l0aCBhIHVuaXF1ZSBrZXkuCi0gIHZhciBrZXk7Ci0gIGRvIHsKLSAgICBrZXkgPSBHZW5lcmF0
ZUtleSgpOwotICB9IHdoaWxlIChzcGxheVRyZWUuZmluZChrZXkpICE9IG51bGwpOwotICB2YXIg
cGF5bG9hZCA9IEdlbmVyYXRlUGF5bG9hZFRyZWUoa1NwbGF5VHJlZVBheWxvYWREZXB0aCwgU3Ry
aW5nKGtleSkpOwotICBzcGxheVRyZWUuaW5zZXJ0KGtleSwgcGF5bG9hZCk7Ci0gIHJldHVybiBr
ZXk7Ci19Ci0KLQotZnVuY3Rpb24gU3BsYXlTZXR1cCgpIHsKLSAgLy8gQ2hlY2sgaWYgdGhlIHBs
YXRmb3JtIGhhcyB0aGUgcGVyZm9ybWFuY2Uubm93IGhpZ2ggcmVzb2x1dGlvbiB0aW1lci4KLSAg
Ly8gSWYgbm90LCB0aHJvdyBleGNlcHRpb24gYW5kIHF1aXQuCi0gIGlmICghcGVyZm9ybWFuY2Uu
bm93KSB7Ci0gICAgdGhyb3cgIlBlcmZvcm1hbmNlTm93VW5zdXBwb3J0ZWQiOwotICB9Ci0KLSAg
c3BsYXlUcmVlID0gbmV3IFNwbGF5VHJlZSgpOwotICBzcGxheVNhbXBsZVRpbWVTdGFydCA9IHBl
cmZvcm1hbmNlLm5vdygpCi0gIGZvciAodmFyIGkgPSAwOyBpIDwga1NwbGF5VHJlZVNpemU7IGkr
KykgewotICAgIEluc2VydE5ld05vZGUoKTsKLSAgICBpZiAoKGkrMSkgJSAyMCA9PSAxOSkgewot
ICAgICAgU3BsYXlVcGRhdGVTdGF0cyhwZXJmb3JtYW5jZS5ub3coKSk7Ci0gICAgfQotICB9Ci19
Ci0KLQotZnVuY3Rpb24gU3BsYXlUZWFyRG93bigpIHsKLSAgLy8gQWxsb3cgdGhlIGdhcmJhZ2Ug
Y29sbGVjdG9yIHRvIHJlY2xhaW0gdGhlIG1lbW9yeQotICAvLyB1c2VkIGJ5IHRoZSBzcGxheSB0
cmVlIG5vIG1hdHRlciBob3cgd2UgZXhpdCB0aGUKLSAgLy8gdGVhciBkb3duIGZ1bmN0aW9uLgot
ICB2YXIga2V5cyA9IHNwbGF5VHJlZS5leHBvcnRLZXlzKCk7Ci0gIHNwbGF5VHJlZSA9IG51bGw7
Ci0KLSAgc3BsYXlTYW1wbGVzID0gW107Ci0KLSAgLy8gVmVyaWZ5IHRoYXQgdGhlIHNwbGF5IHRy
ZWUgaGFzIHRoZSByaWdodCBzaXplLgotICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7Ci0gIGlm
IChsZW5ndGggIT0ga1NwbGF5VHJlZVNpemUpIHsKLSAgICB0aHJvdyBuZXcgRXJyb3IoIlNwbGF5
IHRyZWUgaGFzIHdyb25nIHNpemUiKTsKLSAgfQotCi0gIC8vIFZlcmlmeSB0aGF0IHRoZSBzcGxh
eSB0cmVlIGhhcyBzb3J0ZWQsIHVuaXF1ZSBrZXlzLgotICBmb3IgKHZhciBpID0gMDsgaSA8IGxl
bmd0aCAtIDE7IGkrKykgewotICAgIGlmIChrZXlzW2ldID49IGtleXNbaSArIDFdKSB7Ci0gICAg
ICB0aHJvdyBuZXcgRXJyb3IoIlNwbGF5IHRyZWUgbm90IHNvcnRlZCIpOwotICAgIH0KLSAgfQot
fQotCi0KLWZ1bmN0aW9uIFNwbGF5UnVuKCkgewotICAvLyBSZXBsYWNlIGEgZmV3IG5vZGVzIGlu
IHRoZSBzcGxheSB0cmVlLgotICBmb3IgKHZhciBpID0gMDsgaSA8IGtTcGxheVRyZWVNb2RpZmlj
YXRpb25zOyBpKyspIHsKLSAgICB2YXIga2V5ID0gSW5zZXJ0TmV3Tm9kZSgpOwotICAgIHZhciBn
cmVhdGVzdCA9IHNwbGF5VHJlZS5maW5kR3JlYXRlc3RMZXNzVGhhbihrZXkpOwotICAgIGlmIChn
cmVhdGVzdCA9PSBudWxsKSBzcGxheVRyZWUucmVtb3ZlKGtleSk7Ci0gICAgZWxzZSBzcGxheVRy
ZWUucmVtb3ZlKGdyZWF0ZXN0LmtleSk7Ci0gIH0KLSAgU3BsYXlVcGRhdGVTdGF0cyhwZXJmb3Jt
YW5jZS5ub3coKSk7Ci19Ci0KLQotLyoqCi0gKiBDb25zdHJ1Y3RzIGEgU3BsYXkgdHJlZS4gIEEg
c3BsYXkgdHJlZSBpcyBhIHNlbGYtYmFsYW5jaW5nIGJpbmFyeQotICogc2VhcmNoIHRyZWUgd2l0
aCB0aGUgYWRkaXRpb25hbCBwcm9wZXJ0eSB0aGF0IHJlY2VudGx5IGFjY2Vzc2VkCi0gKiBlbGVt
ZW50cyBhcmUgcXVpY2sgdG8gYWNjZXNzIGFnYWluLiBJdCBwZXJmb3JtcyBiYXNpYyBvcGVyYXRp
b25zCi0gKiBzdWNoIGFzIGluc2VydGlvbiwgbG9vay11cCBhbmQgcmVtb3ZhbCBpbiBPKGxvZyhu
KSkgYW1vcnRpemVkIHRpbWUuCi0gKgotICogQGNvbnN0cnVjdG9yCi0gKi8KLWZ1bmN0aW9uIFNw
bGF5VHJlZSgpIHsKLX07Ci0KLQotLyoqCi0gKiBQb2ludGVyIHRvIHRoZSByb290IG5vZGUgb2Yg
dGhlIHRyZWUuCi0gKgotICogQHR5cGUge1NwbGF5VHJlZS5Ob2RlfQotICogQHByaXZhdGUKLSAq
LwotU3BsYXlUcmVlLnByb3RvdHlwZS5yb290XyA9IG51bGw7Ci0KLQotLyoqCi0gKiBAcmV0dXJu
IHtib29sZWFufSBXaGV0aGVyIHRoZSB0cmVlIGlzIGVtcHR5LgotICovCi1TcGxheVRyZWUucHJv
dG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbigpIHsKLSAgcmV0dXJuICF0aGlzLnJvb3RfOwotfTsK
LQotCi0vKioKLSAqIEluc2VydHMgYSBub2RlIGludG8gdGhlIHRyZWUgd2l0aCB0aGUgc3BlY2lm
aWVkIGtleSBhbmQgdmFsdWUgaWYKLSAqIHRoZSB0cmVlIGRvZXMgbm90IGFscmVhZHkgY29udGFp
biBhIG5vZGUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS4gSWYKLSAqIHRoZSB2YWx1ZSBpcyBpbnNl
cnRlZCwgaXQgYmVjb21lcyB0aGUgcm9vdCBvZiB0aGUgdHJlZS4KLSAqCi0gKiBAcGFyYW0ge251
bWJlcn0ga2V5IEtleSB0byBpbnNlcnQgaW50byB0aGUgdHJlZS4KLSAqIEBwYXJhbSB7Kn0gdmFs
dWUgVmFsdWUgdG8gaW5zZXJ0IGludG8gdGhlIHRyZWUuCi0gKi8KLVNwbGF5VHJlZS5wcm90b3R5
cGUuaW5zZXJ0ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewotICBpZiAodGhpcy5pc0VtcHR5KCkp
IHsKLSAgICB0aGlzLnJvb3RfID0gbmV3IFNwbGF5VHJlZS5Ob2RlKGtleSwgdmFsdWUpOwotICAg
IHJldHVybjsKLSAgfQotICAvLyBTcGxheSBvbiB0aGUga2V5IHRvIG1vdmUgdGhlIGxhc3Qgbm9k
ZSBvbiB0aGUgc2VhcmNoIHBhdGggZm9yCi0gIC8vIHRoZSBrZXkgdG8gdGhlIHJvb3Qgb2YgdGhl
IHRyZWUuCi0gIHRoaXMuc3BsYXlfKGtleSk7Ci0gIGlmICh0aGlzLnJvb3RfLmtleSA9PSBrZXkp
IHsKLSAgICByZXR1cm47Ci0gIH0KLSAgdmFyIG5vZGUgPSBuZXcgU3BsYXlUcmVlLk5vZGUoa2V5
LCB2YWx1ZSk7Ci0gIGlmIChrZXkgPiB0aGlzLnJvb3RfLmtleSkgewotICAgIG5vZGUubGVmdCA9
IHRoaXMucm9vdF87Ci0gICAgbm9kZS5yaWdodCA9IHRoaXMucm9vdF8ucmlnaHQ7Ci0gICAgdGhp
cy5yb290Xy5yaWdodCA9IG51bGw7Ci0gIH0gZWxzZSB7Ci0gICAgbm9kZS5yaWdodCA9IHRoaXMu
cm9vdF87Ci0gICAgbm9kZS5sZWZ0ID0gdGhpcy5yb290Xy5sZWZ0OwotICAgIHRoaXMucm9vdF8u
bGVmdCA9IG51bGw7Ci0gIH0KLSAgdGhpcy5yb290XyA9IG5vZGU7Ci19OwotCi0KLS8qKgotICog
UmVtb3ZlcyBhIG5vZGUgd2l0aCB0aGUgc3BlY2lmaWVkIGtleSBmcm9tIHRoZSB0cmVlIGlmIHRo
ZSB0cmVlCi0gKiBjb250YWlucyBhIG5vZGUgd2l0aCB0aGlzIGtleS4gVGhlIHJlbW92ZWQgbm9k
ZSBpcyByZXR1cm5lZC4gSWYgdGhlCi0gKiBrZXkgaXMgbm90IGZvdW5kLCBhbiBleGNlcHRpb24g
aXMgdGhyb3duLgotICoKLSAqIEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5IHRvIGZpbmQgYW5kIHJl
bW92ZSBmcm9tIHRoZSB0cmVlLgotICogQHJldHVybiB7U3BsYXlUcmVlLk5vZGV9IFRoZSByZW1v
dmVkIG5vZGUuCi0gKi8KLVNwbGF5VHJlZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oa2V5
KSB7Ci0gIGlmICh0aGlzLmlzRW1wdHkoKSkgewotICAgIHRocm93IEVycm9yKCdLZXkgbm90IGZv
dW5kOiAnICsga2V5KTsKLSAgfQotICB0aGlzLnNwbGF5XyhrZXkpOwotICBpZiAodGhpcy5yb290
Xy5rZXkgIT0ga2V5KSB7Ci0gICAgdGhyb3cgRXJyb3IoJ0tleSBub3QgZm91bmQ6ICcgKyBrZXkp
OwotICB9Ci0gIHZhciByZW1vdmVkID0gdGhpcy5yb290XzsKLSAgaWYgKCF0aGlzLnJvb3RfLmxl
ZnQpIHsKLSAgICB0aGlzLnJvb3RfID0gdGhpcy5yb290Xy5yaWdodDsKLSAgfSBlbHNlIHsKLSAg
ICB2YXIgcmlnaHQgPSB0aGlzLnJvb3RfLnJpZ2h0OwotICAgIHRoaXMucm9vdF8gPSB0aGlzLnJv
b3RfLmxlZnQ7Ci0gICAgLy8gU3BsYXkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG5ldyByb290IGhh
cyBhbiBlbXB0eSByaWdodCBjaGlsZC4KLSAgICB0aGlzLnNwbGF5XyhrZXkpOwotICAgIC8vIElu
c2VydCB0aGUgb3JpZ2luYWwgcmlnaHQgY2hpbGQgYXMgdGhlIHJpZ2h0IGNoaWxkIG9mIHRoZSBu
ZXcKLSAgICAvLyByb290LgotICAgIHRoaXMucm9vdF8ucmlnaHQgPSByaWdodDsKLSAgfQotICBy
ZXR1cm4gcmVtb3ZlZDsKLX07Ci0KLQotLyoqCi0gKiBSZXR1cm5zIHRoZSBub2RlIGhhdmluZyB0
aGUgc3BlY2lmaWVkIGtleSBvciBudWxsIGlmIHRoZSB0cmVlIGRvZXNuJ3QgY29udGFpbgotICog
YSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuCi0gKgotICogQHBhcmFtIHtudW1iZXJ9IGtl
eSBLZXkgdG8gZmluZCBpbiB0aGUgdHJlZS4KLSAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBO
b2RlIGhhdmluZyB0aGUgc3BlY2lmaWVkIGtleS4KLSAqLwotU3BsYXlUcmVlLnByb3RvdHlwZS5m
aW5kID0gZnVuY3Rpb24oa2V5KSB7Ci0gIGlmICh0aGlzLmlzRW1wdHkoKSkgewotICAgIHJldHVy
biBudWxsOwotICB9Ci0gIHRoaXMuc3BsYXlfKGtleSk7Ci0gIHJldHVybiB0aGlzLnJvb3RfLmtl
eSA9PSBrZXkgPyB0aGlzLnJvb3RfIDogbnVsbDsKLX07Ci0KLQotLyoqCi0gKiBAcmV0dXJuIHtT
cGxheVRyZWUuTm9kZX0gTm9kZSBoYXZpbmcgdGhlIG1heGltdW0ga2V5IHZhbHVlLgotICovCi1T
cGxheVRyZWUucHJvdG90eXBlLmZpbmRNYXggPSBmdW5jdGlvbihvcHRfc3RhcnROb2RlKSB7Ci0g
IGlmICh0aGlzLmlzRW1wdHkoKSkgewotICAgIHJldHVybiBudWxsOwotICB9Ci0gIHZhciBjdXJy
ZW50ID0gb3B0X3N0YXJ0Tm9kZSB8fCB0aGlzLnJvb3RfOwotICB3aGlsZSAoY3VycmVudC5yaWdo
dCkgewotICAgIGN1cnJlbnQgPSBjdXJyZW50LnJpZ2h0OwotICB9Ci0gIHJldHVybiBjdXJyZW50
OwotfTsKLQotCi0vKioKLSAqIEByZXR1cm4ge1NwbGF5VHJlZS5Ob2RlfSBOb2RlIGhhdmluZyB0
aGUgbWF4aW11bSBrZXkgdmFsdWUgdGhhdAotICogICAgIGlzIGxlc3MgdGhhbiB0aGUgc3BlY2lm
aWVkIGtleSB2YWx1ZS4KLSAqLwotU3BsYXlUcmVlLnByb3RvdHlwZS5maW5kR3JlYXRlc3RMZXNz
VGhhbiA9IGZ1bmN0aW9uKGtleSkgewotICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKLSAgICByZXR1
cm4gbnVsbDsKLSAgfQotICAvLyBTcGxheSBvbiB0aGUga2V5IHRvIG1vdmUgdGhlIG5vZGUgd2l0
aCB0aGUgZ2l2ZW4ga2V5IG9yIHRoZSBsYXN0Ci0gIC8vIG5vZGUgb24gdGhlIHNlYXJjaCBwYXRo
IHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUuCi0gIHRoaXMuc3BsYXlfKGtleSk7Ci0gIC8vIE5vdyB0
aGUgcmVzdWx0IGlzIGVpdGhlciB0aGUgcm9vdCBub2RlIG9yIHRoZSBncmVhdGVzdCBub2RlIGlu
Ci0gIC8vIHRoZSBsZWZ0IHN1YnRyZWUuCi0gIGlmICh0aGlzLnJvb3RfLmtleSA8IGtleSkgewot
ICAgIHJldHVybiB0aGlzLnJvb3RfOwotICB9IGVsc2UgaWYgKHRoaXMucm9vdF8ubGVmdCkgewot
ICAgIHJldHVybiB0aGlzLmZpbmRNYXgodGhpcy5yb290Xy5sZWZ0KTsKLSAgfSBlbHNlIHsKLSAg
ICByZXR1cm4gbnVsbDsKLSAgfQotfTsKLQotCi0vKioKLSAqIEByZXR1cm4ge0FycmF5PCo+fSBB
biBhcnJheSBjb250YWluaW5nIGFsbCB0aGUga2V5cyBvZiB0cmVlJ3Mgbm9kZXMuCi0gKi8KLVNw
bGF5VHJlZS5wcm90b3R5cGUuZXhwb3J0S2V5cyA9IGZ1bmN0aW9uKCkgewotICB2YXIgcmVzdWx0
ID0gW107Ci0gIGlmICghdGhpcy5pc0VtcHR5KCkpIHsKLSAgICB0aGlzLnJvb3RfLnRyYXZlcnNl
XyhmdW5jdGlvbihub2RlKSB7IHJlc3VsdC5wdXNoKG5vZGUua2V5KTsgfSk7Ci0gIH0KLSAgcmV0
dXJuIHJlc3VsdDsKLX07Ci0KLQotLyoqCi0gKiBQZXJmb3JtIHRoZSBzcGxheSBvcGVyYXRpb24g
Zm9yIHRoZSBnaXZlbiBrZXkuIE1vdmVzIHRoZSBub2RlIHdpdGgKLSAqIHRoZSBnaXZlbiBrZXkg
dG8gdGhlIHRvcCBvZiB0aGUgdHJlZS4gIElmIG5vIG5vZGUgaGFzIHRoZSBnaXZlbgotICoga2V5
LCB0aGUgbGFzdCBub2RlIG9uIHRoZSBzZWFyY2ggcGF0aCBpcyBtb3ZlZCB0byB0aGUgdG9wIG9m
IHRoZQotICogdHJlZS4gVGhpcyBpcyB0aGUgc2ltcGxpZmllZCB0b3AtZG93biBzcGxheWluZyBh
bGdvcml0aG0gZnJvbToKLSAqICJTZWxmLWFkanVzdGluZyBCaW5hcnkgU2VhcmNoIFRyZWVzIiBi
eSBTbGVhdG9yIGFuZCBUYXJqYW4KLSAqCi0gKiBAcGFyYW0ge251bWJlcn0ga2V5IEtleSB0byBz
cGxheSB0aGUgdHJlZSBvbi4KLSAqIEBwcml2YXRlCi0gKi8KLVNwbGF5VHJlZS5wcm90b3R5cGUu
c3BsYXlfID0gZnVuY3Rpb24oa2V5KSB7Ci0gIGlmICh0aGlzLmlzRW1wdHkoKSkgewotICAgIHJl
dHVybjsKLSAgfQotICAvLyBDcmVhdGUgYSBkdW1teSBub2RlLiAgVGhlIHVzZSBvZiB0aGUgZHVt
bXkgbm9kZSBpcyBhIGJpdAotICAvLyBjb3VudGVyLWludHVpdGl2ZTogVGhlIHJpZ2h0IGNoaWxk
IG9mIHRoZSBkdW1teSBub2RlIHdpbGwgaG9sZAotICAvLyB0aGUgTCB0cmVlIG9mIHRoZSBhbGdv
cml0aG0uICBUaGUgbGVmdCBjaGlsZCBvZiB0aGUgZHVtbXkgbm9kZQotICAvLyB3aWxsIGhvbGQg
dGhlIFIgdHJlZSBvZiB0aGUgYWxnb3JpdGhtLiAgVXNpbmcgYSBkdW1teSBub2RlLCBsZWZ0Ci0g
IC8vIGFuZCByaWdodCB3aWxsIGFsd2F5cyBiZSBub2RlcyBhbmQgd2UgYXZvaWQgc3BlY2lhbCBj
YXNlcy4KLSAgdmFyIGR1bW15LCBsZWZ0LCByaWdodDsKLSAgZHVtbXkgPSBsZWZ0ID0gcmlnaHQg
PSBuZXcgU3BsYXlUcmVlLk5vZGUobnVsbCwgbnVsbCk7Ci0gIHZhciBjdXJyZW50ID0gdGhpcy5y
b290XzsKLSAgd2hpbGUgKHRydWUpIHsKLSAgICBpZiAoa2V5IDwgY3VycmVudC5rZXkpIHsKLSAg
ICAgIGlmICghY3VycmVudC5sZWZ0KSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAg
aWYgKGtleSA8IGN1cnJlbnQubGVmdC5rZXkpIHsKLSAgICAgICAgLy8gUm90YXRlIHJpZ2h0Lgot
ICAgICAgICB2YXIgdG1wID0gY3VycmVudC5sZWZ0OwotICAgICAgICBjdXJyZW50LmxlZnQgPSB0
bXAucmlnaHQ7Ci0gICAgICAgIHRtcC5yaWdodCA9IGN1cnJlbnQ7Ci0gICAgICAgIGN1cnJlbnQg
PSB0bXA7Ci0gICAgICAgIGlmICghY3VycmVudC5sZWZ0KSB7Ci0gICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIExpbmsgcmlnaHQuCi0gICAgICByaWdodC5sZWZ0
ID0gY3VycmVudDsKLSAgICAgIHJpZ2h0ID0gY3VycmVudDsKLSAgICAgIGN1cnJlbnQgPSBjdXJy
ZW50LmxlZnQ7Ci0gICAgfSBlbHNlIGlmIChrZXkgPiBjdXJyZW50LmtleSkgewotICAgICAgaWYg
KCFjdXJyZW50LnJpZ2h0KSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYgKGtl
eSA+IGN1cnJlbnQucmlnaHQua2V5KSB7Ci0gICAgICAgIC8vIFJvdGF0ZSBsZWZ0LgotICAgICAg
ICB2YXIgdG1wID0gY3VycmVudC5yaWdodDsKLSAgICAgICAgY3VycmVudC5yaWdodCA9IHRtcC5s
ZWZ0OwotICAgICAgICB0bXAubGVmdCA9IGN1cnJlbnQ7Ci0gICAgICAgIGN1cnJlbnQgPSB0bXA7
Ci0gICAgICAgIGlmICghY3VycmVudC5yaWdodCkgewotICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgICAvLyBMaW5rIGxlZnQuCi0gICAgICBsZWZ0LnJpZ2h0ID0gY3Vy
cmVudDsKLSAgICAgIGxlZnQgPSBjdXJyZW50OwotICAgICAgY3VycmVudCA9IGN1cnJlbnQucmln
aHQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotICAvLyBBc3NlbWJs
ZS4KLSAgbGVmdC5yaWdodCA9IGN1cnJlbnQubGVmdDsKLSAgcmlnaHQubGVmdCA9IGN1cnJlbnQu
cmlnaHQ7Ci0gIGN1cnJlbnQubGVmdCA9IGR1bW15LnJpZ2h0OwotICBjdXJyZW50LnJpZ2h0ID0g
ZHVtbXkubGVmdDsKLSAgdGhpcy5yb290XyA9IGN1cnJlbnQ7Ci19OwotCi0KLS8qKgotICogQ29u
c3RydWN0cyBhIFNwbGF5IHRyZWUgbm9kZS4KLSAqCi0gKiBAcGFyYW0ge251bWJlcn0ga2V5IEtl
eS4KLSAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUuCi0gKi8KLVNwbGF5VHJlZS5Ob2RlID0gZnVu
Y3Rpb24oa2V5LCB2YWx1ZSkgewotICB0aGlzLmtleSA9IGtleTsKLSAgdGhpcy52YWx1ZSA9IHZh
bHVlOwotfTsKLQotCi0vKioKLSAqIEB0eXBlIHtTcGxheVRyZWUuTm9kZX0KLSAqLwotU3BsYXlU
cmVlLk5vZGUucHJvdG90eXBlLmxlZnQgPSBudWxsOwotCi0KLS8qKgotICogQHR5cGUge1NwbGF5
VHJlZS5Ob2RlfQotICovCi1TcGxheVRyZWUuTm9kZS5wcm90b3R5cGUucmlnaHQgPSBudWxsOwot
Ci0KLS8qKgotICogUGVyZm9ybXMgYW4gb3JkZXJlZCB0cmF2ZXJzYWwgb2YgdGhlIHN1YnRyZWUg
c3RhcnRpbmcgYXQKLSAqIHRoaXMgU3BsYXlUcmVlLk5vZGUuCi0gKgotICogQHBhcmFtIHtmdW5j
dGlvbihTcGxheVRyZWUuTm9kZSl9IGYgVmlzaXRvciBmdW5jdGlvbi4KLSAqIEBwcml2YXRlCi0g
Ki8KLVNwbGF5VHJlZS5Ob2RlLnByb3RvdHlwZS50cmF2ZXJzZV8gPSBmdW5jdGlvbihmKSB7Ci0g
IHZhciBjdXJyZW50ID0gdGhpczsKLSAgd2hpbGUgKGN1cnJlbnQpIHsKLSAgICB2YXIgbGVmdCA9
IGN1cnJlbnQubGVmdDsKLSAgICBpZiAobGVmdCkgbGVmdC50cmF2ZXJzZV8oZik7Ci0gICAgZihj
dXJyZW50KTsKLSAgICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKLSAgfQotfTsKLWZ1bmN0aW9u
IGpzY1NldFVwKCkgewotICAgIFNwbGF5U2V0dXAoKTsKLX0KLQotZnVuY3Rpb24ganNjVGVhckRv
d24oKSB7Ci0gICAgU3BsYXlUZWFyRG93bigpOwotfQotCi1mdW5jdGlvbiBqc2NSdW4oKSB7Ci0g
ICAgU3BsYXlSdW4oKTsKLX0KLQotanNjU2V0VXAoKTsKLXZhciBfX2JlZm9yZSA9IHByZWNpc2VU
aW1lKCk7Ci12YXIgdGltZXMgPSBbXTsKLWZvciAodmFyIGkgPSAwOyBpIDwgMjAwMDsgKytpKSB7
Ci0gICAgdmFyIF9iZWZvcmUgPSBwcmVjaXNlVGltZSgpOwotICAgIGpzY1J1bigpOwotICAgIHZh
ciBfYWZ0ZXIgPSBwcmVjaXNlVGltZSgpOwotICAgIHRpbWVzLnB1c2goX2FmdGVyIC0gX2JlZm9y
ZSk7Ci0gICAgZmxhc2hIZWFwQWNjZXNzKDEpOwotfQotdmFyIF9fYWZ0ZXIgPSBwcmVjaXNlVGlt
ZSgpOwotanNjVGVhckRvd24oKTsKLQotZnVuY3Rpb24gYXZlcmFnZUFib3ZlUGVyY2VudGlsZShu
dW1iZXJzLCBwZXJjZW50aWxlKSB7Ci0gICAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBvcmlnaW5hbCBh
cnJheS4KLSAgICBudW1iZXJzID0gbnVtYmVycy5zbGljZSgpOwotICAgIAotICAgIC8vIFNvcnQg
aW4gYXNjZW5kaW5nIG9yZGVyLgotICAgIG51bWJlcnMuc29ydChmdW5jdGlvbihhLCBiKSB7IHJl
dHVybiBhIC0gYjsgfSk7Ci0gICAgCi0gICAgLy8gTm93IHRoZSBlbGVtZW50cyB3ZSB3YW50IGFy
ZSBhdCB0aGUgZW5kLiBLZWVwIHJlbW92aW5nIHRoZW0gdW50aWwgdGhlIGFycmF5IHNpemUgc2hy
aW5rcyB0b28gbXVjaC4KLSAgICAvLyBFeGFtcGxlcyBhc3N1bWluZyBwZXJjZW50aWxlID0gOTk6
Ci0gICAgLy8KLSAgICAvLyAtIG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDA6IHdlIHdpbGwg
cmVtb3ZlIGp1c3QgdGhlIHdvcnN0IGVudHJ5IGFuZCB0aGVuIG5vdCByZW1vdmUgYW55bW9yZSwK
LSAgICAvLyAgIHNpbmNlIHRoZW4gbnVtYmVycy5sZW5ndGggLyBvcmlnaW5hbExlbmd0aCA9IDAu
OTkuCi0gICAgLy8KLSAgICAvLyAtIG51bWJlcnMubGVuZ3RoIHN0YXJ0cyBhdCAxMDAwOiB3ZSB3
aWxsIHJlbW92ZSB0aGUgdGVuIHdvcnN0LgotICAgIC8vCi0gICAgLy8gLSBudW1iZXJzLmxlbmd0
aCBzdGFydHMgYXQgMTA6IHdlIHdpbGwgcmVtb3ZlIGp1c3QgdGhlIHdvcnN0LgotICAgIHZhciBu
dW1iZXJzV2VXYW50ID0gW107Ci0gICAgdmFyIG9yaWdpbmFsTGVuZ3RoID0gbnVtYmVycy5sZW5n
dGg7Ci0gICAgd2hpbGUgKG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPiBwZXJjZW50
aWxlIC8gMTAwKQotICAgICAgICBudW1iZXJzV2VXYW50LnB1c2gobnVtYmVycy5wb3AoKSk7Ci0g
ICAgCi0gICAgdmFyIHN1bSA9IDA7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJzV2VX
YW50Lmxlbmd0aDsgKytpKQotICAgICAgICBzdW0gKz0gbnVtYmVyc1dlV2FudFtpXTsKLSAgICAK
LSAgICB2YXIgcmVzdWx0ID0gc3VtIC8gbnVtYmVyc1dlV2FudC5sZW5ndGg7Ci0gICAgCi0gICAg
Ly8gRG8gYSBzYW5pdHkgY2hlY2suCi0gICAgaWYgKG51bWJlcnMubGVuZ3RoICYmIHJlc3VsdCA8
IG51bWJlcnNbbnVtYmVycy5sZW5ndGggLSAxXSkgewotICAgICAgICB0aHJvdyAiU2FuaXR5IGNo
ZWNrIGZhaWw6IHRoZSB3b3JzdCBjYXNlIHJlc3VsdCBpcyAiICsgcmVzdWx0ICsKLSAgICAgICAg
ICAgICIgYnV0IHdlIGRpZG4ndCB0YWtlIGludG8gYWNjb3VudCAiICsgbnVtYmVyczsKLSAgICB9
Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotcHJpbnQoIlRoYXQgdG9vayAiICsgKF9f
YWZ0ZXIgLSBfX2JlZm9yZSkgKiAxMDAwICsgIiBtcy4iKTsKLQotZnVuY3Rpb24gcHJpbnRQZXJj
ZW50aWxlKHBlcmNlbnRpbGUpCi17Ci0gICAgcHJpbnQoIkFib3ZlICIgKyBwZXJjZW50aWxlICsg
IiU6ICIgKyBhdmVyYWdlQWJvdmVQZXJjZW50aWxlKHRpbWVzLCBwZXJjZW50aWxlKSAqIDEwMDAg
KyAiIG1zLiIpOwotfQotCi1wcmludFBlcmNlbnRpbGUoOTkuOSk7Ci1wcmludFBlcmNlbnRpbGUo
OTkuNSk7Ci1wcmludFBlcmNlbnRpbGUoOTkpOwotcHJpbnRQZXJjZW50aWxlKDk3LjUpOwotcHJp
bnRQZXJjZW50aWxlKDk1KTsKLXByaW50UGVyY2VudGlsZSg5MCk7Ci1wcmludFBlcmNlbnRpbGUo
NzUpOwotcHJpbnRQZXJjZW50aWxlKDUwKTsKLXByaW50UGVyY2VudGlsZSgwKTsKLQotZ2MoKTsK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3NwbGF5LWZsYXNoLWFjY2Vzcy5qcyBiL0pTVGVz
dHMvc3RyZXNzL3NwbGF5LWZsYXNoLWFjY2Vzcy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZTY2YzQxYjdkNzc3ZmViYzE5MzA5NDNmNTI3OTAxMDg4MjAxZmFkZC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9zcGxh
eS1mbGFzaC1hY2Nlc3MuanMKKysrIC9kZXYvbnVsbApAQCAtMSw5MDMgKzAsMCBAQAotLy9AIHJ1
bk5vaXN5VGVzdERlZmF1bHQKLS8vQCBydW5Ob2lzeVRlc3ROb0NKSVQKLQotLy8gQ29weXJpZ2h0
IDIwMTMgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8g
ICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLS8vICAgICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotLy8gICAg
ICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gICAgICAgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0vLyAgICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
Ly8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8g
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLQotCi0vLyBQZXJmb3JtYW5jZS5ub3cgaXMgdXNlZCBpbiBsYXRlbmN5IGJl
bmNobWFya3MsIHRoZSBmYWxsYmFjayBpcyBEYXRlLm5vdy4KLXZhciBwZXJmb3JtYW5jZSA9IHBl
cmZvcm1hbmNlIHx8IHt9OwotcGVyZm9ybWFuY2Uubm93ID0gKGZ1bmN0aW9uKCkgewotICByZXR1
cm4gcGVyZm9ybWFuY2Uubm93ICAgICAgIHx8Ci0gICAgICAgICBwZXJmb3JtYW5jZS5tb3pOb3cg
ICAgfHwKLSAgICAgICAgIHBlcmZvcm1hbmNlLm1zTm93ICAgICB8fAotICAgICAgICAgcGVyZm9y
bWFuY2Uub05vdyAgICAgIHx8Ci0gICAgICAgICBwZXJmb3JtYW5jZS53ZWJraXROb3cgfHwKLSAg
ICAgICAgIERhdGUubm93OwotfSkoKTsKLQotLy8gU2ltcGxlIGZyYW1ld29yayBmb3IgcnVubmlu
ZyB0aGUgYmVuY2htYXJrIHN1aXRlcyBhbmQKLS8vIGNvbXB1dGluZyBhIHNjb3JlIGJhc2VkIG9u
IHRoZSB0aW1pbmcgbWVhc3VyZW1lbnRzLgotCi0KLS8vIEEgYmVuY2htYXJrIGhhcyBhIG5hbWUg
KHN0cmluZykgYW5kIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHJ1biB0bwotLy8gZG8gdGhlIHBl
cmZvcm1hbmNlIG1lYXN1cmVtZW50LiBUaGUgb3B0aW9uYWwgc2V0dXAgYW5kIHRlYXJEb3duCi0v
LyBhcmd1bWVudHMgYXJlIGZ1bmN0aW9ucyB0aGF0IHdpbGwgYmUgaW52b2tlZCBiZWZvcmUgYW5k
IGFmdGVyCi0vLyBydW5uaW5nIHRoZSBiZW5jaG1hcmssIGJ1dCB0aGUgcnVubmluZyB0aW1lIG9m
IHRoZXNlIGZ1bmN0aW9ucyB3aWxsCi0vLyBub3QgYmUgYWNjb3VudGVkIGZvciBpbiB0aGUgYmVu
Y2htYXJrIHNjb3JlLgotZnVuY3Rpb24gQmVuY2htYXJrKG5hbWUsIGRvV2FybXVwLCBkb0RldGVy
bWluaXN0aWMsIHJ1biwgc2V0dXAsIHRlYXJEb3duLCBsYXRlbmN5UmVzdWx0LCBtaW5JdGVyYXRp
b25zKSB7Ci0gIHRoaXMubmFtZSA9IG5hbWU7Ci0gIHRoaXMuZG9XYXJtdXAgPSBkb1dhcm11cDsK
LSAgdGhpcy5kb0RldGVybWluaXN0aWMgPSBkb0RldGVybWluaXN0aWM7Ci0gIHRoaXMucnVuID0g
cnVuOwotICB0aGlzLlNldHVwID0gc2V0dXAgPyBzZXR1cCA6IGZ1bmN0aW9uKCkgeyB9OwotICB0
aGlzLlRlYXJEb3duID0gdGVhckRvd24gPyB0ZWFyRG93biA6IGZ1bmN0aW9uKCkgeyB9OwotICB0
aGlzLmxhdGVuY3lSZXN1bHQgPSBsYXRlbmN5UmVzdWx0ID8gbGF0ZW5jeVJlc3VsdCA6IG51bGw7
IAotICB0aGlzLm1pbkl0ZXJhdGlvbnMgPSBtaW5JdGVyYXRpb25zID8gbWluSXRlcmF0aW9ucyA6
IDMyOwotfQotCi0KLS8vIEJlbmNobWFyayByZXN1bHRzIGhvbGQgdGhlIGJlbmNobWFyayBhbmQg
dGhlIG1lYXN1cmVkIHRpbWUgdXNlZCB0bwotLy8gcnVuIHRoZSBiZW5jaG1hcmsuIFRoZSBiZW5j
aG1hcmsgc2NvcmUgaXMgY29tcHV0ZWQgbGF0ZXIgb25jZSBhCi0vLyBmdWxsIGJlbmNobWFyayBz
dWl0ZSBoYXMgcnVuIHRvIGNvbXBsZXRpb24uIElmIGxhdGVuY3kgaXMgc2V0IHRvIDAKLS8vIHRo
ZW4gdGhlcmUgaXMgbm8gbGF0ZW5jeSBzY29yZSBmb3IgdGhpcyBiZW5jaG1hcmsuCi1mdW5jdGlv
biBCZW5jaG1hcmtSZXN1bHQoYmVuY2htYXJrLCB0aW1lLCBsYXRlbmN5KSB7Ci0gIHRoaXMuYmVu
Y2htYXJrID0gYmVuY2htYXJrOwotICB0aGlzLnRpbWUgPSB0aW1lOwotICB0aGlzLmxhdGVuY3kg
PSBsYXRlbmN5OwotfQotCi0KLS8vIEF1dG9tYXRpY2FsbHkgY29udmVydCByZXN1bHRzIHRvIG51
bWJlcnMuIFVzZWQgYnkgdGhlIGdlb21ldHJpYwotLy8gbWVhbiBjb21wdXRhdGlvbi4KLUJlbmNo
bWFya1Jlc3VsdC5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uKCkgewotICByZXR1cm4gdGhp
cy50aW1lOwotfQotCi0KLS8vIFN1aXRlcyBvZiBiZW5jaG1hcmtzIGNvbnNpc3Qgb2YgYSBuYW1l
IGFuZCB0aGUgc2V0IG9mIGJlbmNobWFya3MgaW4KLS8vIGFkZGl0aW9uIHRvIHRoZSByZWZlcmVu
Y2UgdGltaW5nIHRoYXQgdGhlIGZpbmFsIHNjb3JlIHdpbGwgYmUgYmFzZWQKLS8vIG9uLiBUaGlz
IHdheSwgYWxsIHNjb3JlcyBhcmUgcmVsYXRpdmUgdG8gYSByZWZlcmVuY2UgcnVuIGFuZCBoaWdo
ZXIKLS8vIHNjb3JlcyBpbXBsaWVzIGJldHRlciBwZXJmb3JtYW5jZS4KLWZ1bmN0aW9uIEJlbmNo
bWFya1N1aXRlKG5hbWUsIHJlZmVyZW5jZSwgYmVuY2htYXJrcykgewotICB0aGlzLm5hbWUgPSBu
YW1lOwotICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTsKLSAgdGhpcy5iZW5jaG1hcmtzID0g
YmVuY2htYXJrczsKLSAgQmVuY2htYXJrU3VpdGUuc3VpdGVzLnB1c2godGhpcyk7Ci19Ci0KLQot
Ly8gS2VlcCB0cmFjayBvZiBhbGwgZGVjbGFyZWQgYmVuY2htYXJrIHN1aXRlcy4KLUJlbmNobWFy
a1N1aXRlLnN1aXRlcyA9IFtdOwotCi0vLyBTY29yZXMgYXJlIG5vdCBjb21wYXJhYmxlIGFjcm9z
cyB2ZXJzaW9ucy4gQnVtcCB0aGUgdmVyc2lvbiBpZgotLy8geW91J3JlIG1ha2luZyBjaGFuZ2Vz
IHRoYXQgd2lsbCBhZmZlY3QgdGhhdCBzY29yZXMsIGUuZy4gaWYgeW91IGFkZAotLy8gYSBuZXcg
YmVuY2htYXJrIG9yIGNoYW5nZSBhbiBleGlzdGluZyBvbmUuCi1CZW5jaG1hcmtTdWl0ZS52ZXJz
aW9uID0gJzknOwotCi0vLyBPdmVycmlkZSB0aGUgYWxlcnQgZnVuY3Rpb24gdG8gdGhyb3cgYW4g
ZXhjZXB0aW9uIGluc3RlYWQuCi1hbGVydCA9IGZ1bmN0aW9uKHMpIHsKLSAgdGhyb3cgIkFsZXJ0
IGNhbGxlZCB3aXRoIGFyZ3VtZW50OiAiICsgczsKLX07Ci0KLQotLy8gVG8gbWFrZSB0aGUgYmVu
Y2htYXJrIHJlc3VsdHMgcHJlZGljdGFibGUsIHdlIHJlcGxhY2UgTWF0aC5yYW5kb20KLS8vIHdp
dGggYSAxMDAlIGRldGVybWluaXN0aWMgYWx0ZXJuYXRpdmUuCi1CZW5jaG1hcmtTdWl0ZS5SZXNl
dFJORyA9IGZ1bmN0aW9uKCkgewotICBNYXRoLnJhbmRvbSA9IChmdW5jdGlvbigpIHsKLSAgICB2
YXIgc2VlZCA9IDQ5NzM0MzIxOwotICAgIHJldHVybiBmdW5jdGlvbigpIHsKLSAgICAgIC8vIFJv
YmVydCBKZW5raW5zJyAzMiBiaXQgaW50ZWdlciBoYXNoIGZ1bmN0aW9uLgotICAgICAgc2VlZCA9
ICgoc2VlZCArIDB4N2VkNTVkMTYpICsgKHNlZWQgPDwgMTIpKSAgJiAweGZmZmZmZmZmOwotICAg
ICAgc2VlZCA9ICgoc2VlZCBeIDB4Yzc2MWMyM2MpIF4gKHNlZWQgPj4+IDE5KSkgJiAweGZmZmZm
ZmZmOwotICAgICAgc2VlZCA9ICgoc2VlZCArIDB4MTY1NjY3YjEpICsgKHNlZWQgPDwgNSkpICAg
JiAweGZmZmZmZmZmOwotICAgICAgc2VlZCA9ICgoc2VlZCArIDB4ZDNhMjY0NmMpIF4gKHNlZWQg
PDwgOSkpICAgJiAweGZmZmZmZmZmOwotICAgICAgc2VlZCA9ICgoc2VlZCArIDB4ZmQ3MDQ2YzUp
ICsgKHNlZWQgPDwgMykpICAgJiAweGZmZmZmZmZmOwotICAgICAgc2VlZCA9ICgoc2VlZCBeIDB4
YjU1YTRmMDkpIF4gKHNlZWQgPj4+IDE2KSkgJiAweGZmZmZmZmZmOwotICAgICAgcmV0dXJuIChz
ZWVkICYgMHhmZmZmZmZmKSAvIDB4MTAwMDAwMDA7Ci0gICAgfTsKLSAgfSkoKTsKLX0KLQotCi0v
LyBSdW5zIGFsbCByZWdpc3RlcmVkIGJlbmNobWFyayBzdWl0ZXMgYW5kIG9wdGlvbmFsbHkgeWll
bGRzIGJldHdlZW4KLS8vIGVhY2ggaW5kaXZpZHVhbCBiZW5jaG1hcmsgdG8gYXZvaWQgcnVubmlu
ZyBmb3IgdG9vIGxvbmcgaW4gdGhlCi0vLyBjb250ZXh0IG9mIGJyb3dzZXJzLiBPbmNlIGRvbmUs
IHRoZSBmaW5hbCBzY29yZSBpcyByZXBvcnRlZCB0byB0aGUKLS8vIHJ1bm5lci4KLUJlbmNobWFy
a1N1aXRlLlJ1blN1aXRlcyA9IGZ1bmN0aW9uKHJ1bm5lcikgewotICB2YXIgY29udGludWF0aW9u
ID0gbnVsbDsKLSAgdmFyIHN1aXRlcyA9IEJlbmNobWFya1N1aXRlLnN1aXRlczsKLSAgdmFyIGxl
bmd0aCA9IHN1aXRlcy5sZW5ndGg7Ci0gIEJlbmNobWFya1N1aXRlLnNjb3JlcyA9IFtdOwotICB2
YXIgaW5kZXggPSAwOwotICBmdW5jdGlvbiBSdW5TdGVwKCkgewotICAgIHdoaWxlIChjb250aW51
YXRpb24gfHwgaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgIGlmIChjb250aW51YXRpb24pIHsKLSAg
ICAgICAgY29udGludWF0aW9uID0gY29udGludWF0aW9uKCk7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICB2YXIgc3VpdGUgPSBzdWl0ZXNbaW5kZXgrK107Ci0gICAgICAgIGlmIChydW5uZXIuTm90
aWZ5U3RhcnQpIHJ1bm5lci5Ob3RpZnlTdGFydChzdWl0ZS5uYW1lKTsKLSAgICAgICAgY29udGlu
dWF0aW9uID0gc3VpdGUuUnVuU3RlcChydW5uZXIpOwotICAgICAgfQotICAgICAgaWYgKGNvbnRp
bnVhdGlvbiAmJiB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5zZXRUaW1l
b3V0KSB7Ci0gICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KFJ1blN0ZXAsIDI1KTsKLSAgICAgICAg
cmV0dXJuOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIHNob3cgZmluYWwgcmVzdWx0Ci0gICAg
aWYgKHJ1bm5lci5Ob3RpZnlTY29yZSkgewotICAgICAgdmFyIHNjb3JlID0gQmVuY2htYXJrU3Vp
dGUuR2VvbWV0cmljTWVhbihCZW5jaG1hcmtTdWl0ZS5zY29yZXMpOwotICAgICAgdmFyIGZvcm1h
dHRlZCA9IEJlbmNobWFya1N1aXRlLkZvcm1hdFNjb3JlKDEwMCAqIHNjb3JlKTsKLSAgICAgIHJ1
bm5lci5Ob3RpZnlTY29yZShmb3JtYXR0ZWQpOwotICAgIH0KLSAgfQotICBSdW5TdGVwKCk7Ci19
Ci0KLQotLy8gQ291bnRzIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVnaXN0ZXJlZCBiZW5jaG1hcmtz
LiBVc2VmdWwgZm9yCi0vLyBzaG93aW5nIHByb2dyZXNzIGFzIGEgcGVyY2VudGFnZS4KLUJlbmNo
bWFya1N1aXRlLkNvdW50QmVuY2htYXJrcyA9IGZ1bmN0aW9uKCkgewotICB2YXIgcmVzdWx0ID0g
MDsKLSAgdmFyIHN1aXRlcyA9IEJlbmNobWFya1N1aXRlLnN1aXRlczsKLSAgZm9yICh2YXIgaSA9
IDA7IGkgPCBzdWl0ZXMubGVuZ3RoOyBpKyspIHsKLSAgICByZXN1bHQgKz0gc3VpdGVzW2ldLmJl
bmNobWFya3MubGVuZ3RoOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLQotLy8gQ29tcHV0
ZXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0IG9mIG51bWJlcnMuCi1CZW5jaG1hcmtTdWl0
ZS5HZW9tZXRyaWNNZWFuID0gZnVuY3Rpb24obnVtYmVycykgewotICB2YXIgbG9nID0gMDsKLSAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJzLmxlbmd0aDsgaSsrKSB7Ci0gICAgbG9nICs9IE1h
dGgubG9nKG51bWJlcnNbaV0pOwotICB9Ci0gIHJldHVybiBNYXRoLnBvdyhNYXRoLkUsIGxvZyAv
IG51bWJlcnMubGVuZ3RoKTsKLX0KLQotCi0vLyBDb21wdXRlcyB0aGUgZ2VvbWV0cmljIG1lYW4g
b2YgYSBzZXQgb2YgdGhyb3VnaHB1dCB0aW1lIG1lYXN1cmVtZW50cy4KLUJlbmNobWFya1N1aXRl
Lkdlb21ldHJpY01lYW5UaW1lID0gZnVuY3Rpb24obWVhc3VyZW1lbnRzKSB7Ci0gIHZhciBsb2cg
PSAwOwotICBmb3IgKHZhciBpID0gMDsgaSA8IG1lYXN1cmVtZW50cy5sZW5ndGg7IGkrKykgewot
ICAgIGxvZyArPSBNYXRoLmxvZyhtZWFzdXJlbWVudHNbaV0udGltZSk7Ci0gIH0KLSAgcmV0dXJu
IE1hdGgucG93KE1hdGguRSwgbG9nIC8gbWVhc3VyZW1lbnRzLmxlbmd0aCk7Ci19Ci0KLQotLy8g
Q29tcHV0ZXMgdGhlIGF2ZXJhZ2Ugb2YgdGhlIHdvcnN0IHNhbXBsZXMuIEZvciBleGFtcGxlLCBp
ZiBwZXJjZW50aWxlIGlzIDk5LCB0aGlzIHdpbGwgcmVwb3J0IHRoZQotLy8gYXZlcmFnZSBvZiB0
aGUgd29yc3QgMSUgb2YgdGhlIHNhbXBsZXMuCi1CZW5jaG1hcmtTdWl0ZS5BdmVyYWdlQWJvdmVQ
ZXJjZW50aWxlID0gZnVuY3Rpb24obnVtYmVycywgcGVyY2VudGlsZSkgewotICAvLyBEb24ndCBj
aGFuZ2UgdGhlIG9yaWdpbmFsIGFycmF5LgotICBudW1iZXJzID0gbnVtYmVycy5zbGljZSgpOwot
ICAKLSAgLy8gU29ydCBpbiBhc2NlbmRpbmcgb3JkZXIuCi0gIG51bWJlcnMuc29ydChmdW5jdGlv
bihhLCBiKSB7IHJldHVybiBhIC0gYjsgfSk7Ci0gIAotICAvLyBOb3cgdGhlIGVsZW1lbnRzIHdl
IHdhbnQgYXJlIGF0IHRoZSBlbmQuIEtlZXAgcmVtb3ZpbmcgdGhlbSB1bnRpbCB0aGUgYXJyYXkg
c2l6ZSBzaHJpbmtzIHRvbyBtdWNoLgotICAvLyBFeGFtcGxlcyBhc3N1bWluZyBwZXJjZW50aWxl
ID0gOTk6Ci0gIC8vCi0gIC8vIC0gbnVtYmVycy5sZW5ndGggc3RhcnRzIGF0IDEwMDogd2Ugd2ls
bCByZW1vdmUganVzdCB0aGUgd29yc3QgZW50cnkgYW5kIHRoZW4gbm90IHJlbW92ZSBhbnltb3Jl
LAotICAvLyAgIHNpbmNlIHRoZW4gbnVtYmVycy5sZW5ndGggLyBvcmlnaW5hbExlbmd0aCA9IDAu
OTkuCi0gIC8vCi0gIC8vIC0gbnVtYmVycy5sZW5ndGggc3RhcnRzIGF0IDEwMDA6IHdlIHdpbGwg
cmVtb3ZlIHRoZSB0ZW4gd29yc3QuCi0gIC8vCi0gIC8vIC0gbnVtYmVycy5sZW5ndGggc3RhcnRz
IGF0IDEwOiB3ZSB3aWxsIHJlbW92ZSBqdXN0IHRoZSB3b3JzdC4KLSAgdmFyIG51bWJlcnNXZVdh
bnQgPSBbXTsKLSAgdmFyIG9yaWdpbmFsTGVuZ3RoID0gbnVtYmVycy5sZW5ndGg7Ci0gIHdoaWxl
IChudW1iZXJzLmxlbmd0aCAvIG9yaWdpbmFsTGVuZ3RoID4gcGVyY2VudGlsZSAvIDEwMCkKLSAg
ICBudW1iZXJzV2VXYW50LnB1c2gobnVtYmVycy5wb3AoKSk7Ci0gIAotICB2YXIgc3VtID0gMDsK
LSAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1iZXJzV2VXYW50Lmxlbmd0aDsgKytpKQotICAgIHN1
bSArPSBudW1iZXJzV2VXYW50W2ldOwotICAKLSAgdmFyIHJlc3VsdCA9IHN1bSAvIG51bWJlcnNX
ZVdhbnQubGVuZ3RoOwotICAKLSAgLy8gRG8gYSBzYW5pdHkgY2hlY2suCi0gIGlmIChudW1iZXJz
Lmxlbmd0aCAmJiByZXN1bHQgPCBudW1iZXJzW251bWJlcnMubGVuZ3RoIC0gMV0pIHsKLSAgICB0
aHJvdyAiU2FuaXR5IGNoZWNrIGZhaWw6IHRoZSB3b3JzdCBjYXNlIHJlc3VsdCBpcyAiICsgcmVz
dWx0ICsKLSAgICAgICIgYnV0IHdlIGRpZG4ndCB0YWtlIGludG8gYWNjb3VudCAiICsgbnVtYmVy
czsKLSAgfQotICAKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotCi0vLyBDb21wdXRlcyB0aGUgZ2Vv
bWV0cmljIG1lYW4gb2YgYSBzZXQgb2YgbGF0ZW5jeSBtZWFzdXJlbWVudHMuCi1CZW5jaG1hcmtT
dWl0ZS5HZW9tZXRyaWNNZWFuTGF0ZW5jeSA9IGZ1bmN0aW9uKG1lYXN1cmVtZW50cykgewotICB2
YXIgbG9nID0gMDsKLSAgdmFyIGhhc0xhdGVuY3lSZXN1bHQgPSBmYWxzZTsKLSAgZm9yICh2YXIg
aSA9IDA7IGkgPCBtZWFzdXJlbWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICBpZiAobWVhc3VyZW1l
bnRzW2ldLmxhdGVuY3kgIT0gMCkgewotICAgICAgbG9nICs9IE1hdGgubG9nKG1lYXN1cmVtZW50
c1tpXS5sYXRlbmN5KTsKLSAgICAgIGhhc0xhdGVuY3lSZXN1bHQgPSB0cnVlOwotICAgIH0KLSAg
fQotICBpZiAoaGFzTGF0ZW5jeVJlc3VsdCkgewotICAgIHJldHVybiBNYXRoLnBvdyhNYXRoLkUs
IGxvZyAvIG1lYXN1cmVtZW50cy5sZW5ndGgpOwotICB9IGVsc2UgewotICAgIHJldHVybiAwOwot
ICB9Ci19Ci0KLQotLy8gQ29udmVydHMgYSBzY29yZSB2YWx1ZSB0byBhIHN0cmluZyB3aXRoIGF0
IGxlYXN0IHRocmVlIHNpZ25pZmljYW50Ci0vLyBkaWdpdHMuCi1CZW5jaG1hcmtTdWl0ZS5Gb3Jt
YXRTY29yZSA9IGZ1bmN0aW9uKHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA+IDEwMCkgewotICAgIHJl
dHVybiB2YWx1ZS50b0ZpeGVkKDApOwotICB9IGVsc2UgewotICAgIHJldHVybiB2YWx1ZS50b1By
ZWNpc2lvbigzKTsKLSAgfQotfQotCi0vLyBOb3RpZmllcyB0aGUgcnVubmVyIHRoYXQgd2UncmUg
ZG9uZSBydW5uaW5nIGEgc2luZ2xlIGJlbmNobWFyayBpbgotLy8gdGhlIGJlbmNobWFyayBzdWl0
ZS4gVGhpcyBjYW4gYmUgdXNlZnVsIHRvIHJlcG9ydCBwcm9ncmVzcy4KLUJlbmNobWFya1N1aXRl
LnByb3RvdHlwZS5Ob3RpZnlTdGVwID0gZnVuY3Rpb24ocmVzdWx0KSB7Ci0gIHRoaXMucmVzdWx0
cy5wdXNoKHJlc3VsdCk7Ci0gIGlmICh0aGlzLnJ1bm5lci5Ob3RpZnlTdGVwKSB0aGlzLnJ1bm5l
ci5Ob3RpZnlTdGVwKHJlc3VsdC5iZW5jaG1hcmsubmFtZSk7Ci19Ci0KLQotLy8gTm90aWZpZXMg
dGhlIHJ1bm5lciB0aGF0IHdlJ3JlIGRvbmUgd2l0aCBydW5uaW5nIGEgc3VpdGUgYW5kIHRoYXQK
LS8vIHdlIGhhdmUgYSByZXN1bHQgd2hpY2ggY2FuIGJlIHJlcG9ydGVkIHRvIHRoZSB1c2VyIGlm
IG5lZWRlZC4KLUJlbmNobWFya1N1aXRlLnByb3RvdHlwZS5Ob3RpZnlSZXN1bHQgPSBmdW5jdGlv
bigpIHsKLSAgdmFyIG1lYW4gPSBCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuVGltZSh0aGlz
LnJlc3VsdHMpOwotICB2YXIgc2NvcmUgPSB0aGlzLnJlZmVyZW5jZVswXSAvIG1lYW47Ci0gIEJl
bmNobWFya1N1aXRlLnNjb3Jlcy5wdXNoKHNjb3JlKTsKLSAgaWYgKHRoaXMucnVubmVyLk5vdGlm
eVJlc3VsdCkgewotICAgIHZhciBmb3JtYXR0ZWQgPSBCZW5jaG1hcmtTdWl0ZS5Gb3JtYXRTY29y
ZSgxMDAgKiBzY29yZSk7Ci0gICAgdGhpcy5ydW5uZXIuTm90aWZ5UmVzdWx0KHRoaXMubmFtZSwg
Zm9ybWF0dGVkKTsKLSAgfQotICBpZiAodGhpcy5yZWZlcmVuY2UubGVuZ3RoID09IDIpIHsKLSAg
ICB2YXIgbWVhbkxhdGVuY3kgPSBCZW5jaG1hcmtTdWl0ZS5HZW9tZXRyaWNNZWFuTGF0ZW5jeSh0
aGlzLnJlc3VsdHMpOwotICAgIGlmIChtZWFuTGF0ZW5jeSAhPSAwKSB7Ci0gICAgICB2YXIgc2Nv
cmVMYXRlbmN5ID0gdGhpcy5yZWZlcmVuY2VbMV0gLyBtZWFuTGF0ZW5jeTsKLSAgICAgIEJlbmNo
bWFya1N1aXRlLnNjb3Jlcy5wdXNoKHNjb3JlTGF0ZW5jeSk7Ci0gICAgICBpZiAodGhpcy5ydW5u
ZXIuTm90aWZ5UmVzdWx0KSB7Ci0gICAgICAgIHZhciBmb3JtYXR0ZWRMYXRlbmN5ID0gQmVuY2ht
YXJrU3VpdGUuRm9ybWF0U2NvcmUoMTAwICogc2NvcmVMYXRlbmN5KQotICAgICAgICB0aGlzLnJ1
bm5lci5Ob3RpZnlSZXN1bHQodGhpcy5uYW1lICsgIkxhdGVuY3kiLCBmb3JtYXR0ZWRMYXRlbmN5
KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQotCi0vLyBOb3RpZmllcyB0aGUgcnVubmVyIHRo
YXQgcnVubmluZyBhIGJlbmNobWFyayByZXN1bHRlZCBpbiBhbiBlcnJvci4KLUJlbmNobWFya1N1
aXRlLnByb3RvdHlwZS5Ob3RpZnlFcnJvciA9IGZ1bmN0aW9uKGVycm9yKSB7Ci0gIGlmICh0aGlz
LnJ1bm5lci5Ob3RpZnlFcnJvcikgewotICAgIHRoaXMucnVubmVyLk5vdGlmeUVycm9yKHRoaXMu
bmFtZSwgZXJyb3IpOwotICB9Ci0gIGlmICh0aGlzLnJ1bm5lci5Ob3RpZnlTdGVwKSB7Ci0gICAg
dGhpcy5ydW5uZXIuTm90aWZ5U3RlcCh0aGlzLm5hbWUpOwotICB9Ci19Ci0KLQotLy8gUnVucyBh
IHNpbmdsZSBiZW5jaG1hcmsgZm9yIGF0IGxlYXN0IGEgc2Vjb25kIGFuZCBjb21wdXRlcyB0aGUK
LS8vIGF2ZXJhZ2UgdGltZSBpdCB0YWtlcyB0byBydW4gYSBzaW5nbGUgaXRlcmF0aW9uLgotQmVu
Y2htYXJrU3VpdGUucHJvdG90eXBlLlJ1blNpbmdsZUJlbmNobWFyayA9IGZ1bmN0aW9uKGJlbmNo
bWFyaywgZGF0YSkgewotICBmdW5jdGlvbiBNZWFzdXJlKGRhdGEpIHsKLSAgICB2YXIgZWxhcHNl
ZCA9IDA7Ci0gICAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoKTsKLSAgCi0gIC8vIFJ1biBlaXRoZXIg
Zm9yIDEgc2Vjb25kIG9yIGZvciB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgc3BlY2lmaWVkCi0g
IC8vIGJ5IG1pbkl0ZXJhdGlvbnMsIGRlcGVuZGluZyBvbiB0aGUgY29uZmlnIGZsYWcgZG9EZXRl
cm1pbmlzdGljLgotICAgIGZvciAodmFyIGkgPSAwOyAoYmVuY2htYXJrLmRvRGV0ZXJtaW5pc3Rp
YyA/IAotICAgICAgaTxiZW5jaG1hcmsubWluSXRlcmF0aW9ucyA6IGVsYXBzZWQgPCAxMDAwKTsg
aSsrKSB7Ci0gICAgICBiZW5jaG1hcmsucnVuKCk7Ci0gICAgICBlbGFwc2VkID0gbmV3IERhdGUo
KSAtIHN0YXJ0OwotICAgIH0KLSAgICBpZiAoZGF0YSAhPSBudWxsKSB7Ci0gICAgICBkYXRhLnJ1
bnMgKz0gaTsKLSAgICAgIGRhdGEuZWxhcHNlZCArPSBlbGFwc2VkOwotICAgIH0KLSAgfQotCi0g
IC8vIFNldHMgdXAgZGF0YSBpbiBvcmRlciB0byBza2lwIG9yIG5vdCB0aGUgd2FybXVwIHBoYXNl
LgotICBpZiAoIWJlbmNobWFyay5kb1dhcm11cCAmJiBkYXRhID09IG51bGwpIHsKLSAgICBkYXRh
ID0geyBydW5zOiAwLCBlbGFwc2VkOiAwIH07Ci0gIH0KLQotICBpZiAoZGF0YSA9PSBudWxsKSB7
Ci0gICAgTWVhc3VyZShudWxsKTsKLSAgICByZXR1cm4geyBydW5zOiAwLCBlbGFwc2VkOiAwIH07
Ci0gIH0gZWxzZSB7Ci0gICAgTWVhc3VyZShkYXRhKTsKLSAgICAvLyBJZiB3ZSd2ZSBydW4gdG9v
IGZldyBpdGVyYXRpb25zLCB3ZSBjb250aW51ZSBmb3IgYW5vdGhlciBzZWNvbmQuCi0gICAgaWYg
KGRhdGEucnVucyA8IGJlbmNobWFyay5taW5JdGVyYXRpb25zKSByZXR1cm4gZGF0YTsKLSAgICB2
YXIgdXNlYyA9IChkYXRhLmVsYXBzZWQgKiAxMDAwKSAvIGRhdGEucnVuczsKLSAgICB2YXIgbGF0
ZW5jeVNhbXBsZXMgPSAoYmVuY2htYXJrLmxhdGVuY3lSZXN1bHQgIT0gbnVsbCkgPyBiZW5jaG1h
cmsubGF0ZW5jeVJlc3VsdCgpIDogWzBdOwotICAgIHZhciBwZXJjZW50aWxlID0gOTkuNTsKLSAg
ICB2YXIgbGF0ZW5jeSA9IEJlbmNobWFya1N1aXRlLkF2ZXJhZ2VBYm92ZVBlcmNlbnRpbGUobGF0
ZW5jeVNhbXBsZXMsIHBlcmNlbnRpbGUpICogMTAwMDsKLSAgICB0aGlzLk5vdGlmeVN0ZXAobmV3
IEJlbmNobWFya1Jlc3VsdChiZW5jaG1hcmssIHVzZWMsIGxhdGVuY3kpKTsKLSAgICByZXR1cm4g
bnVsbDsKLSAgfQotfQotCi0KLS8vIFRoaXMgZnVuY3Rpb24gc3RhcnRzIHJ1bm5pbmcgYSBzdWl0
ZSwgYnV0IHN0b3BzIGJldHdlZW4gZWFjaAotLy8gaW5kaXZpZHVhbCBiZW5jaG1hcmsgaW4gdGhl
IHN1aXRlIGFuZCByZXR1cm5zIGEgY29udGludWF0aW9uCi0vLyBmdW5jdGlvbiB3aGljaCBjYW4g
YmUgaW52b2tlZCB0byBydW4gdGhlIG5leHQgYmVuY2htYXJrLiBPbmNlIHRoZQotLy8gbGFzdCBi
ZW5jaG1hcmsgaGFzIGJlZW4gZXhlY3V0ZWQsIG51bGwgaXMgcmV0dXJuZWQuCi1CZW5jaG1hcmtT
dWl0ZS5wcm90b3R5cGUuUnVuU3RlcCA9IGZ1bmN0aW9uKHJ1bm5lcikgewotICBCZW5jaG1hcmtT
dWl0ZS5SZXNldFJORygpOwotICB0aGlzLnJlc3VsdHMgPSBbXTsKLSAgdGhpcy5ydW5uZXIgPSBy
dW5uZXI7Ci0gIHZhciBsZW5ndGggPSB0aGlzLmJlbmNobWFya3MubGVuZ3RoOwotICB2YXIgaW5k
ZXggPSAwOwotICB2YXIgc3VpdGUgPSB0aGlzOwotICB2YXIgZGF0YTsKLQotICAvLyBSdW4gdGhl
IHNldHVwLCB0aGUgYWN0dWFsIGJlbmNobWFyaywgYW5kIHRoZSB0ZWFyIGRvd24gaW4gdGhyZWUK
LSAgLy8gc2VwYXJhdGUgc3RlcHMgdG8gYWxsb3cgdGhlIGZyYW1ld29yayB0byB5aWVsZCBiZXR3
ZWVuIGFueSBvZiB0aGUKLSAgLy8gc3RlcHMuCi0KLSAgZnVuY3Rpb24gUnVuTmV4dFNldHVwKCkg
ewotICAgIGlmIChpbmRleCA8IGxlbmd0aCkgewotICAgICAgdHJ5IHsKLSAgICAgICAgc3VpdGUu
YmVuY2htYXJrc1tpbmRleF0uU2V0dXAoKTsKLSAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAg
c3VpdGUuTm90aWZ5RXJyb3IoZSk7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAg
ICAgcmV0dXJuIFJ1bk5leHRCZW5jaG1hcms7Ci0gICAgfQotICAgIHN1aXRlLk5vdGlmeVJlc3Vs
dCgpOwotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgZnVuY3Rpb24gUnVuTmV4dEJlbmNobWFy
aygpIHsKLSAgICB0cnkgewotICAgICAgZGF0YSA9IHN1aXRlLlJ1blNpbmdsZUJlbmNobWFyayhz
dWl0ZS5iZW5jaG1hcmtzW2luZGV4XSwgZGF0YSk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAg
c3VpdGUuTm90aWZ5RXJyb3IoZSk7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgLy8g
SWYgZGF0YSBpcyBudWxsLCB3ZSdyZSBkb25lIHdpdGggdGhpcyBiZW5jaG1hcmsuCi0gICAgcmV0
dXJuIChkYXRhID09IG51bGwpID8gUnVuTmV4dFRlYXJEb3duIDogUnVuTmV4dEJlbmNobWFyaygp
OwotICB9Ci0KLSAgZnVuY3Rpb24gUnVuTmV4dFRlYXJEb3duKCkgewotICAgIHRyeSB7Ci0gICAg
ICBzdWl0ZS5iZW5jaG1hcmtzW2luZGV4KytdLlRlYXJEb3duKCk7Ci0gICAgfSBjYXRjaCAoZSkg
ewotICAgICAgc3VpdGUuTm90aWZ5RXJyb3IoZSk7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9
Ci0gICAgcmV0dXJuIFJ1bk5leHRTZXR1cDsKLSAgfQotCi0gIC8vIFN0YXJ0IG91dCBydW5uaW5n
IHRoZSBzZXR1cC4KLSAgcmV0dXJuIFJ1bk5leHRTZXR1cCgpOwotfQotLy8gQ29weXJpZ2h0IDIw
MDkgdGhlIFY4IHByb2plY3QgYXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gICAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLS8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotLy8gICAgICAg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0vLyAgICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8g
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLQotLy8gVGhpcyBiZW5jaG1hcmsgaXMgYmFzZWQgb24gYSBKYXZhU2NyaXB0IGxv
ZyBwcm9jZXNzaW5nIG1vZHVsZSB1c2VkCi0vLyBieSB0aGUgVjggcHJvZmlsZXIgdG8gZ2VuZXJh
dGUgZXhlY3V0aW9uIHRpbWUgcHJvZmlsZXMgZm9yIHJ1bnMgb2YKLS8vIEphdmFTY3JpcHQgYXBw
bGljYXRpb25zLCBhbmQgaXQgZWZmZWN0aXZlbHkgbWVhc3VyZXMgaG93IGZhc3QgdGhlCi0vLyBK
YXZhU2NyaXB0IGVuZ2luZSBpcyBhdCBhbGxvY2F0aW5nIG5vZGVzIGFuZCByZWNsYWltaW5nIHRo
ZSBtZW1vcnkKLS8vIHVzZWQgZm9yIG9sZCBub2Rlcy4gQmVjYXVzZSBvZiB0aGUgd2F5IHNwbGF5
IHRyZWVzIHdvcmssIHRoZSBlbmdpbmUKLS8vIGFsc28gaGFzIHRvIGRlYWwgd2l0aCBhIGxvdCBv
ZiBjaGFuZ2VzIHRvIHRoZSBsYXJnZSB0cmVlIG9iamVjdAotLy8gZ3JhcGguCi0KLXZhciBTcGxh
eSA9IG5ldyBCZW5jaG1hcmtTdWl0ZSgnU3BsYXknLCBbODE0OTEsIDI3Mzk1MTRdLCBbCi0gIG5l
dyBCZW5jaG1hcmsoIlNwbGF5IiwgdHJ1ZSwgZmFsc2UsIAotICAgIFNwbGF5UnVuLCBTcGxheVNl
dHVwLCBTcGxheVRlYXJEb3duLCBTcGxheUxhdGVuY3kpCi1dKTsKLQotCi0vLyBDb25maWd1cmF0
aW9uLgotdmFyIGtTcGxheVRyZWVTaXplID0gODAwMDsKLXZhciBrU3BsYXlUcmVlTW9kaWZpY2F0
aW9ucyA9IDgwOwotdmFyIGtTcGxheVRyZWVQYXlsb2FkRGVwdGggPSA1OwotCi12YXIgc3BsYXlU
cmVlID0gbnVsbDsKLXZhciBzcGxheVNhbXBsZVRpbWVTdGFydCA9IDAuMDsKLQotZnVuY3Rpb24g
R2VuZXJhdGVQYXlsb2FkVHJlZShkZXB0aCwgdGFnKSB7Ci0gIGlmIChkZXB0aCA9PSAwKSB7Ci0g
ICAgcmV0dXJuIHsKLSAgICAgIGFycmF5ICA6IFsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwg
OSBdLAotICAgICAgc3RyaW5nIDogJ1N0cmluZyBmb3Iga2V5ICcgKyB0YWcgKyAnIGluIGxlYWYg
bm9kZScKLSAgICB9OwotICB9IGVsc2UgewotICAgIHJldHVybiB7Ci0gICAgICBsZWZ0OiAgR2Vu
ZXJhdGVQYXlsb2FkVHJlZShkZXB0aCAtIDEsIHRhZyksCi0gICAgICByaWdodDogR2VuZXJhdGVQ
YXlsb2FkVHJlZShkZXB0aCAtIDEsIHRhZykKLSAgICB9OwotICB9Ci19Ci0KLQotZnVuY3Rpb24g
R2VuZXJhdGVLZXkoKSB7Ci0gIC8vIFRoZSBiZW5jaG1hcmsgZnJhbWV3b3JrIGd1YXJhbnRlZXMg
dGhhdCBNYXRoLnJhbmRvbSBpcwotICAvLyBkZXRlcm1pbmlzdGljOyBzZWUgYmFzZS5qcy4KLSAg
cmV0dXJuIE1hdGgucmFuZG9tKCk7Ci19Ci0KLXZhciBzcGxheVNhbXBsZXMgPSBbXTsKLQotZnVu
Y3Rpb24gU3BsYXlMYXRlbmN5KCkgewotICByZXR1cm4gc3BsYXlTYW1wbGVzOwotfQotCi1mdW5j
dGlvbiBTcGxheVVwZGF0ZVN0YXRzKHRpbWUpIHsKLSAgdmFyIHBhdXNlID0gdGltZSAtIHNwbGF5
U2FtcGxlVGltZVN0YXJ0OwotICBzcGxheVNhbXBsZVRpbWVTdGFydCA9IHRpbWU7Ci0gIHNwbGF5
U2FtcGxlcy5wdXNoKHBhdXNlKTsKLX0KLQotZnVuY3Rpb24gSW5zZXJ0TmV3Tm9kZSgpIHsKLSAg
Ly8gSW5zZXJ0IG5ldyBub2RlIHdpdGggYSB1bmlxdWUga2V5LgotICB2YXIga2V5OwotICBkbyB7
Ci0gICAga2V5ID0gR2VuZXJhdGVLZXkoKTsKLSAgfSB3aGlsZSAoc3BsYXlUcmVlLmZpbmQoa2V5
KSAhPSBudWxsKTsKLSAgdmFyIHBheWxvYWQgPSBHZW5lcmF0ZVBheWxvYWRUcmVlKGtTcGxheVRy
ZWVQYXlsb2FkRGVwdGgsIFN0cmluZyhrZXkpKTsKLSAgc3BsYXlUcmVlLmluc2VydChrZXksIHBh
eWxvYWQpOwotICByZXR1cm4ga2V5OwotfQotCi0KLWZ1bmN0aW9uIFNwbGF5U2V0dXAoKSB7Ci0g
IC8vIENoZWNrIGlmIHRoZSBwbGF0Zm9ybSBoYXMgdGhlIHBlcmZvcm1hbmNlLm5vdyBoaWdoIHJl
c29sdXRpb24gdGltZXIuCi0gIC8vIElmIG5vdCwgdGhyb3cgZXhjZXB0aW9uIGFuZCBxdWl0Lgot
ICBpZiAoIXBlcmZvcm1hbmNlLm5vdykgewotICAgIHRocm93ICJQZXJmb3JtYW5jZU5vd1Vuc3Vw
cG9ydGVkIjsKLSAgfQotCi0gIHNwbGF5VHJlZSA9IG5ldyBTcGxheVRyZWUoKTsKLSAgc3BsYXlT
YW1wbGVUaW1lU3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKQotICBmb3IgKHZhciBpID0gMDsgaSA8
IGtTcGxheVRyZWVTaXplOyBpKyspIHsKLSAgICBJbnNlcnROZXdOb2RlKCk7Ci0gICAgaWYgKChp
KzEpICUgMjAgPT0gMTkpIHsKLSAgICAgIFNwbGF5VXBkYXRlU3RhdHMocGVyZm9ybWFuY2Uubm93
KCkpOwotICAgIH0KLSAgfQotfQotCi0KLWZ1bmN0aW9uIFNwbGF5VGVhckRvd24oKSB7Ci0gIC8v
IEFsbG93IHRoZSBnYXJiYWdlIGNvbGxlY3RvciB0byByZWNsYWltIHRoZSBtZW1vcnkKLSAgLy8g
dXNlZCBieSB0aGUgc3BsYXkgdHJlZSBubyBtYXR0ZXIgaG93IHdlIGV4aXQgdGhlCi0gIC8vIHRl
YXIgZG93biBmdW5jdGlvbi4KLSAgdmFyIGtleXMgPSBzcGxheVRyZWUuZXhwb3J0S2V5cygpOwot
ICBzcGxheVRyZWUgPSBudWxsOwotCi0gIHNwbGF5U2FtcGxlcyA9IFtdOwotCi0gIC8vIFZlcmlm
eSB0aGF0IHRoZSBzcGxheSB0cmVlIGhhcyB0aGUgcmlnaHQgc2l6ZS4KLSAgdmFyIGxlbmd0aCA9
IGtleXMubGVuZ3RoOwotICBpZiAobGVuZ3RoICE9IGtTcGxheVRyZWVTaXplKSB7Ci0gICAgdGhy
b3cgbmV3IEVycm9yKCJTcGxheSB0cmVlIGhhcyB3cm9uZyBzaXplIik7Ci0gIH0KLQotICAvLyBW
ZXJpZnkgdGhhdCB0aGUgc3BsYXkgdHJlZSBoYXMgc29ydGVkLCB1bmlxdWUga2V5cy4KLSAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBsZW5ndGggLSAxOyBpKyspIHsKLSAgICBpZiAoa2V5c1tpXSA+PSBr
ZXlzW2kgKyAxXSkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCJTcGxheSB0cmVlIG5vdCBzb3J0
ZWQiKTsKLSAgICB9Ci0gIH0KLX0KLQotCi1mdW5jdGlvbiBTcGxheVJ1bigpIHsKLSAgLy8gUmVw
bGFjZSBhIGZldyBub2RlcyBpbiB0aGUgc3BsYXkgdHJlZS4KLSAgZm9yICh2YXIgaSA9IDA7IGkg
PCBrU3BsYXlUcmVlTW9kaWZpY2F0aW9uczsgaSsrKSB7Ci0gICAgdmFyIGtleSA9IEluc2VydE5l
d05vZGUoKTsKLSAgICB2YXIgZ3JlYXRlc3QgPSBzcGxheVRyZWUuZmluZEdyZWF0ZXN0TGVzc1Ro
YW4oa2V5KTsKLSAgICBpZiAoZ3JlYXRlc3QgPT0gbnVsbCkgc3BsYXlUcmVlLnJlbW92ZShrZXkp
OwotICAgIGVsc2Ugc3BsYXlUcmVlLnJlbW92ZShncmVhdGVzdC5rZXkpOwotICB9Ci0gIFNwbGF5
VXBkYXRlU3RhdHMocGVyZm9ybWFuY2Uubm93KCkpOwotfQotCi0KLS8qKgotICogQ29uc3RydWN0
cyBhIFNwbGF5IHRyZWUuICBBIHNwbGF5IHRyZWUgaXMgYSBzZWxmLWJhbGFuY2luZyBiaW5hcnkK
LSAqIHNlYXJjaCB0cmVlIHdpdGggdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgdGhhdCByZWNlbnRs
eSBhY2Nlc3NlZAotICogZWxlbWVudHMgYXJlIHF1aWNrIHRvIGFjY2VzcyBhZ2Fpbi4gSXQgcGVy
Zm9ybXMgYmFzaWMgb3BlcmF0aW9ucwotICogc3VjaCBhcyBpbnNlcnRpb24sIGxvb2stdXAgYW5k
IHJlbW92YWwgaW4gTyhsb2cobikpIGFtb3J0aXplZCB0aW1lLgotICoKLSAqIEBjb25zdHJ1Y3Rv
cgotICovCi1mdW5jdGlvbiBTcGxheVRyZWUoKSB7Ci19OwotCi0KLS8qKgotICogUG9pbnRlciB0
byB0aGUgcm9vdCBub2RlIG9mIHRoZSB0cmVlLgotICoKLSAqIEB0eXBlIHtTcGxheVRyZWUuTm9k
ZX0KLSAqIEBwcml2YXRlCi0gKi8KLVNwbGF5VHJlZS5wcm90b3R5cGUucm9vdF8gPSBudWxsOwot
Ci0KLS8qKgotICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgdHJlZSBpcyBlbXB0eS4K
LSAqLwotU3BsYXlUcmVlLnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7Ci0gIHJldHVy
biAhdGhpcy5yb290XzsKLX07Ci0KLQotLyoqCi0gKiBJbnNlcnRzIGEgbm9kZSBpbnRvIHRoZSB0
cmVlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgYW5kIHZhbHVlIGlmCi0gKiB0aGUgdHJlZSBkb2Vz
IG5vdCBhbHJlYWR5IGNvbnRhaW4gYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuIElmCi0g
KiB0aGUgdmFsdWUgaXMgaW5zZXJ0ZWQsIGl0IGJlY29tZXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUu
Ci0gKgotICogQHBhcmFtIHtudW1iZXJ9IGtleSBLZXkgdG8gaW5zZXJ0IGludG8gdGhlIHRyZWUu
Ci0gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIGluc2VydCBpbnRvIHRoZSB0cmVlLgotICov
Ci1TcGxheVRyZWUucHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKLSAg
aWYgKHRoaXMuaXNFbXB0eSgpKSB7Ci0gICAgdGhpcy5yb290XyA9IG5ldyBTcGxheVRyZWUuTm9k
ZShrZXksIHZhbHVlKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgLy8gU3BsYXkgb24gdGhlIGtleSB0
byBtb3ZlIHRoZSBsYXN0IG5vZGUgb24gdGhlIHNlYXJjaCBwYXRoIGZvcgotICAvLyB0aGUga2V5
IHRvIHRoZSByb290IG9mIHRoZSB0cmVlLgotICB0aGlzLnNwbGF5XyhrZXkpOwotICBpZiAodGhp
cy5yb290Xy5rZXkgPT0ga2V5KSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIHZhciBub2RlID0gbmV3
IFNwbGF5VHJlZS5Ob2RlKGtleSwgdmFsdWUpOwotICBpZiAoa2V5ID4gdGhpcy5yb290Xy5rZXkp
IHsKLSAgICBub2RlLmxlZnQgPSB0aGlzLnJvb3RfOwotICAgIG5vZGUucmlnaHQgPSB0aGlzLnJv
b3RfLnJpZ2h0OwotICAgIHRoaXMucm9vdF8ucmlnaHQgPSBudWxsOwotICB9IGVsc2UgewotICAg
IG5vZGUucmlnaHQgPSB0aGlzLnJvb3RfOwotICAgIG5vZGUubGVmdCA9IHRoaXMucm9vdF8ubGVm
dDsKLSAgICB0aGlzLnJvb3RfLmxlZnQgPSBudWxsOwotICB9Ci0gIHRoaXMucm9vdF8gPSBub2Rl
OwotfTsKLQotCi0vKioKLSAqIFJlbW92ZXMgYSBub2RlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkg
ZnJvbSB0aGUgdHJlZSBpZiB0aGUgdHJlZQotICogY29udGFpbnMgYSBub2RlIHdpdGggdGhpcyBr
ZXkuIFRoZSByZW1vdmVkIG5vZGUgaXMgcmV0dXJuZWQuIElmIHRoZQotICoga2V5IGlzIG5vdCBm
b3VuZCwgYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KLSAqCi0gKiBAcGFyYW0ge251bWJlcn0ga2V5
IEtleSB0byBmaW5kIGFuZCByZW1vdmUgZnJvbSB0aGUgdHJlZS4KLSAqIEByZXR1cm4ge1NwbGF5
VHJlZS5Ob2RlfSBUaGUgcmVtb3ZlZCBub2RlLgotICovCi1TcGxheVRyZWUucHJvdG90eXBlLnJl
bW92ZSA9IGZ1bmN0aW9uKGtleSkgewotICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKLSAgICB0aHJv
dyBFcnJvcignS2V5IG5vdCBmb3VuZDogJyArIGtleSk7Ci0gIH0KLSAgdGhpcy5zcGxheV8oa2V5
KTsKLSAgaWYgKHRoaXMucm9vdF8ua2V5ICE9IGtleSkgewotICAgIHRocm93IEVycm9yKCdLZXkg
bm90IGZvdW5kOiAnICsga2V5KTsKLSAgfQotICB2YXIgcmVtb3ZlZCA9IHRoaXMucm9vdF87Ci0g
IGlmICghdGhpcy5yb290Xy5sZWZ0KSB7Ci0gICAgdGhpcy5yb290XyA9IHRoaXMucm9vdF8ucmln
aHQ7Ci0gIH0gZWxzZSB7Ci0gICAgdmFyIHJpZ2h0ID0gdGhpcy5yb290Xy5yaWdodDsKLSAgICB0
aGlzLnJvb3RfID0gdGhpcy5yb290Xy5sZWZ0OwotICAgIC8vIFNwbGF5IHRvIG1ha2Ugc3VyZSB0
aGF0IHRoZSBuZXcgcm9vdCBoYXMgYW4gZW1wdHkgcmlnaHQgY2hpbGQuCi0gICAgdGhpcy5zcGxh
eV8oa2V5KTsKLSAgICAvLyBJbnNlcnQgdGhlIG9yaWdpbmFsIHJpZ2h0IGNoaWxkIGFzIHRoZSBy
aWdodCBjaGlsZCBvZiB0aGUgbmV3Ci0gICAgLy8gcm9vdC4KLSAgICB0aGlzLnJvb3RfLnJpZ2h0
ID0gcmlnaHQ7Ci0gIH0KLSAgcmV0dXJuIHJlbW92ZWQ7Ci19OwotCi0KLS8qKgotICogUmV0dXJu
cyB0aGUgbm9kZSBoYXZpbmcgdGhlIHNwZWNpZmllZCBrZXkgb3IgbnVsbCBpZiB0aGUgdHJlZSBk
b2Vzbid0IGNvbnRhaW4KLSAqIGEgbm9kZSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LgotICoKLSAq
IEBwYXJhbSB7bnVtYmVyfSBrZXkgS2V5IHRvIGZpbmQgaW4gdGhlIHRyZWUuCi0gKiBAcmV0dXJu
IHtTcGxheVRyZWUuTm9kZX0gTm9kZSBoYXZpbmcgdGhlIHNwZWNpZmllZCBrZXkuCi0gKi8KLVNw
bGF5VHJlZS5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uKGtleSkgewotICBpZiAodGhpcy5pc0Vt
cHR5KCkpIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotICB0aGlzLnNwbGF5XyhrZXkpOwotICBy
ZXR1cm4gdGhpcy5yb290Xy5rZXkgPT0ga2V5ID8gdGhpcy5yb290XyA6IG51bGw7Ci19OwotCi0K
LS8qKgotICogQHJldHVybiB7U3BsYXlUcmVlLk5vZGV9IE5vZGUgaGF2aW5nIHRoZSBtYXhpbXVt
IGtleSB2YWx1ZS4KLSAqLwotU3BsYXlUcmVlLnByb3RvdHlwZS5maW5kTWF4ID0gZnVuY3Rpb24o
b3B0X3N0YXJ0Tm9kZSkgewotICBpZiAodGhpcy5pc0VtcHR5KCkpIHsKLSAgICByZXR1cm4gbnVs
bDsKLSAgfQotICB2YXIgY3VycmVudCA9IG9wdF9zdGFydE5vZGUgfHwgdGhpcy5yb290XzsKLSAg
d2hpbGUgKGN1cnJlbnQucmlnaHQpIHsKLSAgICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKLSAg
fQotICByZXR1cm4gY3VycmVudDsKLX07Ci0KLQotLyoqCi0gKiBAcmV0dXJuIHtTcGxheVRyZWUu
Tm9kZX0gTm9kZSBoYXZpbmcgdGhlIG1heGltdW0ga2V5IHZhbHVlIHRoYXQKLSAqICAgICBpcyBs
ZXNzIHRoYW4gdGhlIHNwZWNpZmllZCBrZXkgdmFsdWUuCi0gKi8KLVNwbGF5VHJlZS5wcm90b3R5
cGUuZmluZEdyZWF0ZXN0TGVzc1RoYW4gPSBmdW5jdGlvbihrZXkpIHsKLSAgaWYgKHRoaXMuaXNF
bXB0eSgpKSB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLSAgLy8gU3BsYXkgb24gdGhlIGtleSB0
byBtb3ZlIHRoZSBub2RlIHdpdGggdGhlIGdpdmVuIGtleSBvciB0aGUgbGFzdAotICAvLyBub2Rl
IG9uIHRoZSBzZWFyY2ggcGF0aCB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLgotICB0aGlzLnNwbGF5
XyhrZXkpOwotICAvLyBOb3cgdGhlIHJlc3VsdCBpcyBlaXRoZXIgdGhlIHJvb3Qgbm9kZSBvciB0
aGUgZ3JlYXRlc3Qgbm9kZSBpbgotICAvLyB0aGUgbGVmdCBzdWJ0cmVlLgotICBpZiAodGhpcy5y
b290Xy5rZXkgPCBrZXkpIHsKLSAgICByZXR1cm4gdGhpcy5yb290XzsKLSAgfSBlbHNlIGlmICh0
aGlzLnJvb3RfLmxlZnQpIHsKLSAgICByZXR1cm4gdGhpcy5maW5kTWF4KHRoaXMucm9vdF8ubGVm
dCk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLX07Ci0KLQotLyoqCi0gKiBA
cmV0dXJuIHtBcnJheTwqPn0gQW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGtleXMgb2YgdHJl
ZSdzIG5vZGVzLgotICovCi1TcGxheVRyZWUucHJvdG90eXBlLmV4cG9ydEtleXMgPSBmdW5jdGlv
bigpIHsKLSAgdmFyIHJlc3VsdCA9IFtdOwotICBpZiAoIXRoaXMuaXNFbXB0eSgpKSB7Ci0gICAg
dGhpcy5yb290Xy50cmF2ZXJzZV8oZnVuY3Rpb24obm9kZSkgeyByZXN1bHQucHVzaChub2RlLmtl
eSk7IH0pOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19OwotCi0KLS8qKgotICogUGVyZm9ybSB0
aGUgc3BsYXkgb3BlcmF0aW9uIGZvciB0aGUgZ2l2ZW4ga2V5LiBNb3ZlcyB0aGUgbm9kZSB3aXRo
Ci0gKiB0aGUgZ2l2ZW4ga2V5IHRvIHRoZSB0b3Agb2YgdGhlIHRyZWUuICBJZiBubyBub2RlIGhh
cyB0aGUgZ2l2ZW4KLSAqIGtleSwgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggaXMg
bW92ZWQgdG8gdGhlIHRvcCBvZiB0aGUKLSAqIHRyZWUuIFRoaXMgaXMgdGhlIHNpbXBsaWZpZWQg
dG9wLWRvd24gc3BsYXlpbmcgYWxnb3JpdGhtIGZyb206Ci0gKiAiU2VsZi1hZGp1c3RpbmcgQmlu
YXJ5IFNlYXJjaCBUcmVlcyIgYnkgU2xlYXRvciBhbmQgVGFyamFuCi0gKgotICogQHBhcmFtIHtu
dW1iZXJ9IGtleSBLZXkgdG8gc3BsYXkgdGhlIHRyZWUgb24uCi0gKiBAcHJpdmF0ZQotICovCi1T
cGxheVRyZWUucHJvdG90eXBlLnNwbGF5XyA9IGZ1bmN0aW9uKGtleSkgewotICBpZiAodGhpcy5p
c0VtcHR5KCkpIHsKLSAgICByZXR1cm47Ci0gIH0KLSAgLy8gQ3JlYXRlIGEgZHVtbXkgbm9kZS4g
IFRoZSB1c2Ugb2YgdGhlIGR1bW15IG5vZGUgaXMgYSBiaXQKLSAgLy8gY291bnRlci1pbnR1aXRp
dmU6IFRoZSByaWdodCBjaGlsZCBvZiB0aGUgZHVtbXkgbm9kZSB3aWxsIGhvbGQKLSAgLy8gdGhl
IEwgdHJlZSBvZiB0aGUgYWxnb3JpdGhtLiAgVGhlIGxlZnQgY2hpbGQgb2YgdGhlIGR1bW15IG5v
ZGUKLSAgLy8gd2lsbCBob2xkIHRoZSBSIHRyZWUgb2YgdGhlIGFsZ29yaXRobS4gIFVzaW5nIGEg
ZHVtbXkgbm9kZSwgbGVmdAotICAvLyBhbmQgcmlnaHQgd2lsbCBhbHdheXMgYmUgbm9kZXMgYW5k
IHdlIGF2b2lkIHNwZWNpYWwgY2FzZXMuCi0gIHZhciBkdW1teSwgbGVmdCwgcmlnaHQ7Ci0gIGR1
bW15ID0gbGVmdCA9IHJpZ2h0ID0gbmV3IFNwbGF5VHJlZS5Ob2RlKG51bGwsIG51bGwpOwotICB2
YXIgY3VycmVudCA9IHRoaXMucm9vdF87Ci0gIHdoaWxlICh0cnVlKSB7Ci0gICAgaWYgKGtleSA8
IGN1cnJlbnQua2V5KSB7Ci0gICAgICBpZiAoIWN1cnJlbnQubGVmdCkgewotICAgICAgICBicmVh
azsKLSAgICAgIH0KLSAgICAgIGlmIChrZXkgPCBjdXJyZW50LmxlZnQua2V5KSB7Ci0gICAgICAg
IC8vIFJvdGF0ZSByaWdodC4KLSAgICAgICAgdmFyIHRtcCA9IGN1cnJlbnQubGVmdDsKLSAgICAg
ICAgY3VycmVudC5sZWZ0ID0gdG1wLnJpZ2h0OwotICAgICAgICB0bXAucmlnaHQgPSBjdXJyZW50
OwotICAgICAgICBjdXJyZW50ID0gdG1wOwotICAgICAgICBpZiAoIWN1cnJlbnQubGVmdCkgewot
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBMaW5rIHJpZ2h0
LgotICAgICAgcmlnaHQubGVmdCA9IGN1cnJlbnQ7Ci0gICAgICByaWdodCA9IGN1cnJlbnQ7Ci0g
ICAgICBjdXJyZW50ID0gY3VycmVudC5sZWZ0OwotICAgIH0gZWxzZSBpZiAoa2V5ID4gY3VycmVu
dC5rZXkpIHsKLSAgICAgIGlmICghY3VycmVudC5yaWdodCkgewotICAgICAgICBicmVhazsKLSAg
ICAgIH0KLSAgICAgIGlmIChrZXkgPiBjdXJyZW50LnJpZ2h0LmtleSkgewotICAgICAgICAvLyBS
b3RhdGUgbGVmdC4KLSAgICAgICAgdmFyIHRtcCA9IGN1cnJlbnQucmlnaHQ7Ci0gICAgICAgIGN1
cnJlbnQucmlnaHQgPSB0bXAubGVmdDsKLSAgICAgICAgdG1wLmxlZnQgPSBjdXJyZW50OwotICAg
ICAgICBjdXJyZW50ID0gdG1wOwotICAgICAgICBpZiAoIWN1cnJlbnQucmlnaHQpIHsKLSAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gTGluayBsZWZ0LgotICAg
ICAgbGVmdC5yaWdodCA9IGN1cnJlbnQ7Ci0gICAgICBsZWZ0ID0gY3VycmVudDsKLSAgICAgIGN1
cnJlbnQgPSBjdXJyZW50LnJpZ2h0OwotICAgIH0gZWxzZSB7Ci0gICAgICBicmVhazsKLSAgICB9
Ci0gIH0KLSAgLy8gQXNzZW1ibGUuCi0gIGxlZnQucmlnaHQgPSBjdXJyZW50LmxlZnQ7Ci0gIHJp
Z2h0LmxlZnQgPSBjdXJyZW50LnJpZ2h0OwotICBjdXJyZW50LmxlZnQgPSBkdW1teS5yaWdodDsK
LSAgY3VycmVudC5yaWdodCA9IGR1bW15LmxlZnQ7Ci0gIHRoaXMucm9vdF8gPSBjdXJyZW50Owot
fTsKLQotCi0vKioKLSAqIENvbnN0cnVjdHMgYSBTcGxheSB0cmVlIG5vZGUuCi0gKgotICogQHBh
cmFtIHtudW1iZXJ9IGtleSBLZXkuCi0gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlLgotICovCi1T
cGxheVRyZWUuTm9kZSA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHsKLSAgdGhpcy5rZXkgPSBrZXk7
Ci0gIHRoaXMudmFsdWUgPSB2YWx1ZTsKLX07Ci0KLQotLyoqCi0gKiBAdHlwZSB7U3BsYXlUcmVl
Lk5vZGV9Ci0gKi8KLVNwbGF5VHJlZS5Ob2RlLnByb3RvdHlwZS5sZWZ0ID0gbnVsbDsKLQotCi0v
KioKLSAqIEB0eXBlIHtTcGxheVRyZWUuTm9kZX0KLSAqLwotU3BsYXlUcmVlLk5vZGUucHJvdG90
eXBlLnJpZ2h0ID0gbnVsbDsKLQotCi0vKioKLSAqIFBlcmZvcm1zIGFuIG9yZGVyZWQgdHJhdmVy
c2FsIG9mIHRoZSBzdWJ0cmVlIHN0YXJ0aW5nIGF0Ci0gKiB0aGlzIFNwbGF5VHJlZS5Ob2RlLgot
ICoKLSAqIEBwYXJhbSB7ZnVuY3Rpb24oU3BsYXlUcmVlLk5vZGUpfSBmIFZpc2l0b3IgZnVuY3Rp
b24uCi0gKiBAcHJpdmF0ZQotICovCi1TcGxheVRyZWUuTm9kZS5wcm90b3R5cGUudHJhdmVyc2Vf
ID0gZnVuY3Rpb24oZikgewotICB2YXIgY3VycmVudCA9IHRoaXM7Ci0gIHdoaWxlIChjdXJyZW50
KSB7Ci0gICAgdmFyIGxlZnQgPSBjdXJyZW50LmxlZnQ7Ci0gICAgaWYgKGxlZnQpIGxlZnQudHJh
dmVyc2VfKGYpOwotICAgIGYoY3VycmVudCk7Ci0gICAgY3VycmVudCA9IGN1cnJlbnQucmlnaHQ7
Ci0gIH0KLX07Ci1mdW5jdGlvbiBqc2NTZXRVcCgpIHsKLSAgICBTcGxheVNldHVwKCk7Ci19Ci0K
LWZ1bmN0aW9uIGpzY1RlYXJEb3duKCkgewotICAgIFNwbGF5VGVhckRvd24oKTsKLX0KLQotZnVu
Y3Rpb24ganNjUnVuKCkgewotICAgIFNwbGF5UnVuKCk7Ci19Ci0KLWpzY1NldFVwKCk7Ci12YXIg
X19iZWZvcmUgPSBwcmVjaXNlVGltZSgpOwotdmFyIHRpbWVzID0gW107Ci1mb3IgKHZhciBpID0g
MDsgaSA8IDEwMDAwOyArK2kpIHsKLS8vZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kp
IHsKLSAgICB2YXIgX2JlZm9yZSA9IHByZWNpc2VUaW1lKCk7Ci0gICAganNjUnVuKCk7Ci0gICAg
dmFyIF9hZnRlciA9IHByZWNpc2VUaW1lKCk7Ci0gICAgdGltZXMucHVzaChfYWZ0ZXIgLSBfYmVm
b3JlKTsKLSAgICBmbGFzaEhlYXBBY2Nlc3MoKTsKLX0KLXZhciBfX2FmdGVyID0gcHJlY2lzZVRp
bWUoKTsKLWpzY1RlYXJEb3duKCk7Ci0KLWZ1bmN0aW9uIGF2ZXJhZ2VBYm92ZVBlcmNlbnRpbGUo
bnVtYmVycywgcGVyY2VudGlsZSkgewotICAgIC8vIERvbid0IGNoYW5nZSB0aGUgb3JpZ2luYWwg
YXJyYXkuCi0gICAgbnVtYmVycyA9IG51bWJlcnMuc2xpY2UoKTsKLSAgICAKLSAgICAvLyBTb3J0
IGluIGFzY2VuZGluZyBvcmRlci4KLSAgICBudW1iZXJzLnNvcnQoZnVuY3Rpb24oYSwgYikgeyBy
ZXR1cm4gYSAtIGI7IH0pOwotICAgIAotICAgIC8vIE5vdyB0aGUgZWxlbWVudHMgd2Ugd2FudCBh
cmUgYXQgdGhlIGVuZC4gS2VlcCByZW1vdmluZyB0aGVtIHVudGlsIHRoZSBhcnJheSBzaXplIHNo
cmlua3MgdG9vIG11Y2guCi0gICAgLy8gRXhhbXBsZXMgYXNzdW1pbmcgcGVyY2VudGlsZSA9IDk5
OgotICAgIC8vCi0gICAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwOiB3ZSB3aWxs
IHJlbW92ZSBqdXN0IHRoZSB3b3JzdCBlbnRyeSBhbmQgdGhlbiBub3QgcmVtb3ZlIGFueW1vcmUs
Ci0gICAgLy8gICBzaW5jZSB0aGVuIG51bWJlcnMubGVuZ3RoIC8gb3JpZ2luYWxMZW5ndGggPSAw
Ljk5LgotICAgIC8vCi0gICAgLy8gLSBudW1iZXJzLmxlbmd0aCBzdGFydHMgYXQgMTAwMDogd2Ug
d2lsbCByZW1vdmUgdGhlIHRlbiB3b3JzdC4KLSAgICAvLwotICAgIC8vIC0gbnVtYmVycy5sZW5n
dGggc3RhcnRzIGF0IDEwOiB3ZSB3aWxsIHJlbW92ZSBqdXN0IHRoZSB3b3JzdC4KLSAgICB2YXIg
bnVtYmVyc1dlV2FudCA9IFtdOwotICAgIHZhciBvcmlnaW5hbExlbmd0aCA9IG51bWJlcnMubGVu
Z3RoOwotICAgIHdoaWxlIChudW1iZXJzLmxlbmd0aCAvIG9yaWdpbmFsTGVuZ3RoID4gcGVyY2Vu
dGlsZSAvIDEwMCkKLSAgICAgICAgbnVtYmVyc1dlV2FudC5wdXNoKG51bWJlcnMucG9wKCkpOwot
ICAgIAotICAgIHZhciBzdW0gPSAwOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyc1dl
V2FudC5sZW5ndGg7ICsraSkKLSAgICAgICAgc3VtICs9IG51bWJlcnNXZVdhbnRbaV07Ci0gICAg
Ci0gICAgdmFyIHJlc3VsdCA9IHN1bSAvIG51bWJlcnNXZVdhbnQubGVuZ3RoOwotICAgIAotICAg
IC8vIERvIGEgc2FuaXR5IGNoZWNrLgotICAgIGlmIChudW1iZXJzLmxlbmd0aCAmJiByZXN1bHQg
PCBudW1iZXJzW251bWJlcnMubGVuZ3RoIC0gMV0pIHsKLSAgICAgICAgdGhyb3cgIlNhbml0eSBj
aGVjayBmYWlsOiB0aGUgd29yc3QgY2FzZSByZXN1bHQgaXMgIiArIHJlc3VsdCArCi0gICAgICAg
ICAgICAiIGJ1dCB3ZSBkaWRuJ3QgdGFrZSBpbnRvIGFjY291bnQgIiArIG51bWJlcnM7Ci0gICAg
fQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXByaW50KCJUaGF0IHRvb2sgIiArIChf
X2FmdGVyIC0gX19iZWZvcmUpICogMTAwMCArICIgbXMuIik7Ci0KLWZ1bmN0aW9uIHByaW50UGVy
Y2VudGlsZShwZXJjZW50aWxlKQotewotICAgIHByaW50KCJBYm92ZSAiICsgcGVyY2VudGlsZSAr
ICIlOiAiICsgYXZlcmFnZUFib3ZlUGVyY2VudGlsZSh0aW1lcywgcGVyY2VudGlsZSkgKiAxMDAw
ICsgIiBtcy4iKTsKLX0KLQotcHJpbnRQZXJjZW50aWxlKDk5LjkpOwotcHJpbnRQZXJjZW50aWxl
KDk5LjUpOwotcHJpbnRQZXJjZW50aWxlKDk5KTsKLXByaW50UGVyY2VudGlsZSg5Ny41KTsKLXBy
aW50UGVyY2VudGlsZSg5NSk7Ci1wcmludFBlcmNlbnRpbGUoOTApOwotcHJpbnRQZXJjZW50aWxl
KDc1KTsKLXByaW50UGVyY2VudGlsZSg1MCk7Ci1wcmludFBlcmNlbnRpbGUoMCk7Ci0KLWdjKCk7
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>