<?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>261793</bug_id>
          
          <creation_ts>2023-09-19 18:28:32 -0700</creation_ts>
          <short_desc>REGRESSION(268130@main): 0.3~% SP3 regression</short_desc>
          <delta_ts>2023-09-19 18:34:25 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>261595</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1978518</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2023-09-19 18:28:32 -0700</bug_when>
    <thetext>https://commits.webkit.org/268130@main introduced a regression:
0.3~% SP3 regression

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>1978520</commentid>
    <comment_count>1</comment_count>
      <attachid>467772</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2023-09-19 18:28:39 -0700</bug_when>
    <thetext>Created attachment 467772
REVERT of 268130@main

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 revert will be successful.  This process takes approximately 15 minutes.

If you would like to land the revert 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>1978524</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2023-09-19 18:33:49 -0700</bug_when>
    <thetext>Committed 268168@main (5ed23f1cad22): &lt;https://commits.webkit.org/268168@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 467772.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1978525</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2023-09-19 18:34:25 -0700</bug_when>
    <thetext>&lt;rdar://problem/115758475&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>467772</attachid>
            <date>2023-09-19 18:28:39 -0700</date>
            <delta_ts>2023-09-19 18:33:50 -0700</delta_ts>
            <desc>REVERT of 268130@main</desc>
            <filename>bug-261793-20230920012838.patch</filename>
            <type>text/plain</type>
            <size>136228</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">RnJvbSA3Mjg1NGFkYmQ2ZjU1NzM2M2JjODk2MDE3YmZmNDkyZmE0M2M4YmMxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDb21taXQgUXVldWUgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3Jn
PgpEYXRlOiBXZWQsIDIwIFNlcCAyMDIzIDAxOjI4OjM2ICswMDAwClN1YmplY3Q6IFtQQVRDSF0g
VW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIDI2ODEzMEBtYWluLgogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI2MTc5MwoKMC4zfiUgU1AzIHJlZ3Jlc3Npb24KClJldmVydGVk
IGNoYW5nZXNldDoKCiJbSlNDXSBTdG9wIGdlbmVyYXRpbmcgc2xvdyBwYXRoIGZvciBEYXRhSUMg
QmFzZWluZSBKSVQiCmh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjE1
OTUKaHR0cHM6Ly9jb21taXRzLndlYmtpdC5vcmcvMjY4MTMwQG1haW4KLS0tCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCAgfCAgIDIgKy0KIC4uLi9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwICB8ICAyMyArLQogLi4uL2J5dGVjb2Rl
L0lubGluZUNhY2hlQ29tcGlsZXIuY3BwICAgICAgICAgIHwgNDM4ICstLS0tLS0tLS0KIC4uLi9i
eXRlY29kZS9JbmxpbmVDYWNoZUNvbXBpbGVyLmggICAgICAgICAgICB8ICAgMiAtCiAuLi4vYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwICAgICAgICAgICAgfCAgMTIgKy0KIC4uLi9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oICAgICAgICAgICAgICB8ICAgMyArLQogLi4uL2RmZy9E
RkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggICAgICAgIHwgICAyICstCiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaCAgICAgICAgfCAgIDEgLQogLi4uL0phdmFTY3Jp
cHRDb3JlL2ppdC9CYXNlbGluZUpJVFJlZ2lzdGVycy5oIHwgICAzICstCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAgICAgICAgICAgICAgfCAgNDYgKy0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmggICAgICAgICAgICAgICB8ICA1NyArLQogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcCAgICAgICAgIHwgIDYyICstCiAuLi4vaml0L0pJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmNwcCAgICAgICAgICAgfCAgMjggKy0KIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lcy5oICAgICAgICB8ICAgNyAtCiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwICAgICAgfCAgNTAgKy0KIC4uLi9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwICB8IDc0NSArKysrKysrKysrKysrKysrLS0KIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaCAgICAgICB8ICA0NSArLQogMTcgZmls
ZXMgY2hhbmdlZCwgOTczIGluc2VydGlvbnMoKyksIDU1MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDIwNGM5NDhkNjVj
My4uNDA3MmY1NmNhMjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcApAQCAtNzc1LDcgKzc3NSw3IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXR1cFdpdGhV
bmxpbmtlZEJhc2VsaW5lQ29kZShSZWY8QmFzZWxpbmVKSVRDb2RlPiBqaXRDb2RlKQogICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW50cnku
cG9pbnRlcigpKTsKICAgICAgICAgICAgICAgICBCYXNlbGluZVVubGlua2VkU3RydWN0dXJlU3R1
YkluZm8mIHVubGlua2VkU3R1YkluZm8gPSBqaXRDb2RlLT5tX3VubGlua2VkU3R1YkluZm9zW2lu
ZGV4XTsKICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBiYXNl
bGluZUpJVERhdGEtPm1fc3R1YkluZm9zW2luZGV4XTsKLSAgICAgICAgICAgICAgICBzdHViSW5m
by5pbml0aWFsaXplRnJvbVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8odm0oKSwgdW5saW5rZWRT
dHViSW5mbyk7CisgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdGlhbGl6ZUZyb21Vbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKHVubGlua2VkU3R1YkluZm8pOwogICAgICAgICAgICAgICAgIGJh
c2VsaW5lSklURGF0YS0+YXQoaSkgPSAmc3R1YkluZm87CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5saW5lQWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Jbmxp
bmVBY2Nlc3MuY3BwCmluZGV4IDIxOTkyODNiZDc2Zi4uNTY1NTY3OTU5NzgzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQWNjZXNzLmNwcApAQCAtNDQ2LDE4
ICs0NDYsMjUgQEAgdm9pZCBJbmxpbmVBY2Nlc3M6OnJld2lyZVN0dWJBc0p1bXBJbkFjY2VzcyhD
b2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkkKIAogdm9pZCBJbmxpbmVBY2Nlc3M6
OnJlc2V0U3R1YkFzSnVtcEluQWNjZXNzKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCiB7Ci0gICAgaWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGNv
ZGVCbG9jay0+aml0VHlwZSgpKSkKLSAgICAgICAgcmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzKGNv
ZGVCbG9jaywgc3R1YkluZm8sIENvZGVMb2NhdGlvbkxhYmVsIHsgSW5saW5lQ2FjaGVDb21waWxl
cjo6Z2VuZXJhdGVTbG93UGF0aENvZGUoY29kZUJsb2NrLT52bSgpLCBzdHViSW5mby5hY2Nlc3NU
eXBlKS5jb2RlKCkudGVtcGxhdGUgcmV0YWdnZWQ8SklUU3R1YlJvdXRpbmVQdHJUYWc+KCkgfSk7
Ci0gICAgZWxzZQotICAgICAgICByZXdpcmVTdHViQXNKdW1wSW5BY2Nlc3MoY29kZUJsb2NrLCBz
dHViSW5mbywgc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uKTsKKyAgICBpZiAoY29kZUJs
b2NrLT51c2VEYXRhSUMoKSkgeworICAgICAgICBzdHViSW5mby5tX2NvZGVQdHIgPSBzdHViSW5m
by5zbG93UGF0aFN0YXJ0TG9jYXRpb247CisgICAgICAgIHN0dWJJbmZvLm1faW5saW5lQWNjZXNz
QmFzZVN0cnVjdHVyZUlELmNsZWFyKCk7IC8vIENsZWFyIG91dCB0aGUgaW5saW5lIGFjY2VzcyBj
b2RlLgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ0NhbGxIZWxwZXJzOjplbWl0SklU
Q29kZU92ZXIoc3R1YkluZm8uc3RhcnRMb2NhdGlvbi5yZXRhZ2dlZDxKU0ludGVybmFsUHRyVGFn
PigpLCBzY29wZWRMYW1iZGE8dm9pZChDQ2FsbEhlbHBlcnMmKT4oWyZdKENDYWxsSGVscGVycyYg
aml0KSB7CisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgYSBub3Agc2xlZCBoZXJlIGJlY2F1c2Ug
bm9ib2R5IHNob3VsZCBiZSBqdW1waW5nIGludG8gdGhlIG1pZGRsZSBvZiBhbiBJQy4KKyAgICAg
ICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsKKyAgICAgICAgYXV0byBzbG93UGF0aFN0YXJ0TG9j
YXRpb24gPSBzdHViSW5mby5zbG93UGF0aFN0YXJ0TG9jYXRpb247CisgICAgICAgIGppdC5hZGRM
aW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhqdW1wLCBzbG93UGF0aFN0YXJ0TG9jYXRpb24pOworICAgICAgICB9KTsKKyAg
ICB9KSwgIklubGluZUFjY2VzczogbGlua2luZyBjb25zdGFudCBqdW1wIik7CiB9CiAKIHZvaWQg
SW5saW5lQWNjZXNzOjpyZXNldFN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNjZXNz
KENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7Ci0g
ICAgaWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGNvZGVCbG9jay0+aml0VHlwZSgpKSkKLSAg
ICAgICAgcmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJs
b2NrLCBzdHViSW5mbywgQ29kZUxvY2F0aW9uTGFiZWwgeyBJbmxpbmVDYWNoZUNvbXBpbGVyOjpn
ZW5lcmF0ZVNsb3dQYXRoQ29kZShjb2RlQmxvY2stPnZtKCksIHN0dWJJbmZvLmFjY2Vzc1R5cGUp
LmNvZGUoKS50ZW1wbGF0ZSByZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKSB9KTsKLSAg
ICBlbHNlCi0gICAgICAgIHJld2lyZVN0dWJBc0p1bXBJbkFjY2Vzc05vdFVzaW5nSW5saW5lQWNj
ZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbik7
CisgICAgcmV3aXJlU3R1YkFzSnVtcEluQWNjZXNzTm90VXNpbmdJbmxpbmVBY2Nlc3MoY29kZUJs
b2NrLCBzdHViSW5mbywgc3R1YkluZm8uc2xvd1BhdGhTdGFydExvY2F0aW9uKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5saW5lQ2FjaGVDb21waWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5saW5lQ2FjaGVDb21waWxlci5jcHAKaW5kZXggMjIyOThkNjJhMjJmLi4xYzE0NzA0OTE5
MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWNo
ZUNvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5l
Q2FjaGVDb21waWxlci5jcHAKQEAgLTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlICJIZWFwLmgiCiAj
aW5jbHVkZSAiSW5zdGFuY2VPZkFjY2Vzc0Nhc2UuaCIKICNpbmNsdWRlICJJbnRyaW5zaWNHZXR0
ZXJBY2Nlc3NDYXNlLmgiCi0jaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIkpTTW9kdWxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU01vZHVs
ZU5hbWVzcGFjZU9iamVjdC5oIgpAQCAtNTEsNyArNTAsNiBAQAogI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiTGlu
a0J1ZmZlci5oIgotI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAj
aW5jbHVkZSAiTWVnYW1vcnBoaWNDYWNoZS5oIgogI2luY2x1ZGUgIk1vZHVsZU5hbWVzcGFjZUFj
Y2Vzc0Nhc2UuaCIKICNpbmNsdWRlICJQcm94eU9iamVjdEFjY2Vzc0Nhc2UuaCIKQEAgLTY0NSw0
MjQgKzY0Myw2IEBAIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBJbmxpbmVDYWNoZUNvbXBpbGVy
OjptYWtlRGVmYXVsdFNjcmF0Y2hBbGxvY2F0b3IoR1BSUmVnCiAgICAgcmV0dXJuIGFsbG9jYXRv
cjsKIH0KIAotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gZ2V0
QnlJZFNsb3dQYXRoQ29kZUdlbmVyYXRvcihWTSYgdm0pCi17Ci0gICAgQ0NhbGxIZWxwZXJzIGpp
dDsKLQotICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUpOwotCi0gICAgdXNpbmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OkdldEJ5SWQ6OmJh
c2VKU1I7Ci0gICAgdXNpbmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OkdldEJ5SWQ6Omdsb2JhbE9i
amVjdEdQUjsKLSAgICB1c2luZyBCYXNlbGluZUpJVFJlZ2lzdGVyczo6R2V0QnlJZDo6c3R1Yklu
Zm9HUFI7Ci0KLSAgICB1bnNpZ25lZCBzdGFja0FkanVzdG1lbnRTaXplID0gU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGppdCwgUmVnaXN0
ZXJTZXQgeyBzdHViSW5mb0dQUiB9LCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCk7Ci0K
LSAgICAvLyBDYWxsIHNsb3cgb3BlcmF0aW9uCi0gICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9u
KHZtKTsKLSAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6aml0
RGF0YVJlZ2lzdGVyLCBCYXNlbGluZUpJVERhdGE6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBn
bG9iYWxPYmplY3RHUFIpOwotICAgIGppdC5zZXR1cEFyZ3VtZW50czxTbG93T3BlcmF0aW9uPihi
YXNlSlNSLCBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSKTsKLSAgICBzdGF0aWNfYXNzZXJ0
KHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDI+KCkgPT0gc3R1YkluZm9HUFIs
ICJOZWVkZWQgZm9yIGJyYW5jaCB0byBzbG93IG9wZXJhdGlvbiB2aWEgU3R1YkluZm8iKTsKLSAg
ICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIE9wZXJhdGlvblB0clRhZyk7Ci0KLSAg
ICBhdXRvIGhhbmRsZUV4Y2VwdGlvbiA9IGppdC5lbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hl
Y2sodm0pOwotCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJz
RnJvbVN0YWNrRm9yQ2FsbChqaXQsIFJlZ2lzdGVyU2V0IHsgc3R1YkluZm9HUFIgfSwgeyB9LCBz
dGFja0FkanVzdG1lbnRTaXplLCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCk7Ci0gICAg
aml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZEb25lTG9jYXRpb24oKSksIEpTSW50ZXJuYWxQdHJUYWcpOwotCi0g
ICAgLy8gV2hpbGUgc3AgaXMgZXh0ZW5kZWQsIGl0IGlzIE9LLiBKdW1wIHRhcmdldCB3aWxsIGFk
anVzdCBpdC4KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKLSAgICBwYXRjaEJ1ZmZlci5s
aW5rKGhhbmRsZUV4Y2VwdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihoYW5k
bGVFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwotICAgIHJl
dHVybiBGSU5BTElaRV9USFVOSyhwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJEYXRhSUMg
Z2V0X2J5X2lkX3Nsb3ciKTsKLX0KLQotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gZ2V0QnlJZFdpdGhUaGlzU2xvd1BhdGhDb2RlR2VuZXJhdG9yKFZNJiB2bSkK
LXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0OwotCi0gICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9IGRl
Y2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplKTsKLQotICAgIHVzaW5nIEJh
c2VsaW5lSklUUmVnaXN0ZXJzOjpHZXRCeUlkV2l0aFRoaXM6OmJhc2VKU1I7Ci0gICAgdXNpbmcg
QmFzZWxpbmVKSVRSZWdpc3RlcnM6OkdldEJ5SWRXaXRoVGhpczo6dGhpc0pTUjsKLSAgICB1c2lu
ZyBCYXNlbGluZUpJVFJlZ2lzdGVyczo6R2V0QnlJZFdpdGhUaGlzOjpnbG9iYWxPYmplY3RHUFI7
Ci0gICAgdXNpbmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OkdldEJ5SWRXaXRoVGhpczo6c3R1Yklu
Zm9HUFI7Ci0KLSAgICB1bnNpZ25lZCBzdGFja0FkanVzdG1lbnRTaXplID0gU2NyYXRjaFJlZ2lz
dGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGppdCwgUmVnaXN0
ZXJTZXQgeyBzdHViSW5mb0dQUiB9LCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCk7Ci0K
LSAgICAvLyBDYWxsIHNsb3cgb3BlcmF0aW9uCi0gICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9u
KHZtKTsKLSAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6aml0
RGF0YVJlZ2lzdGVyLCBCYXNlbGluZUpJVERhdGE6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBn
bG9iYWxPYmplY3RHUFIpOwotICAgIGppdC5zZXR1cEFyZ3VtZW50czxTbG93T3BlcmF0aW9uPihi
YXNlSlNSLCB0aGlzSlNSLCBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSKTsKLSAgICBzdGF0
aWNfYXNzZXJ0KHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDM+KCkgPT0gc3R1
YkluZm9HUFIsICJOZWVkZWQgZm9yIGJyYW5jaCB0byBzbG93IG9wZXJhdGlvbiB2aWEgU3R1Yklu
Zm8iKTsKLSAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIE9wZXJhdGlvblB0clRh
Zyk7Ci0KLSAgICBhdXRvIGhhbmRsZUV4Y2VwdGlvbiA9IGppdC5lbWl0Tm9uUGF0Y2hhYmxlRXhj
ZXB0aW9uQ2hlY2sodm0pOwotCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3Jl
UmVnaXN0ZXJzRnJvbVN0YWNrRm9yQ2FsbChqaXQsIFJlZ2lzdGVyU2V0IHsgc3R1YkluZm9HUFIg
fSwgeyB9LCBzdGFja0FkanVzdG1lbnRTaXplLCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2Fs
bCk7Ci0gICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBT
dHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZEb25lTG9jYXRpb24oKSksIEpTSW50ZXJuYWxQdHJU
YWcpOwotCi0gICAgLy8gV2hpbGUgc3AgaXMgZXh0ZW5kZWQsIGl0IGlzIE9LLiBKdW1wIHRhcmdl
dCB3aWxsIGFkanVzdCBpdC4KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFM
X1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKLSAgICBwYXRj
aEJ1ZmZlci5saW5rKGhhbmRsZUV4Y2VwdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJ
U3R1YihoYW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkp
OwotICAgIHJldHVybiBGSU5BTElaRV9USFVOSyhwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcs
ICJEYXRhSUMgZ2V0X2J5X2lkX3dpdGhfdGhpc19zbG93Iik7Ci19Ci0KLXN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdldEJ5VmFsU2xvd1BhdGhDb2RlR2VuZXJh
dG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0OwotCi0gICAgdXNpbmcgU2xvd09w
ZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUpOwotCi0gICAgdXNp
bmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OkdldEJ5VmFsOjpiYXNlSlNSOwotICAgIHVzaW5nIEJh
c2VsaW5lSklUUmVnaXN0ZXJzOjpHZXRCeVZhbDo6cHJvcGVydHlKU1I7Ci0gICAgdXNpbmcgQmFz
ZWxpbmVKSVRSZWdpc3RlcnM6OkdldEJ5VmFsOjpnbG9iYWxPYmplY3RHUFI7Ci0gICAgdXNpbmcg
QmFzZWxpbmVKSVRSZWdpc3RlcnM6OkdldEJ5VmFsOjpzdHViSW5mb0dQUjsKLSAgICB1c2luZyBC
YXNlbGluZUpJVFJlZ2lzdGVyczo6R2V0QnlWYWw6OnByb2ZpbGVHUFI7Ci0KLSAgICB1bnNpZ25l
ZCBzdGFja0FkanVzdG1lbnRTaXplID0gU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2
ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGppdCwgUmVnaXN0ZXJTZXQgeyBzdHViSW5mb0dQUiB9
LCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCk7Ci0KLSAgICAvLyBDYWxsIHNsb3cgb3Bl
cmF0aW9uCi0gICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKLSAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6aml0RGF0YVJlZ2lzdGVyLCBCYXNlbGlu
ZUpJVERhdGE6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwotICAg
IGppdC5zZXR1cEFyZ3VtZW50czxTbG93T3BlcmF0aW9uPihiYXNlSlNSLCBwcm9wZXJ0eUpTUiwg
Z2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUiwgcHJvZmlsZUdQUik7Ci0gICAgc3RhdGljX2Fz
c2VydChwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAzPigpID09IHN0dWJJbmZv
R1BSLCAiTmVlZGVkIGZvciBicmFuY2ggdG8gc2xvdyBvcGVyYXRpb24gdmlhIFN0dWJJbmZvIik7
Ci0gICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBPcGVyYXRpb25QdHJUYWcpOwot
Ci0gICAgYXV0byBoYW5kbGVFeGNlcHRpb24gPSBqaXQuZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlv
bkNoZWNrKHZtKTsKLQotICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lz
dGVyc0Zyb21TdGFja0ZvckNhbGwoaml0LCBSZWdpc3RlclNldCB7IHN0dWJJbmZvR1BSIH0sIHsg
fSwgc3RhY2tBZGp1c3RtZW50U2l6ZSwgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpOwot
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0
dXJlU3R1YkluZm86Om9mZnNldE9mRG9uZUxvY2F0aW9uKCkpLCBKU0ludGVybmFsUHRyVGFnKTsK
LQotICAgIC8vIFdoaWxlIHNwIGlzIGV4dGVuZGVkLCBpdCBpcyBPSy4gSnVtcCB0YXJnZXQgd2ls
bCBhZGp1c3QgaXQuCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVO
S19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Ci0gICAgcGF0Y2hCdWZm
ZXIubGluayhoYW5kbGVFeGNlcHRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIo
aGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKLSAg
ICByZXR1cm4gRklOQUxJWkVfVEhVTksocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiRGF0
YUlDIGdldF9ieV92YWxfc2xvdyIpOwotfQotCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
PEpJVFRodW5rUHRyVGFnPiBnZXRQcml2YXRlTmFtZVNsb3dQYXRoQ29kZUdlbmVyYXRvcihWTSYg
dm0pCi17Ci0gICAgQ0NhbGxIZWxwZXJzIGppdDsKLQotICAgIHVzaW5nIFNsb3dPcGVyYXRpb24g
PSBkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKTsKLQotICAgIHVzaW5n
IEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpQcml2YXRlQnJhbmQ6OmJhc2VKU1I7Ci0gICAgdXNpbmcg
QmFzZWxpbmVKSVRSZWdpc3RlcnM6OlByaXZhdGVCcmFuZDo6cHJvcGVydHlKU1I7Ci0gICAgdXNp
bmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OlByaXZhdGVCcmFuZDo6Z2xvYmFsT2JqZWN0R1BSOwot
ICAgIHVzaW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpQcml2YXRlQnJhbmQ6OnN0dWJJbmZvR1BS
OwotCi0gICAgdW5zaWduZWQgc3RhY2tBZGp1c3RtZW50U2l6ZSA9IFNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChqaXQsIFJlZ2lzdGVyU2V0
IHsgc3R1YkluZm9HUFIgfSwgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpOwotCi0gICAg
Ly8gQ2FsbCBzbG93IG9wZXJhdGlvbgotICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7
Ci0gICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmppdERhdGFS
ZWdpc3RlciwgQmFzZWxpbmVKSVREYXRhOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFs
T2JqZWN0R1BSKTsKLSAgICBqaXQuc2V0dXBBcmd1bWVudHM8U2xvd09wZXJhdGlvbj4oYmFzZUpT
UiwgcHJvcGVydHlKU1IsIGdsb2JhbE9iamVjdEdQUiwgc3R1YkluZm9HUFIpOwotICAgIHN0YXRp
Y19hc3NlcnQocHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMz4oKSA9PSBzdHVi
SW5mb0dQUiwgIk5lZWRlZCBmb3IgYnJhbmNoIHRvIHNsb3cgb3BlcmF0aW9uIHZpYSBTdHViSW5m
byIpOwotICAgIGppdC5jYWxsKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgT3BlcmF0aW9uUHRyVGFn
KTsKLQotICAgIGF1dG8gaGFuZGxlRXhjZXB0aW9uID0gaml0LmVtaXROb25QYXRjaGFibGVFeGNl
cHRpb25DaGVjayh2bSk7Ci0KLSAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnJlc3RvcmVS
ZWdpc3RlcnNGcm9tU3RhY2tGb3JDYWxsKGppdCwgUmVnaXN0ZXJTZXQgeyBzdHViSW5mb0dQUiB9
LCB7IH0sIHN0YWNrQWRqdXN0bWVudFNpemUsIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
KTsKLSAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZkRvbmVMb2NhdGlvbigpKSwgSlNJbnRlcm5hbFB0clRh
Zyk7Ci0KLSAgICAvLyBXaGlsZSBzcCBpcyBleHRlbmRlZCwgaXQgaXMgT0suIEp1bXAgdGFyZ2V0
IHdpbGwgYWRqdXN0IGl0LgotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxf
VEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOwotICAgIHBhdGNo
QnVmZmVyLmxpbmsoaGFuZGxlRXhjZXB0aW9uLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElT
dHViKGhhbmRsZUV4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7
Ci0gICAgcmV0dXJuIEZJTkFMSVpFX1RIVU5LKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywg
IkRhdGFJQyBnZXRfcHJpdmF0ZV9uYW1lX3Nsb3ciKTsKLX0KLQotI2lmIFVTRShKU1ZBTFVFNjQp
Ci1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBnZXRCeVZhbFdp
dGhUaGlzU2xvd1BhdGhDb2RlR2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMg
aml0OwotCi0gICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5
VmFsV2l0aFRoaXNPcHRpbWl6ZSk7Ci0KLSAgICB1c2luZyBCYXNlbGluZUpJVFJlZ2lzdGVyczo6
R2V0QnlWYWxXaXRoVGhpczo6YmFzZUpTUjsKLSAgICB1c2luZyBCYXNlbGluZUpJVFJlZ2lzdGVy
czo6R2V0QnlWYWxXaXRoVGhpczo6cHJvcGVydHlKU1I7Ci0gICAgdXNpbmcgQmFzZWxpbmVKSVRS
ZWdpc3RlcnM6OkdldEJ5VmFsV2l0aFRoaXM6OnRoaXNKU1I7Ci0gICAgdXNpbmcgQmFzZWxpbmVK
SVRSZWdpc3RlcnM6OkdldEJ5VmFsV2l0aFRoaXM6Omdsb2JhbE9iamVjdEdQUjsKLSAgICB1c2lu
ZyBCYXNlbGluZUpJVFJlZ2lzdGVyczo6R2V0QnlWYWxXaXRoVGhpczo6c3R1YkluZm9HUFI7Ci0g
ICAgdXNpbmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OkdldEJ5VmFsV2l0aFRoaXM6OnByb2ZpbGVH
UFI7Ci0KLSAgICB1bnNpZ25lZCBzdGFja0FkanVzdG1lbnRTaXplID0gU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGppdCwgUmVnaXN0ZXJT
ZXQgeyBzdHViSW5mb0dQUiB9LCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCk7Ci0KLSAg
ICAvLyBDYWxsIHNsb3cgb3BlcmF0aW9uCi0gICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZt
KTsKLSAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6aml0RGF0
YVJlZ2lzdGVyLCBCYXNlbGluZUpJVERhdGE6Om9mZnNldE9mR2xvYmFsT2JqZWN0KCkpLCBnbG9i
YWxPYmplY3RHUFIpOwotICAgIGppdC5zZXR1cEFyZ3VtZW50czxTbG93T3BlcmF0aW9uPihiYXNl
SlNSLCBwcm9wZXJ0eUpTUiwgdGhpc0pTUiwgZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUiwg
cHJvZmlsZUdQUik7Ci0gICAgc3RhdGljX2Fzc2VydChwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93
T3BlcmF0aW9uLCA0PigpID09IHN0dWJJbmZvR1BSLCAiTmVlZGVkIGZvciBicmFuY2ggdG8gc2xv
dyBvcGVyYXRpb24gdmlhIFN0dWJJbmZvIik7Ci0gICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0
aW9uKCkpLCBPcGVyYXRpb25QdHJUYWcpOwotCi0gICAgYXV0byBoYW5kbGVFeGNlcHRpb24gPSBq
aXQuZW1pdE5vblBhdGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKTsKLQotICAgIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvcjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoaml0LCBSZWdp
c3RlclNldCB7IHN0dWJJbmZvR1BSIH0sIHsgfSwgc3RhY2tBZGp1c3RtZW50U2l6ZSwgbWF4RnJh
bWVFeHRlbnRGb3JTbG93UGF0aENhbGwpOwotICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6
QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mRG9uZUxvY2F0
aW9uKCkpLCBKU0ludGVybmFsUHRyVGFnKTsKLQotICAgIC8vIFdoaWxlIHNwIGlzIGV4dGVuZGVk
LCBpdCBpcyBPSy4gSnVtcCB0YXJnZXQgd2lsbCBhZGp1c3QgaXQuCi0gICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0
cmFDVElUaHVuayk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVFeGNlcHRpb24sIENvZGVM
b2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKLSAgICByZXR1cm4gRklOQUxJWkVfVEhVTksocGF0Y2hC
dWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiRGF0YUlDIGdldF9ieV92YWxfd2l0aF90aGlzX3Nsb3ci
KTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBwdXRCeUlkU2xvd1BhdGhDb2RlR2VuZXJhdG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhl
bHBlcnMgaml0OwotCi0gICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlv
blB1dEJ5SWRTdHJpY3RPcHRpbWl6ZSk7Ci0KLSAgICB1c2luZyBCYXNlbGluZUpJVFJlZ2lzdGVy
czo6UHV0QnlJZDo6YmFzZUpTUjsKLSAgICB1c2luZyBCYXNlbGluZUpJVFJlZ2lzdGVyczo6UHV0
QnlJZDo6dmFsdWVKU1I7Ci0gICAgdXNpbmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OlB1dEJ5SWQ6
Omdsb2JhbE9iamVjdEdQUjsKLSAgICB1c2luZyBCYXNlbGluZUpJVFJlZ2lzdGVyczo6UHV0QnlJ
ZDo6c3R1YkluZm9HUFI7Ci0KLSAgICB1bnNpZ25lZCBzdGFja0FkanVzdG1lbnRTaXplID0gU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpwcmVzZXJ2ZVJlZ2lzdGVyc1RvU3RhY2tGb3JDYWxsKGpp
dCwgUmVnaXN0ZXJTZXQgeyBzdHViSW5mb0dQUiB9LCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRo
Q2FsbCk7Ci0KLSAgICAvLyBDYWxsIHNsb3cgb3BlcmF0aW9uCi0gICAgaml0LnByZXBhcmVDYWxs
T3BlcmF0aW9uKHZtKTsKLSAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BS
SW5mbzo6aml0RGF0YVJlZ2lzdGVyLCBCYXNlbGluZUpJVERhdGE6Om9mZnNldE9mR2xvYmFsT2Jq
ZWN0KCkpLCBnbG9iYWxPYmplY3RHUFIpOwotICAgIGppdC5zZXR1cEFyZ3VtZW50czxTbG93T3Bl
cmF0aW9uPih2YWx1ZUpTUiwgYmFzZUpTUiwgZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUik7
Ci0gICAgc3RhdGljX2Fzc2VydChwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAz
PigpID09IHN0dWJJbmZvR1BSLCAiTmVlZGVkIGZvciBicmFuY2ggdG8gc2xvdyBvcGVyYXRpb24g
dmlhIFN0dWJJbmZvIik7Ci0gICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJ
bmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBPcGVy
YXRpb25QdHJUYWcpOwotCi0gICAgYXV0byBoYW5kbGVFeGNlcHRpb24gPSBqaXQuZW1pdE5vblBh
dGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKTsKLQotICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoaml0LCBSZWdpc3RlclNldCB7IHN0
dWJJbmZvR1BSIH0sIHsgfSwgc3RhY2tBZGp1c3RtZW50U2l6ZSwgbWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwpOwotICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHVi
SW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mRG9uZUxvY2F0aW9uKCkpLCBKU0lu
dGVybmFsUHRyVGFnKTsKLQotICAgIC8vIFdoaWxlIHNwIGlzIGV4dGVuZGVkLCBpdCBpcyBPSy4g
SnVtcCB0YXJnZXQgd2lsbCBhZGp1c3QgaXQuCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7
Ci0gICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVFeGNlcHRpb24sIENvZGVMb2NhdGlvbkxhYmVs
KHZtLmdldENUSVN0dWIoaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKLSAgICByZXR1cm4gRklOQUxJWkVfVEhVTksocGF0Y2hCdWZmZXIsIEpJVFRo
dW5rUHRyVGFnLCAiRGF0YUlDIHB1dF9ieV9pZF9zbG93Iik7Ci19Ci0KLXN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHB1dEJ5VmFsU2xvd1BhdGhDb2RlR2VuZXJh
dG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0OwotCi0gICAgdXNpbmcgU2xvd09w
ZXJhdG9pbiA9IGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpOwotCi0g
ICAgdXNpbmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OlB1dEJ5VmFsOjpiYXNlSlNSOwotICAgIHVz
aW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpQdXRCeVZhbDo6cHJvcGVydHlKU1I7Ci0gICAgdXNp
bmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OlB1dEJ5VmFsOjp2YWx1ZUpTUjsKLSAgICB1c2luZyBC
YXNlbGluZUpJVFJlZ2lzdGVyczo6UHV0QnlWYWw6OnByb2ZpbGVHUFI7Ci0gICAgdXNpbmcgQmFz
ZWxpbmVKSVRSZWdpc3RlcnM6OlB1dEJ5VmFsOjpzdHViSW5mb0dQUjsKLSAgICB1c2luZyBCYXNl
bGluZUpJVFJlZ2lzdGVyczo6UHV0QnlWYWw6Omdsb2JhbE9iamVjdEdQUjsKLQotICAgIHVuc2ln
bmVkIHN0YWNrQWRqdXN0bWVudFNpemUgPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OnByZXNl
cnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoaml0LCBSZWdpc3RlclNldCB7IHN0dWJJbmZvR1BS
IH0sIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKTsKLQotICAgIC8vIENhbGwgc2xvdyBv
cGVyYXRpb24KLSAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwotICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpqaXREYXRhUmVnaXN0ZXIsIEJhc2Vs
aW5lSklURGF0YTo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVjdEdQUik7Ci0g
ICAgaml0LnNldHVwQXJndW1lbnRzPFNsb3dPcGVyYXRvaW4+KGJhc2VKU1IsIHByb3BlcnR5SlNS
LCB2YWx1ZUpTUiwgZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUiwgcHJvZmlsZUdQUik7Ci0g
ICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBPcGVyYXRpb25QdHJUYWcpOwotI2lm
IENQVShBUk1fVEhVTUIyKQotICAgIC8vIEFSTXY3IGNsb2JiZXJzIG1ldGFkYXRhVGFibGUgcmVn
aXN0ZXIuIFRodXMgd2UgbmVlZCB0byByZXN0b3JlIHRoZW0gYmFjayBoZXJlLgotICAgIEpJVDo6
ZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3RlcnMoaml0KTsKLSNl
bmRpZgotCi0gICAgYXV0byBoYW5kbGVFeGNlcHRpb24gPSBqaXQuZW1pdE5vblBhdGNoYWJsZUV4
Y2VwdGlvbkNoZWNrKHZtKTsKLQotICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cmVzdG9y
ZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoaml0LCBSZWdpc3RlclNldCB7IHN0dWJJbmZvR1BS
IH0sIHsgfSwgc3RhY2tBZGp1c3RtZW50U2l6ZSwgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENh
bGwpOwotICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mRG9uZUxvY2F0aW9uKCkpLCBKU0ludGVybmFsUHRy
VGFnKTsKLQotICAgIC8vIFdoaWxlIHNwIGlzIGV4dGVuZGVkLCBpdCBpcyBPSy4gSnVtcCB0YXJn
ZXQgd2lsbCBhZGp1c3QgaXQuCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7Ci0gICAgcGF0
Y2hCdWZmZXIubGluayhoYW5kbGVFeGNlcHRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENU
SVN0dWIoaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
KTsKLSAgICByZXR1cm4gRklOQUxJWkVfVEhVTksocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFn
LCAiRGF0YUlDIHB1dF9ieV92YWxfc2xvdyIpOwotfQotCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPEpJVFRodW5rUHRyVGFnPiBpbnN0YW5jZU9mU2xvd1BhdGhDb2RlR2VuZXJhdG9yKFZN
JiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0OwotCi0gICAgdXNpbmcgU2xvd09wZXJhdGlv
biA9IGRlY2x0eXBlKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSk7Ci0KLSAgICB1c2luZyBC
YXNlbGluZUpJVFJlZ2lzdGVyczo6SW5zdGFuY2VvZjo6dmFsdWVKU1I7Ci0gICAgdXNpbmcgQmFz
ZWxpbmVKSVRSZWdpc3RlcnM6Okluc3RhbmNlb2Y6OnByb3RvSlNSOwotICAgIHVzaW5nIEJhc2Vs
aW5lSklUUmVnaXN0ZXJzOjpJbnN0YW5jZW9mOjpnbG9iYWxPYmplY3RHUFI7Ci0gICAgdXNpbmcg
QmFzZWxpbmVKSVRSZWdpc3RlcnM6Okluc3RhbmNlb2Y6OnN0dWJJbmZvR1BSOwotCi0gICAgdW5z
aWduZWQgc3RhY2tBZGp1c3RtZW50U2l6ZSA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJl
c2VydmVSZWdpc3RlcnNUb1N0YWNrRm9yQ2FsbChqaXQsIFJlZ2lzdGVyU2V0IHsgc3R1YkluZm9H
UFIgfSwgbWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwpOwotCi0gICAgLy8gQ2FsbCBzbG93
IG9wZXJhdGlvbgotICAgIGppdC5wcmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7Ci0gICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmppdERhdGFSZWdpc3RlciwgQmFz
ZWxpbmVKSVREYXRhOjpvZmZzZXRPZkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsK
LSAgICBqaXQuc2V0dXBBcmd1bWVudHM8U2xvd09wZXJhdGlvbj4odmFsdWVKU1IsIHByb3RvSlNS
LCBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSKTsKLSAgICBzdGF0aWNfYXNzZXJ0KHByZWZl
cnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDM+KCkgPT0gc3R1YkluZm9HUFIsICJOZWVk
ZWQgZm9yIGJyYW5jaCB0byBzbG93IG9wZXJhdGlvbiB2aWEgU3R1YkluZm8iKTsKLSAgICBqaXQu
Y2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZv
OjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIE9wZXJhdGlvblB0clRhZyk7Ci0KLSAgICBhdXRv
IGhhbmRsZUV4Y2VwdGlvbiA9IGppdC5lbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2sodm0p
OwotCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0ZXJzRnJvbVN0
YWNrRm9yQ2FsbChqaXQsIFJlZ2lzdGVyU2V0IHsgc3R1YkluZm9HUFIgfSwgeyB9LCBzdGFja0Fk
anVzdG1lbnRTaXplLCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCk7Ci0gICAgaml0LmZh
ckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZEb25lTG9jYXRpb24oKSksIEpTSW50ZXJuYWxQdHJUYWcpOwotCi0gICAgLy8g
V2hpbGUgc3AgaXMgZXh0ZW5kZWQsIGl0IGlzIE9LLiBKdW1wIHRhcmdldCB3aWxsIGFkanVzdCBp
dC4KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5r
QnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGhh
bmRsZUV4Y2VwdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihoYW5kbGVFeGNl
cHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwotICAgIHJldHVybiBG
SU5BTElaRV9USFVOSyhwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJEYXRhSUMgaW5zdGFu
Y2VvZl9zbG93Iik7Ci19Ci0KLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+IGRlbEJ5SWRTbG93UGF0aENvZGVHZW5lcmF0b3IoVk0mIHZtKQotewotICAgIENDYWxs
SGVscGVycyBqaXQ7Ci0KLSAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0
aW9uRGVsZXRlQnlJZFN0cmljdE9wdGltaXplKTsKLQotICAgIHVzaW5nIEJhc2VsaW5lSklUUmVn
aXN0ZXJzOjpEZWxCeUlkOjpiYXNlSlNSOwotICAgIHVzaW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJz
OjpEZWxCeUlkOjpnbG9iYWxPYmplY3RHUFI7Ci0gICAgdXNpbmcgQmFzZWxpbmVKSVRSZWdpc3Rl
cnM6OkRlbEJ5SWQ6OnN0dWJJbmZvR1BSOwotCi0gICAgdW5zaWduZWQgc3RhY2tBZGp1c3RtZW50
U2l6ZSA9IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6cHJlc2VydmVSZWdpc3RlcnNUb1N0YWNr
Rm9yQ2FsbChqaXQsIFJlZ2lzdGVyU2V0IHsgc3R1YkluZm9HUFIgfSwgbWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwpOwotCi0gICAgLy8gQ2FsbCBzbG93IG9wZXJhdGlvbgotICAgIGppdC5w
cmVwYXJlQ2FsbE9wZXJhdGlvbih2bSk7Ci0gICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OmppdERhdGFSZWdpc3RlciwgQmFzZWxpbmVKSVREYXRhOjpvZmZzZXRP
Zkdsb2JhbE9iamVjdCgpKSwgZ2xvYmFsT2JqZWN0R1BSKTsKLSAgICBqaXQuc2V0dXBBcmd1bWVu
dHM8U2xvd09wZXJhdGlvbj4oYmFzZUpTUiwgZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUik7
Ci0gICAgc3RhdGljX2Fzc2VydChwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAy
PigpID09IHN0dWJJbmZvR1BSLCAiTmVlZGVkIGZvciBicmFuY2ggdG8gc2xvdyBvcGVyYXRpb24g
dmlhIFN0dWJJbmZvIik7Ci0gICAgaml0LmNhbGwoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJ
bmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBPcGVy
YXRpb25QdHJUYWcpOwotCi0gICAgYXV0byBoYW5kbGVFeGNlcHRpb24gPSBqaXQuZW1pdE5vblBh
dGNoYWJsZUV4Y2VwdGlvbkNoZWNrKHZtKTsKLQotICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
cjo6cmVzdG9yZVJlZ2lzdGVyc0Zyb21TdGFja0ZvckNhbGwoaml0LCBSZWdpc3RlclNldCB7IHN0
dWJJbmZvR1BSIH0sIHsgfSwgc3RhY2tBZGp1c3RtZW50U2l6ZSwgbWF4RnJhbWVFeHRlbnRGb3JT
bG93UGF0aENhbGwpOwotICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHVi
SW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mRG9uZUxvY2F0aW9uKCkpLCBKU0lu
dGVybmFsUHRyVGFnKTsKLQotICAgIC8vIFdoaWxlIHNwIGlzIGV4dGVuZGVkLCBpdCBpcyBPSy4g
SnVtcCB0YXJnZXQgd2lsbCBhZGp1c3QgaXQuCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihq
aXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7
Ci0gICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVFeGNlcHRpb24sIENvZGVMb2NhdGlvbkxhYmVs
KHZtLmdldENUSVN0dWIoaGFuZGxlRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKLSAgICByZXR1cm4gRklOQUxJWkVfVEhVTksocGF0Y2hCdWZmZXIsIEpJVFRo
dW5rUHRyVGFnLCAiRGF0YUlDIGRlbF9ieV9pZF9zbG93Iik7Ci19Ci0KLXN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGRlbEJ5VmFsU2xvd1BhdGhDb2RlR2VuZXJh
dG9yKFZNJiB2bSkKLXsKLSAgICBDQ2FsbEhlbHBlcnMgaml0OwotCi0gICAgdXNpbmcgU2xvd09w
ZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsU3RyaWN0T3B0aW1pemUpOwot
Ci0gICAgdXNpbmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OkRlbEJ5VmFsOjpiYXNlSlNSOwotICAg
IHVzaW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpEZWxCeVZhbDo6cHJvcGVydHlKU1I7Ci0gICAg
dXNpbmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OkRlbEJ5VmFsOjpnbG9iYWxPYmplY3RHUFI7Ci0g
ICAgdXNpbmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OkRlbEJ5VmFsOjpzdHViSW5mb0dQUjsKLQot
ICAgIHVuc2lnbmVkIHN0YWNrQWRqdXN0bWVudFNpemUgPSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OnByZXNlcnZlUmVnaXN0ZXJzVG9TdGFja0ZvckNhbGwoaml0LCBSZWdpc3RlclNldCB7IHN0
dWJJbmZvR1BSIH0sIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKTsKLQotICAgIC8vIENh
bGwgc2xvdyBvcGVyYXRpb24KLSAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwotICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpqaXREYXRhUmVnaXN0
ZXIsIEJhc2VsaW5lSklURGF0YTo6b2Zmc2V0T2ZHbG9iYWxPYmplY3QoKSksIGdsb2JhbE9iamVj
dEdQUik7Ci0gICAgaml0LnNldHVwQXJndW1lbnRzPFNsb3dPcGVyYXRpb24+KGJhc2VKU1IsIHBy
b3BlcnR5SlNSLCBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSKTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDM+KCkgPT0gc3R1YkluZm9H
UFIsICJOZWVkZWQgZm9yIGJyYW5jaCB0byBzbG93IG9wZXJhdGlvbiB2aWEgU3R1YkluZm8iKTsK
LSAgICBqaXQuY2FsbChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIE9wZXJhdGlvblB0clRhZyk7Ci0K
LSAgICBhdXRvIGhhbmRsZUV4Y2VwdGlvbiA9IGppdC5lbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9u
Q2hlY2sodm0pOwotCi0gICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlUmVnaXN0
ZXJzRnJvbVN0YWNrRm9yQ2FsbChqaXQsIFJlZ2lzdGVyU2V0IHsgc3R1YkluZm9HUFIgfSwgeyB9
LCBzdGFja0FkanVzdG1lbnRTaXplLCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCk7Ci0g
ICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1
cmVTdHViSW5mbzo6b2Zmc2V0T2ZEb25lTG9jYXRpb24oKSksIEpTSW50ZXJuYWxQdHJUYWcpOwot
Ci0gICAgLy8gV2hpbGUgc3AgaXMgZXh0ZW5kZWQsIGl0IGlzIE9LLiBKdW1wIHRhcmdldCB3aWxs
IGFkanVzdCBpdC4KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5L
X0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKLSAgICBwYXRjaEJ1ZmZl
ci5saW5rKGhhbmRsZUV4Y2VwdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1Yiho
YW5kbGVFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwotICAg
IHJldHVybiBGSU5BTElaRV9USFVOSyhwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJEYXRh
SUMgZGVsX2J5X3ZhbF9zbG93Iik7Ci19Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSW5saW5lQ2FjaGVDb21waWxlcjo6Z2VuZXJhdGVTbG93UGF0aENvZGUoVk0mIHZt
LCBBY2Nlc3NUeXBlIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBBY2Nl
c3NUeXBlOjpHZXRCeUlkOgotICAgIGNhc2UgQWNjZXNzVHlwZTo6VHJ5R2V0QnlJZDoKLSAgICBj
YXNlIEFjY2Vzc1R5cGU6OkdldEJ5SWREaXJlY3Q6Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5
SWQ6Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpHZXRQcml2YXRlTmFtZUJ5SWQ6IHsKLSAgICAgICAg
dXNpbmcgQXJndW1lbnRUeXBlcyA9IEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfc2FtZV92PEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvblRyeUdldEJ5SWRP
cHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBBcmd1bWVudFR5cGVzPik7Ci0gICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19zYW1lX3Y8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9u
R2V0QnlJZERpcmVjdE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEFyZ3VtZW50VHlwZXM+KTsK
LSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWVfdjxGdW5jdGlvblRyYWl0czxkZWNs
dHlwZShvcGVyYXRpb25JbkJ5SWRPcHRpbWl6ZSk+OjpBcmd1bWVudFR5cGVzLCBBcmd1bWVudFR5
cGVzPik7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lX3Y8RnVuY3Rpb25UcmFp
dHM8ZGVjbHR5cGUob3BlcmF0aW9uR2V0UHJpdmF0ZU5hbWVCeUlkT3B0aW1pemUpPjo6QXJndW1l
bnRUeXBlcywgQXJndW1lbnRUeXBlcz4pOwotICAgICAgICByZXR1cm4gdm0uZ2V0Q1RJU3R1Yihn
ZXRCeUlkU2xvd1BhdGhDb2RlR2VuZXJhdG9yKTsKLSAgICB9Ci0KLSAgICBjYXNlIEFjY2Vzc1R5
cGU6OkdldEJ5SWRXaXRoVGhpczoKLSAgICAgICAgcmV0dXJuIHZtLmdldENUSVN0dWIoZ2V0QnlJ
ZFdpdGhUaGlzU2xvd1BhdGhDb2RlR2VuZXJhdG9yKTsKLQotICAgIGNhc2UgQWNjZXNzVHlwZTo6
R2V0QnlWYWw6Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpJbkJ5VmFsOiB7Ci0gICAgICAgIHVzaW5n
IEFyZ3VtZW50VHlwZXMgPSBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19zYW1lX3Y8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXpl
KT46OkFyZ3VtZW50VHlwZXMsIEFyZ3VtZW50VHlwZXM+KTsKLSAgICAgICAgcmV0dXJuIHZtLmdl
dENUSVN0dWIoZ2V0QnlWYWxTbG93UGF0aENvZGVHZW5lcmF0b3IpOwotICAgIH0KLQotICAgIGNh
c2UgQWNjZXNzVHlwZTo6R2V0QnlWYWxXaXRoVGhpczogewotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgIHJldHVybiB2bS5nZXRDVElTdHViKGdldEJ5VmFsV2l0aFRoaXNTbG93UGF0aENvZGVH
ZW5lcmF0b3IpOwotI2Vsc2UKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuIHsgfTsKLSNlbmRpZgotICAgIH0KLQotICAgIGNhc2UgQWNjZXNzVHlw
ZTo6R2V0UHJpdmF0ZU5hbWU6Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQ6
Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZToKLSAgICBjYXNlIEFjY2Vzc1R5
cGU6OkNoZWNrUHJpdmF0ZUJyYW5kOgotICAgIGNhc2UgQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZUJy
YW5kOiB7Ci0gICAgICAgIHVzaW5nIEFyZ3VtZW50VHlwZXMgPSBGdW5jdGlvblRyYWl0czxkZWNs
dHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM7Ci0g
ICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lX3Y8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5
cGUob3BlcmF0aW9uSGFzUHJpdmF0ZUJyYW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgQXJn
dW1lbnRUeXBlcz4pOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZV92PEZ1bmN0
aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJn
dW1lbnRUeXBlcywgQXJndW1lbnRUeXBlcz4pOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfc2FtZV92PEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkNoZWNrUHJpdmF0ZUJy
YW5kT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgQXJndW1lbnRUeXBlcz4pOwotICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZV92PEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJh
dGlvblNldFByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEFyZ3VtZW50VHlw
ZXM+KTsKLSAgICAgICAgcmV0dXJuIHZtLmdldENUSVN0dWIoZ2V0UHJpdmF0ZU5hbWVTbG93UGF0
aENvZGVHZW5lcmF0b3IpOwotICAgIH0KLQotICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJZFN0
cmljdDoKLSAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5SWRTbG9wcHk6Ci0gICAgY2FzZSBBY2Nl
c3NUeXBlOjpQdXRCeUlkRGlyZWN0U3RyaWN0OgotICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0QnlJ
ZERpcmVjdFNsb3BweToKLSAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlZmluZVByaXZhdGVOYW1lQnlJ
ZDoKLSAgICBjYXNlIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVOYW1lQnlJZDogewotICAgICAgICB1
c2luZyBBcmd1bWVudFR5cGVzID0gRnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0
QnlJZFN0cmljdE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXM7Ci0gICAgICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19zYW1lX3Y8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlJ
ZFNsb3BweU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEFyZ3VtZW50VHlwZXM+KTsKLSAgICAg
ICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWVfdjxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShv
cGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcywgQXJn
dW1lbnRUeXBlcz4pOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZV92PEZ1bmN0
aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTbG9wcHlPcHRpbWl6ZSk+
OjpBcmd1bWVudFR5cGVzLCBBcmd1bWVudFR5cGVzPik7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19zYW1lX3Y8RnVuY3Rpb25UcmFpdHM8ZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlJZERl
ZmluZVByaXZhdGVGaWVsZFN0cmljdE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEFyZ3VtZW50
VHlwZXM+KTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWVfdjxGdW5jdGlvblRy
YWl0czxkZWNsdHlwZShvcGVyYXRpb25QdXRCeUlkU2V0UHJpdmF0ZUZpZWxkU3RyaWN0T3B0aW1p
emUpPjo6QXJndW1lbnRUeXBlcywgQXJndW1lbnRUeXBlcz4pOwotICAgICAgICByZXR1cm4gdm0u
Z2V0Q1RJU3R1YihwdXRCeUlkU2xvd1BhdGhDb2RlR2VuZXJhdG9yKTsKLSAgICB9Ci0KLSAgICBj
YXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsU3RyaWN0OgotICAgIGNhc2UgQWNjZXNzVHlwZTo6UHV0
QnlWYWxTbG9wcHk6Ci0gICAgY2FzZSBBY2Nlc3NUeXBlOjpQdXRCeVZhbERpcmVjdFN0cmljdDoK
LSAgICBjYXNlIEFjY2Vzc1R5cGU6OlB1dEJ5VmFsRGlyZWN0U2xvcHB5OgotICAgIGNhc2UgQWNj
ZXNzVHlwZTo6RGVmaW5lUHJpdmF0ZU5hbWVCeVZhbDoKLSAgICBjYXNlIEFjY2Vzc1R5cGU6OlNl
dFByaXZhdGVOYW1lQnlWYWw6IHsKLSAgICAgICAgdXNpbmcgQXJndW1lbnRUeXBlcyA9IEZ1bmN0
aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0T3B0aW1pemUpPjo6QXJn
dW1lbnRUeXBlczsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWVfdjxGdW5jdGlv
blRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbFNsb3BweU9wdGltaXplKT46OkFyZ3Vt
ZW50VHlwZXMsIEFyZ3VtZW50VHlwZXM+KTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3NhbWVfdjxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25EaXJlY3RQdXRCeVZhbFNs
b3BweU9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEFyZ3VtZW50VHlwZXM+KTsKLSAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWVfdjxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbFN0cmljdE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEFyZ3Vt
ZW50VHlwZXM+KTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWVfdjxGdW5jdGlv
blRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25QdXRCeVZhbERlZmluZVByaXZhdGVGaWVsZE9wdGlt
aXplKT46OkFyZ3VtZW50VHlwZXMsIEFyZ3VtZW50VHlwZXM+KTsKLSAgICAgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3NhbWVfdjxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25QdXRC
eVZhbFNldFByaXZhdGVGaWVsZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEFyZ3VtZW50VHlw
ZXM+KTsKLSAgICAgICAgcmV0dXJuIHZtLmdldENUSVN0dWIocHV0QnlWYWxTbG93UGF0aENvZGVH
ZW5lcmF0b3IpOwotICAgIH0KLQotICAgIGNhc2UgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZjoKLSAg
ICAgICAgcmV0dXJuIHZtLmdldENUSVN0dWIoaW5zdGFuY2VPZlNsb3dQYXRoQ29kZUdlbmVyYXRv
cik7Ci0KLSAgICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5SWRTdHJpY3Q6Ci0gICAgY2FzZSBB
Y2Nlc3NUeXBlOjpEZWxldGVCeUlkU2xvcHB5OiB7Ci0gICAgICAgIHVzaW5nIEFyZ3VtZW50VHlw
ZXMgPSBGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25EZWxldGVCeUlkU3RyaWN0T3B0
aW1pemUpPjo6QXJndW1lbnRUeXBlczsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Nh
bWVfdjxGdW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25EZWxldGVCeUlkU2xvcHB5T3B0
aW1pemUpPjo6QXJndW1lbnRUeXBlcywgQXJndW1lbnRUeXBlcz4pOwotICAgICAgICByZXR1cm4g
dm0uZ2V0Q1RJU3R1YihkZWxCeUlkU2xvd1BhdGhDb2RlR2VuZXJhdG9yKTsKLSAgICB9Ci0KLSAg
ICBjYXNlIEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsU3RyaWN0OgotICAgIGNhc2UgQWNjZXNzVHlw
ZTo6RGVsZXRlQnlWYWxTbG9wcHk6IHsKLSAgICAgICAgdXNpbmcgQXJndW1lbnRUeXBlcyA9IEZ1
bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsU3RyaWN0T3B0aW1pemUp
Pjo6QXJndW1lbnRUeXBlczsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWVfdjxG
dW5jdGlvblRyYWl0czxkZWNsdHlwZShvcGVyYXRpb25EZWxldGVCeVZhbFNsb3BweU9wdGltaXpl
KT46OkFyZ3VtZW50VHlwZXMsIEFyZ3VtZW50VHlwZXM+KTsKLSAgICAgICAgcmV0dXJuIHZtLmdl
dENUSVN0dWIoZGVsQnlWYWxTbG93UGF0aENvZGVHZW5lcmF0b3IpOwotICAgIH0KLSAgICB9Ci0K
LSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07Ci19Ci0K
IHZvaWQgSW5saW5lQ2FjaGVDb21waWxlcjo6Z2VuZXJhdGVXaXRoR3VhcmQoQWNjZXNzQ2FzZSYg
YWNjZXNzQ2FzZSwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCYgZmFsbFRocm91Z2gpCiB7CiAgICAg
U3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwpAQCAtNDA2MSwxMSAr
MzY0MSwxMyBAQCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IElubGluZUNhY2hlQ29tcGlsZXI6OnJl
Z2VuZXJhdGUoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTAogICAgIH0KIAogICAgIGlmIChjb2Rl
QmxvY2stPnVzZURhdGFJQygpKSB7Ci0gICAgICAgIGlmICghSklUQ29kZTo6aXNCYXNlbGluZUNv
ZGUoY29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7Ci0gICAgICAgICAgICBmYWlsdXJlLmxpbmsoJmpp
dCk7Ci0gICAgICAgICAgICBKSVRfQ09NTUVOVChqaXQsICJmYWlsdXJlIGZhciBqdW1wIik7Ci0g
ICAgICAgICAgICBqaXQuZmFySnVtcChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobV9zdHViSW5mby0+
bV9zdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd1BhdGhTdGFydExv
Y2F0aW9uKCkpLCBKSVRTdHViUm91dGluZVB0clRhZyk7Ci0gICAgICAgIH0KKyAgICAgICAgZmFp
bHVyZS5saW5rKCZqaXQpOworICAgICAgICBKSVRfQ09NTUVOVChqaXQsICJmYWlsdXJlIGZhciBq
dW1wIik7CisgICAgICAgIC8vIEluIEFSTTY0LCB3ZSBkbyBub3QgcHVzaCBhbnl0aGluZyBvbiBz
dGFjayBzcGVjaWFsbHkuCisgICAgICAgIC8vIFNvIHdlIGNhbiBqdXN0IGp1bXAgdG8gdGhlIHNs
b3ctcGF0aCBldmVuIHRob3VnaCB0aGlzIHRodW5rIGlzIGNhbGxlZCAobm90IGp1bXBlZCkuCisg
ICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdGFpbCBjYWxsIHRvIHRoZSB0aHVuayB3aGljaCBj
YWxscyB0aGUgc2xvdyBwYXRoIGZ1bmN0aW9uLgorICAgICAgICAvLyBBbmQgd2Ugc2hvdWxkIGVs
aW1pbmF0ZSBJQyBzbG93LXBhdGggZ2VuZXJhdGlvbiBpbiBCYXNlbGluZUpJVC4KKyAgICAgICAg
aml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1fc3R1YkluZm8tPm1fc3R1YkluZm9H
UFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dQYXRoU3RhcnRMb2NhdGlvbigpKSwg
SklUU3R1YlJvdXRpbmVQdHJUYWcpOwogICAgIH0KIAogICAgIFJlZlB0cjxQb2x5bW9ycGhpY0Fj
Y2Vzc0pJVFN0dWJSb3V0aW5lPiBzdHViOwpAQCAtNDA5NywxMSArMzY3OSw5IEBAIEFjY2Vzc0dl
bmVyYXRpb25SZXN1bHQgSW5saW5lQ2FjaGVDb21waWxlcjo6cmVnZW5lcmF0ZShjb25zdCBHQ1Nh
ZmVDb25jdXJyZW50SlNMCiAKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0ludGVybmFsUHRyVGFn
PiBzdWNjZXNzTGFiZWwgPSBtX3N0dWJJbmZvLT5kb25lTG9jYXRpb247CiAKLSAgICBpZiAoY29k
ZUJsb2NrLT51c2VEYXRhSUMoKSkgeworICAgIGlmIChjb2RlQmxvY2stPnVzZURhdGFJQygpKQog
ICAgICAgICBBU1NFUlQobV9zdWNjZXNzLmVtcHR5KCkpOwotICAgICAgICBpZiAoSklUQ29kZTo6
aXNCYXNlbGluZUNvZGUoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQotICAgICAgICAgICAgbGlua0J1
ZmZlci5saW5rKGZhaWx1cmUsIENvZGVMb2NhdGlvbkxhYmVsKGdlbmVyYXRlU2xvd1BhdGhDb2Rl
KHZtKCksIG1fc3R1YkluZm8tPmFjY2Vzc1R5cGUpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkp
OwotICAgIH0gZWxzZSB7CisgICAgZWxzZSB7CiAgICAgICAgIGxpbmtCdWZmZXIubGluayhtX3N1
Y2Nlc3MsIHN1Y2Nlc3NMYWJlbCk7CiAgICAgICAgIGxpbmtCdWZmZXIubGluayhmYWlsdXJlLCBt
X3N0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24pOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWNoZUNvbXBpbGVyLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FjaGVDb21waWxlci5oCmluZGV4IGFk
OGRmMTQ3MWI1Ni4uZWVlMDU1ZjdlODAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSW5saW5lQ2FjaGVDb21waWxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbmxpbmVDYWNoZUNvbXBpbGVyLmgKQEAgLTI4NCw4ICsyODQsNiBAQCBw
dWJsaWM6CiAKICAgICBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0IHJlZ2VuZXJhdGUoY29uc3QgR0NT
YWZlQ29uY3VycmVudEpTTG9ja2VyJiwgUG9seW1vcnBoaWNBY2Nlc3MmLCBDb2RlQmxvY2sqKTsK
IAotICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGdlbmVy
YXRlU2xvd1BhdGhDb2RlKFZNJiwgQWNjZXNzVHlwZSk7Ci0KIHByaXZhdGU6CiAgICAgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4Rm9yRXhjZXB0aW9uSGFuZGxpbmdPck9yaWdpbmFsKCk7CiAg
ICAgY29uc3QgU2NhbGFyUmVnaXN0ZXJTZXQmIGxpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNl
cHRpb25IYW5kbGluZ0NhbGxTaXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAppbmRleCBmZjJjYzU5M2I2MjQuLmNjMzhj
MjA2NTY1YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVN0dWJJbmZvLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uY3BwCkBAIC01MzAsMTQgKzUzMCwxNSBAQCBzdGF0aWMgQ29kZVB0cjxP
cGVyYXRpb25QdHJUYWc+IHNsb3dPcGVyYXRpb25Gcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5m
byhjb25zdAogICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgU3RydWN0dXJlU3R1YkluZm86Omlu
aXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhWTSYgdm0sIGNvbnN0IEJhc2Vs
aW5lVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYgdW5saW5rZWRTdHViSW5mbykKK3ZvaWQgU3Ry
dWN0dXJlU3R1YkluZm86OmluaXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhj
b25zdCBCYXNlbGluZVVubGlua2VkU3RydWN0dXJlU3R1YkluZm8mIHVubGlua2VkU3R1YkluZm8p
CiB7CiAgICAgYWNjZXNzVHlwZSA9IHVubGlua2VkU3R1YkluZm8uYWNjZXNzVHlwZTsKICAgICBk
b25lTG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLmRvbmVMb2NhdGlvbjsKKyAgICBzbG93UGF0
aFN0YXJ0TG9jYXRpb24gPSB1bmxpbmtlZFN0dWJJbmZvLnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsK
ICAgICBtX2lkZW50aWZpZXIgPSB1bmxpbmtlZFN0dWJJbmZvLm1faWRlbnRpZmllcjsKICAgICBj
YWxsU2l0ZUluZGV4ID0gQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KHVubGlua2VkU3R1Yklu
Zm8uYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkpOwogICAgIGNvZGVPcmlnaW4gPSBDb2RlT3JpZ2lu
KHVubGlua2VkU3R1YkluZm8uYnl0ZWNvZGVJbmRleCk7Ci0gICAgbV9jb2RlUHRyID0gSW5saW5l
Q2FjaGVDb21waWxlcjo6Z2VuZXJhdGVTbG93UGF0aENvZGUodm0sIGFjY2Vzc1R5cGUpLmNvZGUo
KS50ZW1wbGF0ZSByZXRhZ2dlZDxKSVRTdHViUm91dGluZVB0clRhZz4oKTsKKyAgICBtX2NvZGVQ
dHIgPSBzbG93UGF0aFN0YXJ0TG9jYXRpb247CiAgICAgcHJvcGVydHlJc0ludDMyID0gdW5saW5r
ZWRTdHViSW5mby5wcm9wZXJ0eUlzSW50MzI7CiAgICAgY2FuQmVNZWdhbW9ycGhpYyA9IHVubGlu
a2VkU3R1YkluZm8uY2FuQmVNZWdhbW9ycGhpYzsKICAgICBpc0VudW1lcmF0b3IgPSB1bmxpbmtl
ZFN0dWJJbmZvLmlzRW51bWVyYXRvcjsKQEAgLTU0Niw3ICs1NDcsMTIgQEAgdm9pZCBTdHJ1Y3R1
cmVTdHViSW5mbzo6aW5pdGlhbGl6ZUZyb21VbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKFZNJiB2
bSwgY29uc3QgQmEKICAgICBpZiAodW5saW5rZWRTdHViSW5mby5jYW5CZU1lZ2Ftb3JwaGljKQog
ICAgICAgICBidWZmZXJpbmdDb3VudGRvd24gPSAxOwogCi0gICAgdXNlZFJlZ2lzdGVycyA9IFJl
Z2lzdGVyU2V0QnVpbGRlcjo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCkuYnVpbGRTY2FsYXJS
ZWdpc3RlclNldCgpOworICAgIGF1dG8gdXNlZEpTUnMgPSBSZWdpc3RlclNldEJ1aWxkZXI6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAgIGlmIChhY2Nlc3NUeXBlID09IEFjY2Vzc1R5
cGU6OkdldEJ5SWQgJiYgdW5saW5rZWRTdHViSW5mby5ieXRlY29kZUluZGV4LmNoZWNrcG9pbnQo
KSkgeworICAgICAgICAvLyBGb3IgaXRlcmF0b3JfbmV4dCwgd2UgY2FuJ3QgY2xvYmJlciB0aGUg
ImRvbnRDbG9iYmVySlNSIiByZWdpc3RlciBlaXRoZXIuCisgICAgICAgIHVzZWRKU1JzLmFkZChC
YXNlbGluZUpJVFJlZ2lzdGVyczo6R2V0QnlJZDo6ZG9udENsb2JiZXJKU1IsIElnbm9yZVZlY3Rv
cnMpOworICAgIH0KKyAgICB1c2VkUmVnaXN0ZXJzID0gdXNlZEpTUnMuYnVpbGRTY2FsYXJSZWdp
c3RlclNldCgpOwogCiAgICAgbV9zbG93T3BlcmF0aW9uID0gc2xvd09wZXJhdGlvbkZyb21Vbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKHVubGlua2VkU3R1YkluZm8pOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCmluZGV4IDM0ZjU2
Y2I0OTk2MS4uNmM2NTEwZWZhYWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaApAQCAtMTMwLDcgKzEzMCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGRlcmVmKCk7CiAgICAgdm9pZCBhYm91dFRvRGllKCk7CiAKLSAgICB2b2lkIGlu
aXRpYWxpemVGcm9tVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyhWTSYsIGNvbnN0IEJhc2VsaW5l
VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYpOworICAgIHZvaWQgaW5pdGlhbGl6ZUZyb21Vbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKGNvbnN0IEJhc2VsaW5lVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwogICAgIHZvaWQgaW5pdGlhbGl6ZUZyb21ERkdVbmxpbmtlZFN0cnVjdHVyZVN0dWJJ
bmZvKGNvbnN0IERGRzo6VW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyYpOwogCiAgICAgREVDTEFS
RV9WSVNJVF9BR0dSRUdBVEU7CkBAIC01MzcsNiArNTM3LDcgQEAgc3RydWN0IFVubGlua2VkU3Ry
dWN0dXJlU3R1YkluZm8gewogICAgIGJvb2wgaXNFbnVtZXJhdG9yIDogMSB7IGZhbHNlIH07CiAg
ICAgQ2FjaGVhYmxlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7IC8vIFRoaXMgb25seSBjb21lcyBm
cm9tIGFscmVhZHkgbWFya2VkIG9uZS4gVGh1cywgd2UgZG8gbm90IG1hcmsgaXQgdmlhIEdDLgog
ICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTSW50ZXJuYWxQdHJUYWc+IGRvbmVMb2NhdGlvbjsKKyAg
ICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4gc2xvd1BhdGhTdGFydExv
Y2F0aW9uOwogfTsKIAogc3RydWN0IEJhc2VsaW5lVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbyA6
IFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8gewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0lubGluZUNhY2hlV3JhcHBlcklubGluZXMuaAppbmRleCBhMzg5Yjkx
MDI3NTAuLjQ3OTkzMDZmMzczNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJbmxpbmVDYWNoZVdyYXBwZXJJbmxpbmVzLmgKQEAgLTM4LDcgKzM4LDcgQEAg
dm9pZCBJbmxpbmVDYWNoZVdyYXBwZXI8R2VuZXJhdG9yVHlwZT46OmZpbmFsaXplKExpbmtCdWZm
ZXImIGZhc3RQYXRoLCBMaW5rQnVmZmUKICAgICBtX2dlbmVyYXRvci5yZXBvcnRTbG93UGF0aENh
bGwobV9zbG93UGF0aC0+bGFiZWwoKSwgbV9zbG93UGF0aC0+Y2FsbCgpKTsKICAgICBpZiAobV9n
ZW5lcmF0b3IubV91bmxpbmtlZFN0dWJJbmZvKSB7CiAgICAgICAgIG1fZ2VuZXJhdG9yLm1fdW5s
aW5rZWRTdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gZmFzdFBhdGgubG9jYXRpb25PZjxKU0ludGVy
bmFsUHRyVGFnPihtX2dlbmVyYXRvci5tX2RvbmUpOwotICAgICAgICBzdGF0aWNfY2FzdDxERkc6
OlVubGlua2VkU3RydWN0dXJlU3R1YkluZm8qPihtX2dlbmVyYXRvci5tX3VubGlua2VkU3R1Yklu
Zm8pLT5zbG93UGF0aFN0YXJ0TG9jYXRpb24gPSBmYXN0UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPihtX2dlbmVyYXRvci5tX3Nsb3dQYXRoQmVnaW4pOworICAgICAgICBtX2dl
bmVyYXRvci5tX3VubGlua2VkU3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbiA9IGZhc3RQ
YXRoLmxvY2F0aW9uT2Y8SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fZ2VuZXJhdG9yLm1fc2xvd1Bh
dGhCZWdpbik7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fZ2VuZXJhdG9yLmZpbmFsaXplKGZhc3RQ
YXRoLCBzbG93UGF0aCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCmlu
ZGV4IDJhZGYzNzNkMmJiMC4uMzM1NzA5ZDAxY2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvZGUuaApAQCAtNTIsNyArNTIsNiBAQCBjbGFzcyBKSVRDb2RlOwogY2xhc3MgSklU
Q29tcGlsZXI7CiAKIHN0cnVjdCBVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvIDogSlNDOjpVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvIHsKLSAgICBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91
dGluZVB0clRhZz4gc2xvd1BhdGhTdGFydExvY2F0aW9uOwogICAgIENvZGVPcmlnaW4gY29kZU9y
aWdpbjsKICAgICBTY2FsYXJSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzOwogICAgIENhbGxTaXRl
SW5kZXggY2FsbFNpdGVJbmRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQmFzZWxpbmVKSVRSZWdpc3RlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFz
ZWxpbmVKSVRSZWdpc3RlcnMuaAppbmRleCA4YTIyNDg0MzQzMjcuLmU4MTQzNzA0NmM3OSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CYXNlbGluZUpJVFJlZ2lzdGVycy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmFzZWxpbmVKSVRSZWdpc3RlcnMuaApA
QCAtMTIwLDcgKzEyMCw4IEBAIG5hbWVzcGFjZSBHZXRCeUlkIHsKICAgICBzdGF0aWMgY29uc3Rl
eHByIEdQUlJlZyBnbG9iYWxPYmplY3RHUFIgeyBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3Bl
cmF0aW9uLCAxPigpIH07CiAgICAgc3RhdGljIGNvbnN0ZXhwciBHUFJSZWcgc3R1YkluZm9HUFIg
eyBwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAyPigpIH07CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBHUFJSZWcgc2NyYXRjaDFHUFIgeyBnbG9iYWxPYmplY3RHUFIgfTsKLSAgICBz
dGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChiYXNlSlNSLCBzdHViSW5mb0dQUiwgZ2xvYmFsT2JqZWN0
R1BSKSwgIlJlcXVpcmVkIGZvciBEYXRhSUMiKTsKKyAgICBzdGF0aWMgY29uc3RleHByIEpTVmFs
dWVSZWdzIGRvbnRDbG9iYmVySlNSIHsgSlNSSW5mbzo6anNSZWdUNTQgfTsKKyAgICBzdGF0aWNf
YXNzZXJ0KG5vT3ZlcmxhcChiYXNlSlNSLCBzdHViSW5mb0dQUiwgZ2xvYmFsT2JqZWN0R1BSLCBk
b250Q2xvYmJlckpTUiksICJSZXF1aXJlZCBmb3IgRGF0YUlDIik7CiAgICAgc3RhdGljX2Fzc2Vy
dChub092ZXJsYXAocmVzdWx0SlNSLCBzdHViSW5mb0dQUikpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAKaW5kZXggMzNmMDgwNTQ3YTMxLi5kYTllZDdjZGZkMTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAKQEAgLTQ4OCw2ICs0ODgsMTggQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlTGlua1Bhc3MoKQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQog
eworICAgIG1fZ2V0QnlJZEluZGV4ID0gMDsKKyAgICBtX2dldEJ5VmFsSW5kZXggPSAwOworICAg
IG1fZ2V0QnlJZFdpdGhUaGlzSW5kZXggPSAwOworICAgIG1fZ2V0QnlWYWxXaXRoVGhpc0luZGV4
ID0gMDsKKyAgICBtX3B1dEJ5SWRJbmRleCA9IDA7CisgICAgbV9wdXRCeVZhbEluZGV4ID0gMDsK
KyAgICBtX2luQnlJZEluZGV4ID0gMDsKKyAgICBtX2luQnlWYWxJbmRleCA9IDA7CisgICAgbV9k
ZWxCeUlkSW5kZXggPSAwOworICAgIG1fZGVsQnlWYWxJbmRleCA9IDA7CisgICAgbV9pbnN0YW5j
ZU9mSW5kZXggPSAwOworICAgIG1fcHJpdmF0ZUJyYW5kQWNjZXNzSW5kZXggPSAwOwogICAgIG1f
Y2FsbExpbmtJbmZvSW5kZXggPSAwOwogCiAgICAgdW5zaWduZWQgYnl0ZWNvZGVDb3VudEhhdmlu
Z1Nsb3dDYXNlID0gMDsKQEAgLTUzNCw2ICs1NDYsMjIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2NvbnN0cnVjdF92
YXJhcmdzKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfY29uc3RydWN0KQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZXEpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChv
cF90cnlfZ2V0X2J5X2lkKQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaW5fYnlfaWQp
CisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pbl9ieV92YWwpCisgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF9oYXNfcHJpdmF0ZV9uYW1lKQorICAgICAgICBERUZJTkVfU0xPV0NB
U0VfT1Aob3BfaGFzX3ByaXZhdGVfYnJhbmQpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChv
cF9nZXRfYnlfaWQpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfYnlfaWRfd2l0
aF90aGlzKQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2J5X2lkX2RpcmVjdCkK
KyAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9ieV92YWwpCisgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF9nZXRfYnlfdmFsX3dpdGhfdGhpcykKKyAgICAgICAgREVGSU5FX1NM
T1dDQVNFX09QKG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCkKKyAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX2VudW1lcmF0b3JfcHV0X2J5X3ZhbCkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNF
X09QKG9wX2dldF9wcml2YXRlX25hbWUpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9z
ZXRfcHJpdmF0ZV9icmFuZCkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2NoZWNrX3By
aXZhdGVfYnJhbmQpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9pbnN0YW5jZW9mKQog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbGVzcykKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX2xlc3NlcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2dyZWF0ZXIp
CkBAIC01NTksNiArNTg3LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9uZWdhdGUpCiAgICAgICAgIERFRklORV9T
TE9XQ0FTRV9PUChvcF9uZXEpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9uZXdfb2Jq
ZWN0KQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfcHV0X2J5X2lkKQorICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfT1Aob3BfcHV0X2J5X3ZhbF9kaXJlY3QpCisgICAgICAgIERFRklORV9T
TE9XQ0FTRV9PUChvcF9wdXRfYnlfdmFsKQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bf
cHV0X3ByaXZhdGVfbmFtZSkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2RlbF9ieV92
YWwpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kZWxfYnlfaWQpCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9zdWIpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9w
dXRfdG9fc2NvcGUpCiAKQEAgLTYxMiw2ICs2NDYsMTQgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlU2xvd0Nhc2VzKCkKICAgICB9CiAKICAgICBSRUxFQVNFX0FTU0VSVChieXRlY29kZUNvdW50
SGF2aW5nU2xvd0Nhc2UgPT0gbV9ieXRlY29kZUNvdW50SGF2aW5nU2xvd0Nhc2UpOworICAgIFJF
TEVBU0VfQVNTRVJUKG1fZ2V0QnlJZEluZGV4ID09IG1fZ2V0QnlJZHMuc2l6ZSgpKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChtX2dldEJ5SWRXaXRoVGhpc0luZGV4ID09IG1fZ2V0QnlJZHNXaXRoVGhp
cy5zaXplKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKG1fZ2V0QnlWYWxXaXRoVGhpc0luZGV4ID09
IG1fZ2V0QnlWYWxzV2l0aFRoaXMuc2l6ZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX3B1dEJ5
SWRJbmRleCA9PSBtX3B1dEJ5SWRzLnNpemUoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9wdXRC
eVZhbEluZGV4ID09IG1fcHV0QnlWYWxzLnNpemUoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9p
bkJ5SWRJbmRleCA9PSBtX2luQnlJZHMuc2l6ZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChtX2lu
c3RhbmNlT2ZJbmRleCA9PSBtX2luc3RhbmNlT2ZzLnNpemUoKSk7CisgICAgUkVMRUFTRV9BU1NF
UlQobV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleCA9PSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLnNp
emUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9jYWxsTGlua0luZm9JbmRleCA9PSBtX2NhbGxD
b21waWxhdGlvbkluZm8uc2l6ZSgpKTsKIAogI2lmbmRlZiBOREVCVUcKQEAgLTkxNiw4ICs5NTgs
MTAgQEAgUmVmUHRyPEJhc2VsaW5lSklUQ29kZT4gSklUOjpsaW5rKExpbmtCdWZmZXImIHBhdGNo
QnVmZmVyKQogI2VuZGlmCiAKICAgICBhdXRvIGZpbmFsaXplSUNzID0gWyZdIChhdXRvJiBnZW5l
cmF0b3JzKSB7Ci0gICAgICAgIGZvciAoYXV0byYgZ2VuIDogZ2VuZXJhdG9ycykKKyAgICAgICAg
Zm9yIChhdXRvJiBnZW4gOiBnZW5lcmF0b3JzKSB7CiAgICAgICAgICAgICBnZW4ubV91bmxpbmtl
ZFN0dWJJbmZvLT5kb25lTG9jYXRpb24gPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTSW50ZXJu
YWxQdHJUYWc+KGdlbi5tX2RvbmUpOworICAgICAgICAgICAgZ2VuLm1fdW5saW5rZWRTdHViSW5m
by0+c2xvd1BhdGhTdGFydExvY2F0aW9uID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxKSVRTdHVi
Um91dGluZVB0clRhZz4oZ2VuLm1fc2xvd1BhdGhCZWdpbik7CisgICAgICAgIH0KICAgICB9Owog
CiAgICAgZmluYWxpemVJQ3MobV9nZXRCeUlkcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRl
eCA2OWU5NmQ1YmZlNjkuLjZiZGQ2OTNiMzkzMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBA
IC0yMzUsMTQgKzIzNSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHB1YmxpYzoKICAgICAg
ICAgdm9pZCBsb2FkQ29uc3RhbnQodW5zaWduZWQgY29uc3RhbnRJbmRleCwgR1BSUmVnKTsKLSAg
ICAgICAgc3RhdGljIHZvaWQgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xS
ZWdpc3RlcnMoQ0NhbGxIZWxwZXJzJik7Ci0KICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGxv
YWRHbG9iYWxPYmplY3QoR1BSUmVnKTsKIAogICAgICAgICAvLyBBc3N1bWluZyBzX2NvbnN0YW50
c0dQUiBpcyBhdmFpbGFibGUuCiAgICAgICAgIHN0YXRpYyB2b2lkIGxvYWRHbG9iYWxPYmplY3Qo
Q0NhbGxIZWxwZXJzJiwgR1BSUmVnKTsKICAgICAgICAgc3RhdGljIHZvaWQgbG9hZENvbnN0YW50
KENDYWxsSGVscGVycyYsIHVuc2lnbmVkIGNvbnN0YW50SW5kZXgsIEdQUlJlZyk7CisgICAgICAg
IHN0YXRpYyB2b2lkIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0
ZXJzKENDYWxsSGVscGVycyYpOwogCiAgICAgICAgIHZvaWQgbG9hZENvZGVCbG9ja0NvbnN0YW50
KFZpcnR1YWxSZWdpc3RlciwgSlNWYWx1ZVJlZ3MpOwogICAgICAgICB2b2lkIGxvYWRDb2RlQmxv
Y2tDb25zdGFudFBheWxvYWQoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKTsKQEAgLTM1Niw4
ICszNTUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQoUmVnaXN0ZXJJRCk7CiAjZW5kaWYKIAotICAgICAgICB2b2lkIGVtaXROYWtlZE5l
YXJKdW1wSWZOb3RKU0NlbGwoSlNWYWx1ZVJlZ3MsIFZpcnR1YWxSZWdpc3RlciwgQ29kZVB0cjxK
SVRUaHVua1B0clRhZz4pOwotCiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50
KEpTVmFsdWVSZWdzKTsKIAogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChKU1ZhbHVlUmVncyk7CkBAIC00MDYsNyArNDAzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9pZGVudGl0eV93aXRoX3Byb2ZpbGUoY29uc3QgSlNJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZGVidWcoY29uc3QgSlNJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qKTsKKyAg
ICAgICAgdm9pZCBlbWl0U2xvd19vcF9kZWxfYnlfaWQoY29uc3QgSlNJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rl
bF9ieV92YWwoY29uc3QgSlNJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2RlbF9ieV92YWwoY29uc3QgSlNJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2Rpdihjb25zdCBKU0luc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbmQoY29uc3QgSlNJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfZW50ZXIoY29uc3QgSlNJbnN0cnVjdGlvbiopOwpAQCAtNTM5LDE2
ICs1MzgsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb2dfc2hh
ZG93X2NoaWNrZW5fdGFpbChjb25zdCBKU0luc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSlNJbnN0cnVjdGlvbiopOwogCisgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+CisgICAgICAgIHZvaWQgZ2VuZXJhdGVHZXRCeVZh
bFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CisKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKGNv
bnN0IEpTSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3JfbmV4
dChjb25zdCBKU0luc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnVtZXJhdG9y
X2dldF9ieV92YWwoY29uc3QgSlNJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBKU0luc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9w
Y29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgogICAgICAgICB2b2lkIGVt
aXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IE9wY29kZVR5cGUmLCBTbG93UGF0
aEZ1bmN0aW9uVHlwZSk7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3Zh
bChjb25zdCBKU0luc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnVtZXJhdG9y
X2hhc19vd25fcHJvcGVydHkoY29uc3QgSlNJbnN0cnVjdGlvbiopOwogCisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+CisgICAgICAgIHZvaWQgZ2VuZXJhdGVQdXRCeVZhbFNs
b3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9lbnVtZXJhdG9yX3B1dF9ieV92YWwoY29uc3QgSlNJ
bnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VudW1lcmF0b3JfcHV0X2J5
X3ZhbChjb25zdCBKU0luc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwogCiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEpTSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2FsbChjb25zdCBKU0luc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwpAQCAtNTYyLDcgKzU2OCwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBlbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSlNJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lcShj
b25zdCBKU0luc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwog
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2dldF9jYWxsZWUoY29uc3QgSlNJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNv
bnN0IEpTSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBKU0luc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSlNJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9n
ZXRfYnlfdmFsKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXMo
Y29uc3QgSlNJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
KyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEpTSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSlNJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9j
aGVja19wcml2YXRlX2JyYW5kKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50
X2J5X3ZhbChjb25zdCBKU0luc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEpTSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfaW5fYnlfdmFsKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX3ByaXZh
dGVfbmFtZShjb25zdCBKU0luc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2hhc19wcml2YXRlX2JyYW5kKGNvbnN0
IEpTSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBKU0luc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29w
X2xlc3MoY29uc3QgSlNJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sZXNzZXEoY29uc3QgSlNJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9ncmVhdGVyKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CkBAIC01ODgsNiArNjA4LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX25lZ2F0ZShjb25zdCBKU0luc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX25l
cShjb25zdCBKU0luc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSlNJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9wdXRfYnlfaWQoY29uc3QgSlNJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNv
bnN0IEpTSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Cisg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSlNJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3Vi
KGNvbnN0IEpTSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAKICAgICAgICAgdm9pZCBlbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSlNJbnN0cnVjdGlv
biopOwpAQCAtNjA1LDYgKzYyOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSlNJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKIAogICAgICAgICB2b2lkIGVtaXRIYXNQcml2YXRlKFZp
cnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0SGFzUHJpdmF0
ZVNsb3coQWNjZXNzVHlwZSk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiAgICAg
ICAgIHZvaWQgZW1pdE5ld0Z1bmNDb21tb24oY29uc3QgSlNJbnN0cnVjdGlvbiopOwpAQCAtNjQy
LDEyICs2NjcsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHJldHVybkZyb21CYXNlbGluZUdlbmVyYXRvcihW
TSYpOwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzX2NhbGxTbG93T3Bl
cmF0aW9uVGhlbkNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CisgICAgICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZGVsX2J5X2lkX2Nh
bGxTbG93T3BlcmF0aW9uVGhlbkNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CisgICAgICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZGVs
X2J5X3ZhbF9jYWxsU2xvd09wZXJhdGlvblRoZW5DaGVja0V4Y2VwdGlvbkdlbmVyYXRvcihWTSYp
OworICAgICAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBz
bG93X29wX3B1dF9ieV92YWxfY2FsbFNsb3dPcGVyYXRpb25UaGVuQ2hlY2tFeGNlcHRpb25HZW5l
cmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gc2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX2NhbGxTbG93T3BlcmF0aW9uVGhlbkNo
ZWNrRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CisKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9wdXRfdG9fc2NvcGVHZW5lcmF0b3Io
Vk0mKTsKICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gb3BfdGhyb3dfaGFuZGxlckdlbmVyYXRvcihWTSYpOwogICAgICAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBvcF9jaGVja190cmFwc19oYW5kbGVyR2Vu
ZXJhdG9yKFZNJik7CiAKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlfaWRfY2FsbFNsb3dPcGVyYXRpb25UaGVuQ2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9wdXRfYnlfaWRfY2FsbFNsb3dPcGVyYXRpb25U
aGVuQ2hlY2tFeGNlcHRpb25HZW5lcmF0b3IoVk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xvd19vcF9nZXRfYnlfdmFsX2NhbGxTbG93
T3BlcmF0aW9uVGhlbkNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKFZNJik7CisgICAgICAgIHN0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2J5X3Zh
bF93aXRoX3RoaXNfY2FsbFNsb3dPcGVyYXRpb25UaGVuQ2hlY2tFeGNlcHRpb25HZW5lcmF0b3Io
Vk0mKTsKKyAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRh
Zz4gc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX2NhbGxTbG93T3BlcmF0aW9uVGhlbkNoZWNrRXhj
ZXB0aW9uR2VuZXJhdG9yKFZNJik7CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfZ2V0X2Zyb21fc2NvcGVHZW5lcmF0b3IoVk0mKTsK
ICAgICAgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gc2xv
d19vcF9yZXNvbHZlX3Njb3BlR2VuZXJhdG9yKFZNJik7CisgICAgICAgIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dfb3BfaW5zdGFuY2VvZl9jYWxsU2xv
d09wZXJhdGlvblRoZW5DaGVja0V4Y2VwdGlvbkdlbmVyYXRvcihWTSYpOwogICAgICAgICB0ZW1w
bGF0ZSA8UmVzb2x2ZVR5cGU+CiAgICAgICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IGdlbmVyYXRlT3BHZXRGcm9tU2NvcGVUaHVuayhWTSYpOwogICAgICAg
ICB0ZW1wbGF0ZSA8UmVzb2x2ZVR5cGU+CkBAIC05MDYsNiArOTQzLDE4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBWZWN0b3I8Q2FsbD4gbV9jb25zaXN0ZW5jeUNoZWNrQ2FsbHM7CiAjZW5k
aWYKIAorICAgICAgICB1bnNpZ25lZCBtX2dldEJ5SWRJbmRleCB7IFVJTlRfTUFYIH07CisgICAg
ICAgIHVuc2lnbmVkIG1fZ2V0QnlWYWxJbmRleCB7IFVJTlRfTUFYIH07CisgICAgICAgIHVuc2ln
bmVkIG1fZ2V0QnlJZFdpdGhUaGlzSW5kZXggeyBVSU5UX01BWCB9OworICAgICAgICB1bnNpZ25l
ZCBtX2dldEJ5VmFsV2l0aFRoaXNJbmRleCB7IFVJTlRfTUFYIH07CisgICAgICAgIHVuc2lnbmVk
IG1fcHV0QnlJZEluZGV4IHsgVUlOVF9NQVggfTsKKyAgICAgICAgdW5zaWduZWQgbV9wdXRCeVZh
bEluZGV4IHsgVUlOVF9NQVggfTsKKyAgICAgICAgdW5zaWduZWQgbV9pbkJ5SWRJbmRleCB7IFVJ
TlRfTUFYIH07CisgICAgICAgIHVuc2lnbmVkIG1faW5CeVZhbEluZGV4IHsgVUlOVF9NQVggfTsK
KyAgICAgICAgdW5zaWduZWQgbV9kZWxCeVZhbEluZGV4IHsgVUlOVF9NQVggfTsKKyAgICAgICAg
dW5zaWduZWQgbV9kZWxCeUlkSW5kZXggeyBVSU5UX01BWCB9OworICAgICAgICB1bnNpZ25lZCBt
X2luc3RhbmNlT2ZJbmRleCB7IFVJTlRfTUFYIH07CisgICAgICAgIHVuc2lnbmVkIG1fcHJpdmF0
ZUJyYW5kQWNjZXNzSW5kZXggeyBVSU5UX01BWCB9OwogICAgICAgICB1bnNpZ25lZCBtX2NhbGxM
aW5rSW5mb0luZGV4IHsgVUlOVF9NQVggfTsKICAgICAgICAgdW5zaWduZWQgbV9ieXRlY29kZUNv
dW50SGF2aW5nU2xvd0Nhc2UgeyAwIH07CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAKaW5kZXggN2Y2ZmQ5YWZkZTA1Li4xZDdhYjczN2JmMWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtNDY1LDcgKzQ2NSw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2l0ZXJhdG9yX29wZW4oY29uc3QgSlNJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiAg
ICAgbG9hZENvbnN0YW50KHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKIAogICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlSlNSKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdE9iamVjdChiYXNlSlNSLnBheWxvYWRHUFIoKSkpOwogCiAgICAgc3RhdGljX2Fzc2VydChu
b092ZXJsYXAocmV0dXJuVmFsdWVKU1IsIHN0dWJJbmZvR1BSKSk7CiAKQEAgLTQ3Nyw4ICs0NzYs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXRlcmF0b3Jfb3Blbihjb25zdCBKU0luc3RydWN0aW9u
KiBpbnN0cnVjdGlvbikKIAogICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgo
KnRoaXMpOwogICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2Ug
bmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CiAgICAg
bV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAorICAgIHNldEZhc3RQYXRoUmVzdW1lUG9pbnQoKTsK
ICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRKU1IpOwogICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9uZXh0LCByZXN1bHRKU1IpOwogCkBAIC00
OTYsNiArNDk3LDIzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pdGVyYXRvcl9vcGVuKGNvbnN0
IEpTSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvCiAgICAgZW1pdEp1bXBTbG93
VG9Ib3RGb3JDaGVja3BvaW50KGp1bXAoKSk7CiAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OworCisgICAgdXNpbmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OkdldEJ5SWQ6OmJhc2VKU1I7Cisg
ICAgdXNpbmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OkdldEJ5SWQ6OnN0dWJJbmZvR1BSOworICAg
IHVzaW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpHZXRCeUlkOjpnbG9iYWxPYmplY3RHUFI7CisK
KyAgICBKdW1wTGlzdCBub3RPYmplY3Q7CisgICAgbm90T2JqZWN0LmFwcGVuZChicmFuY2hJZk5v
dENlbGwoYmFzZUpTUikpOworICAgIG5vdE9iamVjdC5hcHBlbmQoYnJhbmNoSWZOb3RPYmplY3Qo
YmFzZUpTUi5wYXlsb2FkR1BSKCkpKTsKKworICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9
IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHNsb3dfb3Bf
Z2V0X2J5X2lkX2NhbGxTbG93T3BlcmF0aW9uVGhlbkNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVKSVRS
ZWdpc3RlcnM6OkdldEJ5SWQ6OnJlc3VsdEpTUiA9PSByZXR1cm5WYWx1ZUpTUik7CisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworICAgIGp1bXAoKS5s
aW5rVG8oZmFzdFBhdGhSZXN1bWVQb2ludCgpLCB0aGlzKTsKKworICAgIG5vdE9iamVjdC5saW5r
KHRoaXMpOwogICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIwKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9iamVjdCwgYXJndW1lbnRH
UFIwKTsKIH0KQEAgLTUxNCw2ICs1MzIsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9u
ZXh0KGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogCiAgICAgdXNpbmcgQmFzZWxp
bmVKSVRSZWdpc3RlcnM6OkdldEJ5SWQ6OmJhc2VKU1I7CiAgICAgdXNpbmcgQmFzZWxpbmVKSVRS
ZWdpc3RlcnM6OkdldEJ5SWQ6OnJlc3VsdEpTUjsKKyAgICB1c2luZyBCYXNlbGluZUpJVFJlZ2lz
dGVyczo6R2V0QnlJZDo6ZG9udENsb2JiZXJKU1I7CiAgICAgdXNpbmcgQmFzZWxpbmVKSVRSZWdp
c3RlcnM6OkdldEJ5SWQ6OnN0dWJJbmZvR1BSOwogCiAgICAgY29uc3RleHByIEpTVmFsdWVSZWdz
IG5leHRKU1IgPSBiYXNlSlNSOyAvLyBVc2VkIGFzIHRlbXBvcmFyeSByZWdpc3RlcgpAQCAtNTM0
LDcgKzU1Myw5IEBAIHZvaWQgSklUOjplbWl0X29wX2l0ZXJhdG9yX25leHQoY29uc3QgSlNJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiAgICAgLy8gY2FsbCByZXN1bHQgKHsgZG9uZSwgdmFsdWUg
fSBKU09iamVjdCkgaW4gcmVnVDAgIChyZWdUMS9yZWdUMCBvciAzMi1iaXQpCiAgICAgc3RhdGlj
X2Fzc2VydChub092ZXJsYXAocmVzdWx0SlNSLCBzdHViSW5mb0dQUikpOwogCisgICAgY29uc3Rl
eHByIEpTVmFsdWVSZWdzIGl0ZXJDYWxsUmVzdWx0SlNSID0gZG9udENsb2JiZXJKU1I7CiAgICAg
bW92ZVZhbHVlUmVncyhyZXR1cm5WYWx1ZUpTUiwgYmFzZUpTUik7CisgICAgbW92ZVZhbHVlUmVn
cyhyZXR1cm5WYWx1ZUpTUiwgaXRlckNhbGxSZXN1bHRKU1IpOwogCiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKGJhc2VKU1IpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9i
amVjdChiYXNlSlNSLnBheWxvYWRHUFIoKSkpOwpAQCAtNTQyLDEyICs1NjMsMTUgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBKU0luc3RydWN0aW9uKiBpbnN0cnVjdGlv
bikKICAgICAgICAgYXV0byBbIHN0dWJJbmZvLCBzdHViSW5mb0luZGV4IF0gPSBhZGRVbmxpbmtl
ZFN0cnVjdHVyZVN0dWJJbmZvKCk7CiAgICAgICAgIGxvYWRDb25zdGFudChzdHViSW5mb0luZGV4
LCBzdHViSW5mb0dQUik7CiAKKyAgICAgICAgYXV0byBwcmVzZXJ2ZWRSZWdzID0gUmVnaXN0ZXJT
ZXRCdWlsZGVyOjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKyAgICAgICAgcHJlc2VydmVk
UmVncy5hZGQoaXRlckNhbGxSZXN1bHRKU1IsIElnbm9yZVZlY3RvcnMpOwogICAgICAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgIG51bGxwdHIsIHN0dWJJbmZvLCBKSVRU
eXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUlu
ZGV4KEJ5dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSksIFJlZ2lzdGVyU2V0
QnVpbGRlcjo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgICAgICBudWxscHRy
LCBzdHViSW5mbywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQo
KSkpLCBwcmVzZXJ2ZWRSZWdzLAogICAgICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3Jl
YXRlRnJvbUltbW9ydGFsSWRlbnRpZmllcih2bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUuaW1wbCgp
KSwgYmFzZUpTUiwgcmVzdWx0SlNSLCBzdHViSW5mb0dQUiwgQWNjZXNzVHlwZTo6R2V0QnlJZCk7
CiAKICAgICAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcyk7CiAg
ICAgICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0
byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgICAgICBhZGRTbG93Q2FzZSgpOwogICAgICAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCiAgICAgICAgIEJ5dGVjb2RlSW5kZXggYnl0ZWNv
ZGVJbmRleCA9IG1fYnl0ZWNvZGVJbmRleDsKQEAgLTU1Nyw3ICs1ODEsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQog
ICAgIH0KIAogICAgIHsKLSAgICAgICAgYXV0byB1c2VkUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXRC
dWlsZGVyKHJlc3VsdEpTUikuYnVpbGRBbmRWYWxpZGF0ZSgpOworICAgICAgICBhdXRvIHVzZWRS
ZWdpc3RlcnMgPSBSZWdpc3RlclNldEJ1aWxkZXIocmVzdWx0SlNSLCBpdGVyQ2FsbFJlc3VsdEpT
UikuYnVpbGRBbmRWYWxpZGF0ZSgpOwogICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Ig
c2NyYXRjaEFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2gx
ID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKICAgICAgICAgR1BSUmVn
IHNjcmF0Y2gyID0gc2NyYXRjaEFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKQEAgLTU2
Niw3ICs1OTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0IEpTSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogICAgICAgICBsb2FkR2xvYmFsT2JqZWN0KGdsb2JhbEdQ
Uik7CiAgICAgICAgIEp1bXBMaXN0IGl0ZXJhdGlvbkRvbmUgPSBicmFuY2hJZlRydXRoeSh2bSgp
LCByZXN1bHRKU1IsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBnbG9iYWxHUFIpOwogCi0gICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgYmFzZUpTUik7CisgICAgICAgIG1v
dmVWYWx1ZVJlZ3MoaXRlckNhbGxSZXN1bHRKU1IsIGJhc2VKU1IpOwogICAgICAgICBhdXRvIFsg
c3R1YkluZm8sIHN0dWJJbmZvSW5kZXggXSA9IGFkZFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8o
KTsKICAgICAgICAgbG9hZENvbnN0YW50KHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKIApA
QCAtNTc2LDggKzYwMCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pdGVyYXRvcl9uZXh0KGNvbnN0
IEpTSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogCiAgICAgICAgIGdlbi5nZW5lcmF0ZUJhc2Vs
aW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMpOwogICAgICAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0
IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoKTsKICAgICAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAor
ICAgICAgICBzZXRGYXN0UGF0aFJlc3VtZVBvaW50KCk7CiAgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdEpTUik7CiAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVzdWx0SlNSKTsKIApAQCAtNTk3LDkgKzYyMywzNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaXRlcmF0b3JfbmV4dChjb25zdCBKU0luc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsbwogICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2Rl
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdEZvckNoZWNrcG9pbnQoanVtcCgpKTsKIAorICAgIHVz
aW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpHZXRCeUlkOjpiYXNlSlNSOworICAgIHVzaW5nIEJh
c2VsaW5lSklUUmVnaXN0ZXJzOjpHZXRCeUlkOjpyZXN1bHRKU1I7CisgICAgdXNpbmcgQmFzZWxp
bmVKSVRSZWdpc3RlcnM6OkdldEJ5SWQ6Omdsb2JhbE9iamVjdEdQUjsKKyAgICB1c2luZyBCYXNl
bGluZUpJVFJlZ2lzdGVyczo6R2V0QnlJZDo6ZG9udENsb2JiZXJKU1I7CisgICAgdXNpbmcgQmFz
ZWxpbmVKSVRSZWdpc3RlcnM6OkdldEJ5SWQ6OnN0dWJJbmZvR1BSOworCisgICAgY29uc3RleHBy
IEpTVmFsdWVSZWdzIGl0ZXJDYWxsUmVzdWx0SlNSID0gZG9udENsb2JiZXJKU1I7CisKICAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIGxvYWRHbG9iYWxPYmplY3QoYXJndW1lbnRHUFIw
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRocm93SXRlcmF0b3JSZXN1bHRJc05vdE9i
amVjdCwgYXJndW1lbnRHUFIwKTsKKworICAgIHsKKyAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRv
ciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKKyAgICAgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0
Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9jYWxsU2xvd09wZXJhdGlvblRoZW5DaGVja0V4Y2Vw
dGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICAgICAgc3RhdGlj
X2Fzc2VydChCYXNlbGluZUpJVFJlZ2lzdGVyczo6R2V0QnlJZDo6cmVzdWx0SlNSID09IHJldHVy
blZhbHVlSlNSKTsKKyAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBDYWxsKCkpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KG5vT3ZlcmxhcChyZXN1bHRKU1IsIGl0
ZXJDYWxsUmVzdWx0SlNSKSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNv
ZGUubV92YWx1ZSwgaXRlckNhbGxSZXN1bHRKU1IpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hv
dEZvckNoZWNrcG9pbnQoanVtcCgpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CisgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0
QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CisgICAgICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOworICAgICAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIoc2xvd19v
cF9nZXRfYnlfaWRfY2FsbFNsb3dPcGVyYXRpb25UaGVuQ2hlY2tFeGNlcHRpb25HZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgICAgIHN0YXRpY19hc3NlcnQoQmFzZWxp
bmVKSVRSZWdpc3RlcnM6OkdldEJ5SWQ6OnJlc3VsdEpTUiA9PSByZXR1cm5WYWx1ZUpTUik7Cisg
ICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKKyAg
ICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZUNhY2hlR2VuZXJhdG9yLmNwcAppbmRleCAxMjhiOGEzM2U4ZDAu
LjQwMmU2ZTU5NDJkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJ
bmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAKQEAgLTYzLDcgKzYzLDYgQEAgdm9pZCBKSVRJbmxp
bmVDYWNoZUdlbmVyYXRvcjo6ZmluYWxpemUoCiAgICAgTGlua0J1ZmZlciYgZmFzdFBhdGgsIExp
bmtCdWZmZXImIHNsb3dQYXRoLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRh
Zz4gc3RhcnQpCiB7CiAgICAgQVNTRVJUKG1fc3R1YkluZm8pOwotICAgIEFTU0VSVCghbV9zdHVi
SW5mby0+dXNlRGF0YUlDKTsKICAgICBtX3N0dWJJbmZvLT5zdGFydExvY2F0aW9uID0gc3RhcnQ7
CiAgICAgbV9zdHViSW5mby0+ZG9uZUxvY2F0aW9uID0gZmFzdFBhdGgubG9jYXRpb25PZjxKU0lu
dGVybmFsUHRyVGFnPihtX2RvbmUpOwogCkBAIC0xMDIsNyArMTAxLDggQEAgdm9pZCBKSVRCeUlk
R2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2xv
d1BhdGgpCiB7CiAgICAgQVNTRVJUKG1fc3R1YkluZm8pOwogICAgIEpJVElubGluZUNhY2hlR2Vu
ZXJhdG9yOjpmaW5hbGl6ZShmYXN0UGF0aCwgc2xvd1BhdGgsIGZhc3RQYXRoLmxvY2F0aW9uT2Y8
SklUU3R1YlJvdXRpbmVQdHJUYWc+KG1fc3RhcnQpKTsKLSAgICBBU1NFUlQoIW1fc3R1YkluZm8t
PnVzZURhdGFJQyk7CisgICAgaWYgKG1fc3R1YkluZm8tPnVzZURhdGFJQykKKyAgICAgICAgbV9z
dHViSW5mby0+bV9jb2RlUHRyID0gbV9zdHViSW5mby0+c2xvd1BhdGhTdGFydExvY2F0aW9uOwog
fQogCiB2b2lkIEpJVEJ5SWRHZW5lcmF0b3I6OmdlbmVyYXRlRmFzdENvbW1vbihDQ2FsbEhlbHBl
cnMmIGppdCwgc2l6ZV90IGlubGluZUlDU2l6ZSkKQEAgLTMyNCw3ICszMjQsOCBAQCB2b2lkIEpJ
VERlbEJ5VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1
ZmZlciYgc2xvd1BhdGgpCiB7CiAgICAgQVNTRVJUKG1fc3R1YkluZm8pOwogICAgIEJhc2U6OmZp
bmFsaXplKGZhc3RQYXRoLCBzbG93UGF0aCwgZmFzdFBhdGgubG9jYXRpb25PZjxKSVRTdHViUm91
dGluZVB0clRhZz4obV9zdGFydCkpOwotICAgIEFTU0VSVCghbV9zdHViSW5mby0+dXNlRGF0YUlD
KTsKKyAgICBpZiAobV9zdHViSW5mby0+dXNlRGF0YUlDKQorICAgICAgICBtX3N0dWJJbmZvLT5t
X2NvZGVQdHIgPSBtX3N0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb247CiB9CiAKIEpJVERl
bEJ5SWRHZW5lcmF0b3I6OkpJVERlbEJ5SWRHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IENvbXBpbGVUaW1lU3RydWN0dXJlU3R1YkluZm8gc3R1YkluZm8sIEpJVFR5cGUgaml0VHlwZSwg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsIEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZSwgY29uc3QgUmVnaXN0ZXJTZXRCdWlsZGVyJiB1c2VkUmVnaXN0ZXJz
LCBDYWNoZWFibGVJZGVudGlmaWVyIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNW
YWx1ZVJlZ3MgcmVzdWx0LCBHUFJSZWcgc3R1YkluZm9HUFIpCkBAIC0zNTcsNyArMzU4LDggQEAg
dm9pZCBKSVREZWxCeUlkR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aCwg
TGlua0J1ZmZlciYgc2xvd1BhdGgpCiB7CiAgICAgQVNTRVJUKG1fc3R1YkluZm8pOwogICAgIEJh
c2U6OmZpbmFsaXplKGZhc3RQYXRoLCBzbG93UGF0aCwgZmFzdFBhdGgubG9jYXRpb25PZjxKSVRT
dHViUm91dGluZVB0clRhZz4obV9zdGFydCkpOwotICAgIEFTU0VSVCghbV9zdHViSW5mby0+dXNl
RGF0YUlDKTsKKyAgICBpZiAobV9zdHViSW5mby0+dXNlRGF0YUlDKQorICAgICAgICBtX3N0dWJJ
bmZvLT5tX2NvZGVQdHIgPSBtX3N0dWJJbmZvLT5zbG93UGF0aFN0YXJ0TG9jYXRpb247CiB9CiAK
IEpJVEluQnlWYWxHZW5lcmF0b3I6OkpJVEluQnlWYWxHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIENvbXBpbGVUaW1lU3RydWN0dXJlU3R1YkluZm8gc3R1YkluZm8sIEpJVFR5cGUgaml0
VHlwZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgs
IEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSwgY29uc3QgUmVnaXN0ZXJTZXRCdWlsZGVyJiB1c2VkUmVn
aXN0ZXJzLCBKU1ZhbHVlUmVncyBiYXNlLCBKU1ZhbHVlUmVncyBwcm9wZXJ0eSwgSlNWYWx1ZVJl
Z3MgcmVzdWx0LCBHUFJSZWcgYXJyYXlQcm9maWxlR1BSLCBHUFJSZWcgc3R1YkluZm9HUFIpCkBA
IC0zOTIsNyArMzk0LDggQEAgdm9pZCBKSVRJbkJ5VmFsR2VuZXJhdG9yOjpmaW5hbGl6ZSgKICAg
ICBBU1NFUlQobV9zdGFydC5pc1NldCgpKTsKICAgICBBU1NFUlQobV9zdHViSW5mbyk7CiAgICAg
QmFzZTo6ZmluYWxpemUoZmFzdFBhdGgsIHNsb3dQYXRoLCBmYXN0UGF0aC5sb2NhdGlvbk9mPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0YXJ0KSk7Ci0gICAgQVNTRVJUKCFtX3N0dWJJbmZvLT51
c2VEYXRhSUMpOworICAgIGlmIChtX3N0dWJJbmZvLT51c2VEYXRhSUMpCisgICAgICAgIG1fc3R1
YkluZm8tPm1fY29kZVB0ciA9IG1fc3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKIH0K
IAogSklUSW5CeUlkR2VuZXJhdG9yOjpKSVRJbkJ5SWRHZW5lcmF0b3IoCkBAIC00ODksNyArNDky
LDggQEAgdm9pZCBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBm
YXN0UGF0aCwgTGlua0J1ZmZlciYgc2xvd1BhdGgKIHsKICAgICBBU1NFUlQobV9zdHViSW5mbyk7
CiAgICAgQmFzZTo6ZmluYWxpemUoZmFzdFBhdGgsIHNsb3dQYXRoLCBmYXN0UGF0aC5sb2NhdGlv
bk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0YXJ0KSk7Ci0gICAgQVNTRVJUKCFtX3N0dWJJ
bmZvLT51c2VEYXRhSUMpOworICAgIGlmIChtX3N0dWJJbmZvLT51c2VEYXRhSUMpCisgICAgICAg
IG1fc3R1YkluZm8tPm1fY29kZVB0ciA9IG1fc3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlv
bjsKIH0KIAogSklUR2V0QnlWYWxHZW5lcmF0b3I6OkpJVEdldEJ5VmFsR2VuZXJhdG9yKENvZGVC
bG9jayogY29kZUJsb2NrLCBDb21waWxlVGltZVN0cnVjdHVyZVN0dWJJbmZvIHN0dWJJbmZvLCBK
SVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUsIGNvbnN0IFJlZ2lzdGVyU2V0QnVpbGRl
ciYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFzZSwgSlNWYWx1ZVJlZ3MgcHJvcGVydHks
IEpTVmFsdWVSZWdzIHJlc3VsdCwgR1BSUmVnIGFycmF5UHJvZmlsZUdQUiwgR1BSUmVnIHN0dWJJ
bmZvR1BSKQpAQCAtNTMwLDcgKzUzNCw4IEBAIHZvaWQgSklUR2V0QnlWYWxHZW5lcmF0b3I6OmZp
bmFsaXplKExpbmtCdWZmZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCkKIHsKICAg
ICBBU1NFUlQobV9zdHViSW5mbyk7CiAgICAgQmFzZTo6ZmluYWxpemUoZmFzdFBhdGgsIHNsb3dQ
YXRoLCBmYXN0UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0YXJ0KSk7
Ci0gICAgQVNTRVJUKCFtX3N0dWJJbmZvLT51c2VEYXRhSUMpOworICAgIGlmIChtX3N0dWJJbmZv
LT51c2VEYXRhSUMpCisgICAgICAgIG1fc3R1YkluZm8tPm1fY29kZVB0ciA9IG1fc3R1YkluZm8t
PnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKIH0KIAogSklUR2V0QnlWYWxXaXRoVGhpc0dlbmVyYXRv
cjo6SklUR2V0QnlWYWxXaXRoVGhpc0dlbmVyYXRvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29t
cGlsZVRpbWVTdHJ1Y3R1cmVTdHViSW5mbyBzdHViSW5mbywgSklUVHlwZSBqaXRUeXBlLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwgQWNjZXNzVHlw
ZSBhY2Nlc3NUeXBlLCBjb25zdCBSZWdpc3RlclNldEJ1aWxkZXImIHVzZWRSZWdpc3RlcnMsIEpT
VmFsdWVSZWdzIGJhc2UsIEpTVmFsdWVSZWdzIHByb3BlcnR5LCBKU1ZhbHVlUmVncyB0aGlzUmVn
cywgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBHUFJSZWcgYXJyYXlQcm9maWxlR1BSLCBHUFJSZWcgc3R1
YkluZm9HUFIpCkBAIC01NzMsNyArNTc4LDggQEAgdm9pZCBKSVRHZXRCeVZhbFdpdGhUaGlzR2Vu
ZXJhdG9yOjpmaW5hbGl6ZShMaW5rQnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYgc2wKIHsK
ICAgICBBU1NFUlQobV9zdHViSW5mbyk7CiAgICAgQmFzZTo6ZmluYWxpemUoZmFzdFBhdGgsIHNs
b3dQYXRoLCBmYXN0UGF0aC5sb2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0YXJ0
KSk7Ci0gICAgQVNTRVJUKCFtX3N0dWJJbmZvLT51c2VEYXRhSUMpOworICAgIGlmIChtX3N0dWJJ
bmZvLT51c2VEYXRhSUMpCisgICAgICAgIG1fc3R1YkluZm8tPm1fY29kZVB0ciA9IG1fc3R1Yklu
Zm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlvbjsKIH0KIAogSklUUHV0QnlWYWxHZW5lcmF0b3I6OkpJ
VFB1dEJ5VmFsR2VuZXJhdG9yKENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxlVGltZVN0cnVj
dHVyZVN0dWJJbmZvIHN0dWJJbmZvLCBKSVRUeXBlIGppdFR5cGUsIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUs
IGNvbnN0IFJlZ2lzdGVyU2V0QnVpbGRlciYgdXNlZFJlZ2lzdGVycywgSlNWYWx1ZVJlZ3MgYmFz
ZSwgSlNWYWx1ZVJlZ3MgcHJvcGVydHksIEpTVmFsdWVSZWdzIHZhbHVlLCBHUFJSZWcgYXJyYXlQ
cm9maWxlR1BSLCBHUFJSZWcgc3R1YkluZm9HUFIsIEVDTUFNb2RlIGVjbWFNb2RlKQpAQCAtNjA4
LDcgKzYxNCw4IEBAIHZvaWQgSklUUHV0QnlWYWxHZW5lcmF0b3I6OmZpbmFsaXplKExpbmtCdWZm
ZXImIGZhc3RQYXRoLCBMaW5rQnVmZmVyJiBzbG93UGF0aCkKIHsKICAgICBBU1NFUlQobV9zdHVi
SW5mbyk7CiAgICAgQmFzZTo6ZmluYWxpemUoZmFzdFBhdGgsIHNsb3dQYXRoLCBmYXN0UGF0aC5s
b2NhdGlvbk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0YXJ0KSk7Ci0gICAgQVNTRVJUKCFt
X3N0dWJJbmZvLT51c2VEYXRhSUMpOworICAgIGlmIChtX3N0dWJJbmZvLT51c2VEYXRhSUMpCisg
ICAgICAgIG1fc3R1YkluZm8tPm1fY29kZVB0ciA9IG1fc3R1YkluZm8tPnNsb3dQYXRoU3RhcnRM
b2NhdGlvbjsKIH0KIAogSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yOjpKSVRQcml2YXRl
QnJhbmRBY2Nlc3NHZW5lcmF0b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGVUaW1lU3Ry
dWN0dXJlU3R1YkluZm8gc3R1YkluZm8sIEpJVFR5cGUgaml0VHlwZSwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsIEFjY2Vzc1R5cGUgYWNjZXNzVHlw
ZSwgY29uc3QgUmVnaXN0ZXJTZXRCdWlsZGVyJiB1c2VkUmVnaXN0ZXJzLCBKU1ZhbHVlUmVncyBi
YXNlLCBKU1ZhbHVlUmVncyBicmFuZCwgR1BSUmVnIHN0dWJJbmZvR1BSKQpAQCAtNjQyLDcgKzY0
OSw4IEBAIHZvaWQgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJhdG9yOjpmaW5hbGl6ZShMaW5r
QnVmZmVyJiBmYXN0UGF0aCwgTGlua0J1ZmZlciYKIHsKICAgICBBU1NFUlQobV9zdHViSW5mbyk7
CiAgICAgQmFzZTo6ZmluYWxpemUoZmFzdFBhdGgsIHNsb3dQYXRoLCBmYXN0UGF0aC5sb2NhdGlv
bk9mPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihtX3N0YXJ0KSk7Ci0gICAgQVNTRVJUKCFtX3N0dWJJ
bmZvLT51c2VEYXRhSUMpOworICAgIGlmIChtX3N0dWJJbmZvLT51c2VEYXRhSUMpCisgICAgICAg
IG1fc3R1YkluZm8tPm1fY29kZVB0ciA9IG1fc3R1YkluZm8tPnNsb3dQYXRoU3RhcnRMb2NhdGlv
bjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5s
aW5lcy5oCmluZGV4IDVmNWNkMWQyNmZhMy4uOWM5Y2FlOTJjYTYwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZXMuaApAQCAtNDgxLDEzICs0ODEsNiBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoSlNWYWx1ZVJlZ3MganNyKQogICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIoanNyKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUg
dm9pZCBKSVQ6OmVtaXROYWtlZE5lYXJKdW1wSWZOb3RKU0NlbGwoSlNWYWx1ZVJlZ3MganNSZWcs
IFZpcnR1YWxSZWdpc3RlciB2UmVnLCBDb2RlUHRyPEpJVFRodW5rUHRyVGFnPiB0YXJnZXQpCi17
Ci0gICAgaWYgKGlzS25vd25DZWxsKHZSZWcpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9uZWFy
SnVtcHMuYXBwZW5kKE5lYXJKdW1wUmVjb3JkKGJyYW5jaElmTm90Q2VsbChqc1JlZyksIENvZGVM
b2NhdGlvbkxhYmVsIHsgdGFyZ2V0IH0pKTsKLX0KLQogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKEpTVmFsdWVSZWdzIHJlZykKIHsKICAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAppbmRleCBkNTBlMDAzOWQwNDEuLmRiYWQ3MzZkMmE1ZCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC0xNjcsOCArMTY3LDggQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihjb25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgbG9hZENvbnN0YW50KHN0dWJJbmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsK
IAogICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBj
ZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0
YW5jZS4KLSAgICBlbWl0TmFrZWROZWFySnVtcElmTm90SlNDZWxsKHZhbHVlSlNSLCB2YWx1ZSwg
SW5saW5lQ2FjaGVDb21waWxlcjo6Z2VuZXJhdGVTbG93UGF0aENvZGUodm0oKSwgQWNjZXNzVHlw
ZTo6SW5zdGFuY2VPZikuY29kZSgpKTsKLSAgICBlbWl0TmFrZWROZWFySnVtcElmTm90SlNDZWxs
KHByb3RvSlNSLCBwcm90bywgSW5saW5lQ2FjaGVDb21waWxlcjo6Z2VuZXJhdGVTbG93UGF0aENv
ZGUodm0oKSwgQWNjZXNzVHlwZTo6SW5zdGFuY2VPZikuY29kZSgpKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwodmFsdWVKU1IsIHZhbHVlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocHJvdG9KU1IsIHByb3RvKTsKIAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0
b3IgZ2VuKAogICAgICAgICBudWxscHRyLCBzdHViSW5mbywgSklUVHlwZTo6QmFzZWxpbmVKSVQs
IENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5k
ZXgpLApAQCAtMTgyLDExICsxODIsNTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihj
b25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICBib3hCb29sZWFuKHJlc3VsdEpTUi5wYXlsb2FkR1BSKCksIHJlc3VsdEpTUik7
CiAjZW5kaWYKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdl
bik7CiAKKyAgICBzZXRGYXN0UGF0aFJlc3VtZVBvaW50KCk7CiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJlc3VsdEpTUik7CiB9CiAKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQoreworICAgIEFTU0VSVChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSkgPT0gbV9ieXRlY29kZUluZGV4KTsKKyAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9y
JiBnZW4gPSBtX2luc3RhbmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOworICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAg
ZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHNsb3dfb3BfaW5zdGFuY2VvZl9jYWxs
U2xvd09wZXJhdGlvblRoZW5DaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpz
bG93X29wX2luc3RhbmNlb2ZfY2FsbFNsb3dPcGVyYXRpb25UaGVuQ2hlY2tFeGNlcHRpb25HZW5l
cmF0b3IoVk0mIHZtKQoreworICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5j
dGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UK
KyAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0
IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgLy8gREZH
L0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0
cywgd2hpY2ggbWF5IG5vdCBtYXRjaAorICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisg
ICAgQ0NhbGxIZWxwZXJzIGppdDsKKworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlw
ZShvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUpOworCisgICAgdXNpbmcgQmFzZWxpbmVKSVRS
ZWdpc3RlcnM6Okluc3RhbmNlb2Y6OnZhbHVlSlNSOworICAgIHVzaW5nIEJhc2VsaW5lSklUUmVn
aXN0ZXJzOjpJbnN0YW5jZW9mOjpwcm90b0pTUjsKKyAgICB1c2luZyBCYXNlbGluZUpJVFJlZ2lz
dGVyczo6SW5zdGFuY2VvZjo6Z2xvYmFsT2JqZWN0R1BSOworICAgIHVzaW5nIEJhc2VsaW5lSklU
UmVnaXN0ZXJzOjpJbnN0YW5jZW9mOjpzdHViSW5mb0dQUjsKKworICAgIGppdC5lbWl0Q1RJVGh1
bmtQcm9sb2d1ZSgpOworCisgICAgLy8gQ2FsbCBzbG93IG9wZXJhdGlvbgorICAgIGppdC5wcmVw
YXJlQ2FsbE9wZXJhdGlvbih2bSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChqaXQsIGdsb2JhbE9i
amVjdEdQUik7CisgICAgaml0LnNldHVwQXJndW1lbnRzPFNsb3dPcGVyYXRpb24+KHZhbHVlSlNS
LCBwcm90b0pTUiwgZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUik7CisgICAgc3RhdGljX2Fz
c2VydChwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAzPigpID09IHN0dWJJbmZv
R1BSLCAiTmVlZGVkIGZvciBicmFuY2ggdG8gc2xvdyBvcGVyYXRpb24gdmlhIFN0dWJJbmZvIik7
CisgICAgaml0LmNhbGwoQWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mU2xvd09wZXJhdGlvbigpKSwgT3BlcmF0aW9uUHRyVGFnKTsKKworICAgIGppdC5lbWl0
Q1RJVGh1bmtFcGlsb2d1ZSgpOworCisgICAgLy8gVGFpbCBjYWxsIHRvIGV4Y2VwdGlvbiBjaGVj
ayB0aHVuaworICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBqaXQuanVtcCgpOworCisgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhleGNlcHRpb25DaGVj
aywgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRv
cikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX1RIVU5L
KHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX2luc3RhbmNl
b2ZfY2FsbFNsb3dPcGVyYXRpb25UaGVuQ2hlY2tFeGNlcHRpb24iKTsKK30KKwogdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSlNJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNFbXB0
eT4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAKaW5kZXggMGYwYzAzZTRmNzA4Li4yMWE3OGQxNTEyMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC02OSw4ICs2OSw2IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSlNJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIGxvYWRDb25zdGFudChzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7
CiAgICAgbWF0ZXJpYWxpemVQb2ludGVySW50b01ldGFkYXRhKGJ5dGVjb2RlLCBPcEdldEJ5VmFs
OjpNZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAKLSAgICBl
bWl0TmFrZWROZWFySnVtcElmTm90SlNDZWxsKGJhc2VKU1IsIGJhc2UsIElubGluZUNhY2hlQ29t
cGlsZXI6OmdlbmVyYXRlU2xvd1BhdGhDb2RlKHZtKCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsKS5j
b2RlKCkpOwotCiAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAogICAgICAgICBudWxscHRy
LCBzdHViSW5mbywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZh
bCwgUmVnaXN0ZXJTZXRCdWlsZGVyOjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKICAgICAg
ICAgYmFzZUpTUiwgcHJvcGVydHlKU1IsIHJlc3VsdEpTUiwgcHJvZmlsZUdQUiwgc3R1YkluZm9H
UFIpOwpAQCAtODAsMTcgKzc4LDcyIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29u
c3QgSlNJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGlmIChieXRlY29kZS5t
ZXRhZGF0YShtX3Byb2ZpbGVkQ29kZUJsb2NrKS5tX3NlZW5JZGVudGlmaWVycy5jb3VudCgpID4g
T3B0aW9uczo6Z2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMoKSkKICAgICAgICAgc3R1
YkluZm8tPmNhbkJlTWVnYW1vcnBoaWMgPSB0cnVlOwogCisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VKU1IsIGJhc2UpOwogICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbEFuZFByb2ZpbGUoYmFzZUpTUi5wYXlsb2FkR1BSKCksIHByb2ZpbGVHUFIsIHNjcmF0Y2gx
R1BSKTsKIAogICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMpOwog
CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAg
IHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25z
ZXJ2YXRpdmVseSByZXNldCBTUAorICAgIHNldEZhc3RQYXRoUmVzdW1lUG9pbnQoKTsKICAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLCByZXN1bHRKU1IpOwogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRKU1IpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBP
cGNvZGVUeXBlPgordm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNv
ZGVUeXBlJiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBB
U1NFUlQoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKTsKKyAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleCht
X2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgSklUR2V0
QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzW21fZ2V0QnlWYWxJbmRleCsrXTsKKyAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX2dldF9i
eV92YWxfY2FsbFNsb3dPcGVyYXRpb25UaGVuQ2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFn
Z2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBDYWxsKCkpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChj
b25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgZ2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKSwgaXRlcik7Cit9CisKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9ieV92YWxfY2Fs
bFNsb3dPcGVyYXRpb25UaGVuQ2hlY2tFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQoreworICAg
IC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdp
dGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKKyAgICAvLyBpdCBtYWtlcyBhc3N1
bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9t
IENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0
aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRj
aAorICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgQ0NhbGxIZWxwZXJzIGppdDsK
KworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25HZXRCeVZhbE9w
dGltaXplKTsKKworICAgIHVzaW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpHZXRCeVZhbDo6YmFz
ZUpTUjsKKyAgICB1c2luZyBCYXNlbGluZUpJVFJlZ2lzdGVyczo6R2V0QnlWYWw6OnByb3BlcnR5
SlNSOworICAgIHVzaW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpHZXRCeVZhbDo6Z2xvYmFsT2Jq
ZWN0R1BSOworICAgIHVzaW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpHZXRCeVZhbDo6c3R1Yklu
Zm9HUFI7CisgICAgdXNpbmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OkdldEJ5VmFsOjpwcm9maWxl
R1BSOworCisgICAgaml0LmVtaXRDVElUaHVua1Byb2xvZ3VlKCk7CisKKyAgICAvLyBDYWxsIHNs
b3cgb3BlcmF0aW9uCisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBsb2Fk
R2xvYmFsT2JqZWN0KGppdCwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVu
dHM8U2xvd09wZXJhdGlvbj4oYmFzZUpTUiwgcHJvcGVydHlKU1IsIGdsb2JhbE9iamVjdEdQUiwg
c3R1YkluZm9HUFIsIHByb2ZpbGVHUFIpOworICAgIHN0YXRpY19hc3NlcnQocHJlZmVycmVkQXJn
dW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMz4oKSA9PSBzdHViSW5mb0dQUiwgIk5lZWRlZCBmb3Ig
YnJhbmNoIHRvIHNsb3cgb3BlcmF0aW9uIHZpYSBTdHViSW5mbyIpOworICAgIGppdC5jYWxsKEFk
ZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRp
b24oKSksIE9wZXJhdGlvblB0clRhZyk7CisKKyAgICBqaXQuZW1pdENUSVRodW5rRXBpbG9ndWUo
KTsKKworICAgIC8vIFRhaWwgY2FsbCB0byBleGNlcHRpb24gY2hlY2sgdGh1bmsKKyAgICBKdW1w
IGV4Y2VwdGlvbkNoZWNrID0gaml0Lmp1bXAoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtCdWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1
bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhjZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxh
YmVsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSkpOworICAgIHJldHVybiBGSU5BTElaRV9USFVOSyhwYXRjaEJ1ZmZlciwgSklU
VGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19vcF9nZXRfYnlfdmFsX2NhbGxTbG93T3BlcmF0
aW9uVGhlbkNoZWNrRXhjZXB0aW9uIik7Cit9CisKIHZvaWQgSklUOjplbWl0X29wX2dldF9wcml2
YXRlX25hbWUoY29uc3QgSlNJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJpdmF0ZU5hbWU+
KCk7CkBAIC0xMTEsMTkgKzE2NCw2NyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJpdmF0ZV9u
YW1lKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRvIFsg
c3R1YkluZm8sIHN0dWJJbmZvSW5kZXggXSA9IGFkZFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8o
KTsKICAgICBsb2FkQ29uc3RhbnQoc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwogCi0gICAg
ZW1pdE5ha2VkTmVhckp1bXBJZk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlLCBJbmxpbmVDYWNoZUNv
bXBpbGVyOjpnZW5lcmF0ZVNsb3dQYXRoQ29kZSh2bSgpLCBBY2Nlc3NUeXBlOjpHZXRQcml2YXRl
TmFtZSkuY29kZSgpKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZUpTUiwg
YmFzZSk7CiAKICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG51bGxwdHIs
IHN0dWJJbmZvLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5k
ZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldFByaXZh
dGVOYW1lLAogICAgICAgICBSZWdpc3RlclNldEJ1aWxkZXI6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLCBiYXNlSlNSLCBwcm9wZXJ0eUpTUiwgcmVzdWx0SlNSLCBJbnZhbGlkR1BSUmVnLCBz
dHViSW5mb0dQUik7CiAKICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0
aGlzKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOwog
CisgICAgc2V0RmFzdFBhdGhSZXN1bWVQb2ludCgpOwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUsIHJlc3VsdEpTUik7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlc3VsdEpTUik7CiB9CiAKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1l
KGNvbnN0IEpTSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQoreworICAgIEFTU0VSVChoYXNBbnlTbG93Q2FzZXMoaXRlcikpOworICAgIEFTU0VSVChC
eXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkgPT0gbV9ieXRlY29kZUluZGV4
KTsKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeVZhbHNbbV9nZXRCeVZh
bEluZGV4KytdOworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHVi
KHNsb3dfb3BfZ2V0X3ByaXZhdGVfbmFtZV9jYWxsU2xvd09wZXJhdGlvblRoZW5DaGVja0V4Y2Vw
dGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpHZXRCeVZhbDo6cmVzdWx0SlNSID09IHJldHVyblZh
bHVlSlNSKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENhbGwo
KSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93
X29wX2dldF9wcml2YXRlX25hbWVfY2FsbFNsb3dPcGVyYXRpb25UaGVuQ2hlY2tFeGNlcHRpb25H
ZW5lcmF0b3IoVk0mIHZtKQoreworICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBm
dW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1
c2UKKyAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2Jq
ZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgLy8g
REZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2Jq
ZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAorICAgIC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCku
CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworICAgIHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNs
dHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKTsKKworICAgIHVzaW5nIEJhc2Vs
aW5lSklUUmVnaXN0ZXJzOjpHZXRCeVZhbDo6YmFzZUpTUjsKKyAgICB1c2luZyBCYXNlbGluZUpJ
VFJlZ2lzdGVyczo6R2V0QnlWYWw6OnByb3BlcnR5SlNSOworICAgIHVzaW5nIEJhc2VsaW5lSklU
UmVnaXN0ZXJzOjpHZXRCeVZhbDo6Z2xvYmFsT2JqZWN0R1BSOworICAgIHVzaW5nIEJhc2VsaW5l
SklUUmVnaXN0ZXJzOjpHZXRCeVZhbDo6c3R1YkluZm9HUFI7CisKKyAgICBqaXQuZW1pdENUSVRo
dW5rUHJvbG9ndWUoKTsKKworICAgIC8vIENhbGwgc2xvdyBvcGVyYXRpb24KKyAgICBqaXQucHJl
cGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIGxvYWRHbG9iYWxPYmplY3Qoaml0LCBnbG9iYWxP
YmplY3RHUFIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50czxTbG93T3BlcmF0aW9uPihiYXNlSlNS
LCBwcm9wZXJ0eUpTUiwgZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQUik7CisgICAgc3RhdGlj
X2Fzc2VydChwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9uLCAzPigpID09IHN0dWJJ
bmZvR1BSLCAiTmVlZGVkIGZvciBicmFuY2ggdG8gc2xvdyBvcGVyYXRpb24gdmlhIFN0dWJJbmZv
Iik7CisgICAgaml0LmNhbGwoQWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86
Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgT3BlcmF0aW9uUHRyVGFnKTsKKworICAgIGppdC5l
bWl0Q1RJVGh1bmtFcGlsb2d1ZSgpOworCisgICAgLy8gVGFpbCBjYWxsIHRvIGV4Y2VwdGlvbiBj
aGVjayB0aHVuaworICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBqaXQuanVtcCgpOworCisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgTGlua0J1ZmZlcjo6
UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhleGNlcHRpb25D
aGVjaywgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVy
YXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcmV0dXJuIEZJTkFMSVpFX1RI
VU5LKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5lOiBzbG93X29wX2dldF9w
cml2YXRlX25hbWVfY2FsbFNsb3dPcGVyYXRpb25UaGVuQ2hlY2tFeGNlcHRpb24iKTsKK30KKwog
dm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSlNJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wU2V0UHJpdmF0ZUJyYW5kPigpOwpAQCAtMTQxLDEzICsyNDIsMTMgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSlNJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gWyBzdHViSW5mbywgc3R1YkluZm9JbmRleCBdID0g
YWRkVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbygpOwogICAgIGxvYWRDb25zdGFudChzdHViSW5m
b0luZGV4LCBzdHViSW5mb0dQUik7CiAKLSAgICBlbWl0TmFrZWROZWFySnVtcElmTm90SlNDZWxs
KGJhc2VKU1IsIGJhc2UsIElubGluZUNhY2hlQ29tcGlsZXI6OmdlbmVyYXRlU2xvd1BhdGhDb2Rl
KHZtKCksIEFjY2Vzc1R5cGU6OlNldFByaXZhdGVCcmFuZCkuY29kZSgpKTsKLQorICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlKTsKICAgICBKSVRQcml2YXRlQnJh
bmRBY2Nlc3NHZW5lcmF0b3IgZ2VuKAogICAgICAgICBudWxscHRyLCBzdHViSW5mbywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpTZXRQcml2YXRlQnJhbmQsIFJlZ2lzdGVy
U2V0QnVpbGRlcjo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIGJhc2VKU1Is
IHByb3BlcnR5SlNSLCBzdHViSW5mb0dQUik7CiAKICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURh
dGFJQ0Zhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHJpdmF0ZUJy
YW5kQWNjZXNzZXMuYXBwZW5kKGdlbik7CiAKICAgICAvLyBXZSBzaG91bGQgZW1pdCB3cml0ZS1i
YXJyaWVyIGF0IHRoZSBlbmQgb2Ygc2VxdWVuY2Ugc2luY2Ugd3JpdGUtYmFycmllciBjbG9iYmVy
cyByZWdpc3RlcnMuCkBAIC0xNTcsNiArMjU4LDE4IEBAIHZvaWQgSklUOjplbWl0X29wX3NldF9w
cml2YXRlX2JyYW5kKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfc2V0X3ByaXZhdGVfYnJhbmQoY29uc3QgSlNJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
eworICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIEFTU0VSVChCeXRl
Y29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkgPT0gbV9ieXRlY29kZUluZGV4KTsK
KyAgICBKSVRQcml2YXRlQnJhbmRBY2Nlc3NHZW5lcmF0b3ImIGdlbiA9IG1fcHJpdmF0ZUJyYW5k
QWNjZXNzZXNbbV9wcml2YXRlQnJhbmRBY2Nlc3NJbmRleCsrXTsKKyAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19zYW1lPEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvblNl
dFByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3VtZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRl
Y2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1lT3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46
OnZhbHVlKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIoc2xvd19vcF9n
ZXRfcHJpdmF0ZV9uYW1lX2NhbGxTbG93T3BlcmF0aW9uVGhlbkNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENh
bGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKK30KKwogdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tf
cHJpdmF0ZV9icmFuZChjb25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDaGVja1ByaXZh
dGVCcmFuZD4oKTsKQEAgLTE3NSwxNiArMjg4LDI4IEBAIHZvaWQgSklUOjplbWl0X29wX2NoZWNr
X3ByaXZhdGVfYnJhbmQoY29uc3QgSlNJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIGF1dG8gWyBzdHViSW5mbywgc3R1YkluZm9JbmRleCBdID0gYWRkVW5saW5rZWRTdHJ1Y3R1
cmVTdHViSW5mbygpOwogICAgIGxvYWRDb25zdGFudChzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQ
Uik7CiAKLSAgICBlbWl0TmFrZWROZWFySnVtcElmTm90SlNDZWxsKGJhc2VKU1IsIGJhc2UsIElu
bGluZUNhY2hlQ29tcGlsZXI6OmdlbmVyYXRlU2xvd1BhdGhDb2RlKHZtKCksIEFjY2Vzc1R5cGU6
OkNoZWNrUHJpdmF0ZUJyYW5kKS5jb2RlKCkpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChiYXNlSlNSLCBiYXNlKTsKIAogICAgIEpJVFByaXZhdGVCcmFuZEFjY2Vzc0dlbmVyYXRv
ciBnZW4oCiAgICAgICAgIG51bGxwdHIsIHN0dWJJbmZvLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwg
Q29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRl
eCksIEFjY2Vzc1R5cGU6OkNoZWNrUHJpdmF0ZUJyYW5kLCBSZWdpc3RlclNldEJ1aWxkZXI6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBiYXNlSlNSLCBwcm9wZXJ0eUpTUiwg
c3R1YkluZm9HUFIpOwogCiAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgq
dGhpcyk7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzLmFw
cGVuZChnZW4pOwogfQogCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfcHJpdmF0ZV9icmFu
ZChjb25zdCBKU0luc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3sKKyAgICBBU1NFUlQoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0
KCkpID09IG1fYnl0ZWNvZGVJbmRleCk7CisgICAgSklUUHJpdmF0ZUJyYW5kQWNjZXNzR2VuZXJh
dG9yJiBnZW4gPSBtX3ByaXZhdGVCcmFuZEFjY2Vzc2VzW21fcHJpdmF0ZUJyYW5kQWNjZXNzSW5k
ZXgrK107CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxGdW5jdGlvblRy
YWl0czxkZWNsdHlwZShvcGVyYXRpb25DaGVja1ByaXZhdGVCcmFuZE9wdGltaXplKT46OkFyZ3Vt
ZW50VHlwZXMsIEZ1bmN0aW9uVHJhaXRzPGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVOYW1l
T3B0aW1pemUpPjo6QXJndW1lbnRUeXBlcz46OnZhbHVlKTsKKyAgICBlbWl0TmFrZWROZWFyQ2Fs
bCh2bSgpLmdldENUSVN0dWIoc2xvd19vcF9nZXRfcHJpdmF0ZV9uYW1lX2NhbGxTbG93T3BlcmF0
aW9uVGhlbkNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkp
OworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKK30K
KwogdGVtcGxhdGU8dHlwZW5hbWUgT3A+CiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNv
bnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKQEAgLTE5Miw5ICszMTcs
NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5
OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgRUNN
QU1vZGUgZWNtYU1vZGUgPSB0aGlzLT5lY21hTW9kZShieXRlY29kZSk7Ci0gICAgYm9vbCBpc0Rp
cmVjdCA9IHN0ZDo6aXNfc2FtZV92PE9wLCBPcFB1dEJ5VmFsRGlyZWN0PjsKLSAgICBBY2Nlc3NU
eXBlIGFjY2Vzc1R5cGUgPSBpc0RpcmVjdCA/IChlY21hTW9kZS5pc1N0cmljdCgpID8gQWNjZXNz
VHlwZTo6UHV0QnlWYWxEaXJlY3RTdHJpY3QgOiBBY2Nlc3NUeXBlOjpQdXRCeVZhbERpcmVjdFNs
b3BweSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsU3RyaWN0
IDogQWNjZXNzVHlwZTo6UHV0QnlWYWxTbG9wcHkpOwogCiAgICAgdXNpbmcgQmFzZWxpbmVKSVRS
ZWdpc3RlcnM6OlB1dEJ5VmFsOjpiYXNlSlNSOwogICAgIHVzaW5nIEJhc2VsaW5lSklUUmVnaXN0
ZXJzOjpQdXRCeVZhbDo6cHJvcGVydHlKU1I7CkBAIC0yMTMsMTIgKzMzNSwxNSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBsb2FkQ29uc3RhbnQoc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwogICAg
IG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3A6Ok1ldGFkYXRhOjpv
ZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKIAotICAgIGVtaXROYWtlZE5lYXJK
dW1wSWZOb3RKU0NlbGwoYmFzZUpTUiwgYmFzZSwgSW5saW5lQ2FjaGVDb21waWxlcjo6Z2VuZXJh
dGVTbG93UGF0aENvZGUodm0oKSwgYWNjZXNzVHlwZSkuY29kZSgpKTsKLQorICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlKTsKICAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGxBbmRQcm9maWxlKGJhc2VKU1IucGF5bG9hZEdQUigpLCBwcm9maWxlR1BS
LCBzY3JhdGNoMUdQUik7CiAKKyAgICBFQ01BTW9kZSBlY21hTW9kZSA9IHRoaXMtPmVjbWFNb2Rl
KGJ5dGVjb2RlKTsKKyAgICBib29sIGlzRGlyZWN0ID0gc3RkOjppc19zYW1lX3Y8T3AsIE9wUHV0
QnlWYWxEaXJlY3Q+OwogICAgIEpJVFB1dEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbnVs
bHB0ciwgc3R1YkluZm8sIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgYWNjZXNzVHlwZSwgUmVn
aXN0ZXJTZXRCdWlsZGVyOjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgbnVs
bHB0ciwgc3R1YkluZm8sIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwKKyAgICAgICAgaXNEaXJl
Y3QgPyAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsRGlyZWN0U3Ry
aWN0IDogQWNjZXNzVHlwZTo6UHV0QnlWYWxEaXJlY3RTbG9wcHkpIDogKGVjbWFNb2RlLmlzU3Ry
aWN0KCkgPyBBY2Nlc3NUeXBlOjpQdXRCeVZhbFN0cmljdCA6IEFjY2Vzc1R5cGU6OlB1dEJ5VmFs
U2xvcHB5KSwKKyAgICAgICAgUmVnaXN0ZXJTZXRCdWlsZGVyOjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKICAgICAgICAgYmFzZUpTUiwgcHJvcGVydHlKU1IsIHZhbHVlSlNSLCBwcm9maWxl
R1BSLCBzdHViSW5mb0dQUiwgZWNtYU1vZGUpOwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudElu
dChwcm9wZXJ0eSkpCiAgICAgICAgIHN0dWJJbmZvLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwpA
QCAtMjI5LDEyICszNTQsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBK
U0luc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgLy8gQVJNdjcgY2xvYmJlcnMg
bWV0YWRhdGFUYWJsZSByZWdpc3Rlci4gVGh1cyB3ZSBuZWVkIHRvIHJlc3RvcmUgdGhlbSBiYWNr
IGhlcmUuCiAgICAgZW1pdE1hdGVyaWFsaXplTWV0YWRhdGFBbmRDb25zdGFudFBvb2xSZWdpc3Rl
cnMoKTsKICNlbmRpZgorICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9wdXRCeVZhbHMuYXBwZW5k
KGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0IHdyaXRl
LWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCiAgICAgLy8gRklYTUU6IFVzZSBVbmNvbmRpdGlv
bmFsV3JpdGVCYXJyaWVyIGluIEJhc2VsaW5lIGVmZmVjdGl2ZWx5IHRvIHJlZHVjZSBjb2RlIHNp
emUuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTM5
NQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CisgICAgc2V0
RmFzdFBhdGhSZXN1bWVQb2ludCgpOwogfQogCiB0ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfYnlfdmFsPE9wUHV0QnlWYWw+KGNvbnN0IEpTSW5zdHJ1Y3Rpb24qKTsKQEAgLTI0NCwxMyAr
MzcxLDczIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IEpTSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0X29wX3B1dF9ieV92YWw8T3BQ
dXRCeVZhbERpcmVjdD4oY3VycmVudEluc3RydWN0aW9uKTsKIH0KIAordGVtcGxhdGU8dHlwZW5h
bWUgT3Bjb2RlVHlwZT4KK3ZvaWQgSklUOjpnZW5lcmF0ZVB1dEJ5VmFsU2xvd0Nhc2UoY29uc3Qg
T3Bjb2RlVHlwZSYsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7Cisg
ICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CisgICAgQVNTRVJUKEJ5dGVjb2RlSW5k
ZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSA9PSBtX2J5dGVjb2RlSW5kZXgpOworICAgIEpJ
VFB1dEJ5VmFsR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5VmFsc1ttX3B1dEJ5VmFsSW5kZXgrK107
CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIoc2xvd19vcF9w
dXRfYnlfdmFsX2NhbGxTbG93T3BlcmF0aW9uVGhlbkNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5y
ZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgQ2FsbCgpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSlNJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGdlbmVyYXRlUHV0QnlWYWxTbG93Q2Fz
ZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCksIGl0ZXIpOworfQorCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSlNJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQoreworICAgIGdlbmVyYXRlUHV0QnlWYWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHV0QnlWYWxEaXJlY3Q+KCksIGl0ZXIpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9wdXRfYnlfdmFsX2NhbGxTbG93T3BlcmF0aW9u
VGhlbkNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICAvLyBUaGUgdGh1bmsg
Z2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAv
IEJhc2VsaW5lIEpJVCBiZWNhdXNlCisgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQg
dGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNv
ZGVCbG9jaygpLgorICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5n
IHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKKyAgICAvLyBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgorICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyAgICB1c2luZyBT
bG93T3BlcmF0b2luID0gZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxTdHJpY3RPcHRpbWl6ZSk7
CisKKyAgICB1c2luZyBCYXNlbGluZUpJVFJlZ2lzdGVyczo6UHV0QnlWYWw6OmJhc2VKU1I7Cisg
ICAgdXNpbmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OlB1dEJ5VmFsOjpwcm9wZXJ0eUpTUjsKKyAg
ICB1c2luZyBCYXNlbGluZUpJVFJlZ2lzdGVyczo6UHV0QnlWYWw6OnZhbHVlSlNSOworICAgIHVz
aW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpQdXRCeVZhbDo6cHJvZmlsZUdQUjsKKyAgICB1c2lu
ZyBCYXNlbGluZUpJVFJlZ2lzdGVyczo6UHV0QnlWYWw6OnN0dWJJbmZvR1BSOworICAgIHVzaW5n
IEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpQdXRCeVZhbDo6Z2xvYmFsT2JqZWN0R1BSOworCisgICAg
aml0LmVtaXRDVElUaHVua1Byb2xvZ3VlKCk7CisKKyAgICAvLyBDYWxsIHNsb3cgb3BlcmF0aW9u
CisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0
KGppdCwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8U2xvd09wZXJh
dG9pbj4oYmFzZUpTUiwgcHJvcGVydHlKU1IsIHZhbHVlSlNSLCBnbG9iYWxPYmplY3RHUFIsIHN0
dWJJbmZvR1BSLCBwcm9maWxlR1BSKTsKKyAgICBqaXQuY2FsbChBZGRyZXNzKHN0dWJJbmZvR1BS
LCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBPcGVyYXRpb25Q
dHJUYWcpOworI2lmIENQVShBUk1fVEhVTUIyKQorICAgIC8vIEFSTXY3IGNsb2JiZXJzIG1ldGFk
YXRhVGFibGUgcmVnaXN0ZXIuIFRodXMgd2UgbmVlZCB0byByZXN0b3JlIHRoZW0gYmFjayBoZXJl
LgorICAgIGVtaXRNYXRlcmlhbGl6ZU1ldGFkYXRhQW5kQ29uc3RhbnRQb29sUmVnaXN0ZXJzKGpp
dCk7CisjZW5kaWYKKworICAgIGppdC5lbWl0Q1RJVGh1bmtFcGlsb2d1ZSgpOworCisgICAgLy8g
VGFpbCBjYWxsIHRvIGV4Y2VwdGlvbiBjaGVjayB0aHVuaworICAgIEp1bXAgZXhjZXB0aW9uQ2hl
Y2sgPSBqaXQuanVtcCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JB
TF9USFVOS19JRCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAgcGF0
Y2hCdWZmZXIubGluayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJ
U3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7
CisgICAgcmV0dXJuIEZJTkFMSVpFX1RIVU5LKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywg
IkJhc2VsaW5lOiBzbG93X29wX3B1dF9ieV92YWxfY2FsbFNsb3dPcGVyYXRpb25UaGVuQ2hlY2tF
eGNlcHRpb24iKTsKK30KKwogdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25z
dCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRQcml2YXRlTmFtZT4oKTsKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwogICAgIFZpcnR1YWxSZWdpc3RlciB2YWx1
ZSA9IGJ5dGVjb2RlLm1fdmFsdWU7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gYnl0ZWNv
ZGUubV9wdXRLaW5kLmlzRGVmaW5lKCkgPyBBY2Nlc3NUeXBlOjpEZWZpbmVQcml2YXRlTmFtZUJ5
VmFsIDogQWNjZXNzVHlwZTo6U2V0UHJpdmF0ZU5hbWVCeVZhbDsKIAogICAgIHVzaW5nIEJhc2Vs
aW5lSklUUmVnaXN0ZXJzOjpQdXRCeVZhbDo6YmFzZUpTUjsKICAgICB1c2luZyBCYXNlbGluZUpJ
VFJlZ2lzdGVyczo6UHV0QnlWYWw6OnByb3BlcnR5SlNSOwpAQCAtMjY2LDEzICs0NTMsMTQgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBKU0luc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYXV0byBbIHN0dWJJbmZvLCBzdHViSW5mb0luZGV4IF0g
PSBhZGRVbmxpbmtlZFN0cnVjdHVyZVN0dWJJbmZvKCk7CiAgICAgbG9hZENvbnN0YW50KHN0dWJJ
bmZvSW5kZXgsIHN0dWJJbmZvR1BSKTsKIAotICAgIGVtaXROYWtlZE5lYXJKdW1wSWZOb3RKU0Nl
bGwoYmFzZUpTUiwgYmFzZSwgSW5saW5lQ2FjaGVDb21waWxlcjo6Z2VuZXJhdGVTbG93UGF0aENv
ZGUodm0oKSwgYWNjZXNzVHlwZSkuY29kZSgpKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZUpTUiwgYmFzZSk7CiAKICAgICBKSVRQdXRCeVZhbEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG51bGxwdHIsIHN0dWJJbmZvLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIGFjY2Vz
c1R5cGUsIFJlZ2lzdGVyU2V0QnVpbGRlcjo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisg
ICAgICAgIG51bGxwdHIsIHN0dWJJbmZvLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIGJ5dGVj
b2RlLm1fcHV0S2luZC5pc0RlZmluZSgpID8gQWNjZXNzVHlwZTo6RGVmaW5lUHJpdmF0ZU5hbWVC
eVZhbCA6IEFjY2Vzc1R5cGU6OlNldFByaXZhdGVOYW1lQnlWYWwsIFJlZ2lzdGVyU2V0QnVpbGRl
cjo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIGJhc2VKU1IsIHByb3BlcnR5
SlNSLCB2YWx1ZUpTUiwgSW52YWxpZEdQUlJlZywgc3R1YkluZm9HUFIsIEVDTUFNb2RlOjpzbG9w
cHkoKSk7CiAKICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzKTsK
KyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlWYWxzLmFwcGVuZChnZW4pOwogCiAgICAg
Ly8gSUMgY2FuIHdyaXRlIG5ldyBTdHJ1Y3R1cmUgd2l0aG91dCB3cml0ZS1iYXJyaWVyIGlmIGEg
YmFzZSBpcyBjZWxsLgpAQCAtMjgxLDYgKzQ2OSw1NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
cHJpdmF0ZV9uYW1lKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBKU0luc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBBU1NFUlQoQnl0ZWNv
ZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpID09IG1fYnl0ZWNvZGVJbmRleCk7Cisg
ICAgSklUUHV0QnlWYWxHZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlWYWxzW21fcHV0QnlWYWxJbmRl
eCsrXTsKKworICAgIHVzaW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpQdXRCeVZhbDo6c3R1Yklu
Zm9HUFI7CisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1Yihz
bG93X29wX3B1dF9wcml2YXRlX25hbWVfY2FsbFNsb3dPcGVyYXRpb25UaGVuQ2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZ2VuLnJlcG9ydFNs
b3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworfQorCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lX2NhbGxT
bG93T3BlcmF0aW9uVGhlbkNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICAv
LyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRo
IHRoZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCisgICAgLy8gaXQgbWFrZXMgYXNzdW1w
dGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBD
YWxsRnJhbWU6OmNvZGVCbG9jaygpLgorICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlv
bnMgYmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gK
KyAgICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorICAgIENDYWxsSGVscGVycyBqaXQ7CisK
KyAgICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uUHV0QnlWYWxEZWZp
bmVQcml2YXRlRmllbGRPcHRpbWl6ZSk7CisKKyAgICB1c2luZyBCYXNlbGluZUpJVFJlZ2lzdGVy
czo6UHV0QnlWYWw6OmJhc2VKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OlB1
dEJ5VmFsOjpwcm9wZXJ0eUpTUjsKKyAgICB1c2luZyBCYXNlbGluZUpJVFJlZ2lzdGVyczo6UHV0
QnlWYWw6OnZhbHVlSlNSOworICAgIHVzaW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpQdXRCeVZh
bDo6cHJvZmlsZUdQUjsKKyAgICB1c2luZyBCYXNlbGluZUpJVFJlZ2lzdGVyczo6UHV0QnlWYWw6
OnN0dWJJbmZvR1BSOworICAgIHVzaW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpQdXRCeVZhbDo6
Z2xvYmFsT2JqZWN0R1BSOworCisgICAgaml0LmVtaXRDVElUaHVua1Byb2xvZ3VlKCk7CisKKyAg
ICAvLyBDYWxsIHNsb3cgb3BlcmF0aW9uCisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZt
KTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGppdCwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBqaXQu
c2V0dXBBcmd1bWVudHM8U2xvd09wZXJhdGlvbj4oYmFzZUpTUiwgcHJvcGVydHlKU1IsIHZhbHVl
SlNSLCBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSLCBwcm9maWxlR1BSKTsKKyAgICBqaXQu
Y2FsbChBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCBPcGVyYXRpb25QdHJUYWcpOworCisgICAgaml0LmVtaXRDVElUaHVua0Vw
aWxvZ3VlKCk7CisKKyAgICAvLyBUYWlsIGNhbGwgdG8gZXhjZXB0aW9uIGNoZWNrIHRodW5rCisg
ICAgSnVtcCBleGNlcHRpb25DaGVjayA9IGppdC5qdW1wKCk7CisKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRy
YUNUSVRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2RlTG9j
YXRpb25MYWJlbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfVEhVTksocGF0Y2hCdWZm
ZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZV9j
YWxsU2xvd09wZXJhdGlvblRoZW5DaGVja0V4Y2VwdGlvbiIpOworfQorCiB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dEdldHRlckJ5SWQ+KCk7CkBAIC0zNzMsNyArNjA5LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVs
X2J5X2lkKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBFQ01BTW9kZSBlY21hTW9k
ZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGU7CiAgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fdW5saW5rZWRDb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpOwot
ICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBBY2Nlc3NU
eXBlOjpEZWxldGVCeUlkU3RyaWN0IDogQWNjZXNzVHlwZTo6RGVsZXRlQnlJZFNsb3BweTsKIAog
ICAgIHVzaW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpEZWxCeUlkOjpiYXNlSlNSOwogICAgIHVz
aW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpEZWxCeUlkOjpyZXN1bHRKU1I7CkBAIC0zODQsMTYg
KzYxOSwxOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSlNJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gWyBzdHViSW5mbywgc3R1YkluZm9JbmRl
eCBdID0gYWRkVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbygpOwogICAgIGxvYWRDb25zdGFudChz
dHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CiAKLSAgICBlbWl0TmFrZWROZWFySnVtcElmTm90
SlNDZWxsKGJhc2VKU1IsIGJhc2UsIElubGluZUNhY2hlQ29tcGlsZXI6OmdlbmVyYXRlU2xvd1Bh
dGhDb2RlKHZtKCksIGFjY2Vzc1R5cGUpLmNvZGUoKSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2VKU1IsIGJhc2UpOwogCiAgICAgSklURGVsQnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG51bGxwdHIsIHN0dWJJbmZvLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIGFj
Y2Vzc1R5cGUsIFJlZ2lzdGVyU2V0QnVpbGRlcjo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIG51bGxwdHIsIHN0dWJJbmZvLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9y
aWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIGVj
bWFNb2RlLmlzU3RyaWN0KCkgPyBBY2Nlc3NUeXBlOjpEZWxldGVCeUlkU3RyaWN0IDogQWNjZXNz
VHlwZTo6RGVsZXRlQnlJZFNsb3BweSwgUmVnaXN0ZXJTZXRCdWlsZGVyOjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlk
ZW50aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksCiAg
ICAgICAgIGJhc2VKU1IsIHJlc3VsdEpTUiwgc3R1YkluZm9HUFIpOwogCiAgICAgZ2VuLmdlbmVy
YXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2UoKTsKICAg
ICBtX2RlbEJ5SWRzLmFwcGVuZChnZW4pOwogCisgICAgc2V0RmFzdFBhdGhSZXN1bWVQb2ludCgp
OwogICAgIGJveEJvb2xlYW4ocmVzdWx0SlNSLnBheWxvYWRHUFIoKSwgcmVzdWx0SlNSKTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0SlNSKTsKIApAQCAtNDA0LDEzICs2
NDEsNTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKGNvbnN0IEpTSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIFNob3VsZEZp
bHRlckJhc2UpOwogfQogCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZGVsX2J5X2lkKGNvbnN0IEpT
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorewor
ICAgIEFTU0VSVChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkgPT0gbV9i
eXRlY29kZUluZGV4KTsKKyAgICBKSVREZWxCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2RlbEJ5SWRz
W21fZGVsQnlJZEluZGV4KytdOworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwor
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5n
ZXRDVElTdHViKHNsb3dfb3BfZGVsX2J5X2lkX2NhbGxTbG93T3BlcmF0aW9uVGhlbkNoZWNrRXhj
ZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKK30KKworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZGVsX2J5X2lkX2NhbGxTbG93
T3BlcmF0aW9uVGhlbkNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICAvLyBU
aGUgdGh1bmsgZ2VuZXJhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRo
ZSBMTEludCAvIEJhc2VsaW5lIEpJVCBiZWNhdXNlCisgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlv
bnMgYWJvdXQgdGhlIHJpZ2h0IGdsb2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxs
RnJhbWU6OmNvZGVCbG9jaygpLgorICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMg
YmVsb25naW5nIHRvIG90aGVyIGdsb2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKKyAg
ICAvLyBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgorICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyAg
ICB1c2luZyBTbG93T3BlcmF0aW9uID0gZGVjbHR5cGUob3BlcmF0aW9uRGVsZXRlQnlJZFN0cmlj
dE9wdGltaXplKTsKKworICAgIHVzaW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpEZWxCeUlkOjpi
YXNlSlNSOworICAgIHVzaW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpEZWxCeUlkOjpnbG9iYWxP
YmplY3RHUFI7CisgICAgdXNpbmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OkRlbEJ5SWQ6OnN0dWJJ
bmZvR1BSOworCisgICAgaml0LmVtaXRDVElUaHVua1Byb2xvZ3VlKCk7CisKKyAgICAvLyBDYWxs
IHNsb3cgb3BlcmF0aW9uCisgICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBs
b2FkR2xvYmFsT2JqZWN0KGppdCwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBqaXQuc2V0dXBBcmd1
bWVudHM8U2xvd09wZXJhdGlvbj4oYmFzZUpTUiwgZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQ
Uik7CisgICAgc3RhdGljX2Fzc2VydChwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9u
LCAyPigpID09IHN0dWJJbmZvR1BSLCAiTmVlZGVkIGZvciBicmFuY2ggdG8gc2xvdyBvcGVyYXRp
b24gdmlhIFN0dWJJbmZvIik7CisgICAgaml0LmNhbGwoQWRkcmVzcyhzdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgT3BlcmF0aW9uUHRyVGFn
KTsKKworICAgIGppdC5lbWl0Q1RJVGh1bmtFcGlsb2d1ZSgpOworCisgICAgLy8gVGFpbCBjYWxs
IHRvIGV4Y2VwdGlvbiBjaGVjayB0aHVuaworICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBqaXQu
anVtcCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIu
bGluayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihjaGVj
a0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcmV0
dXJuIEZJTkFMSVpFX1RIVU5LKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5l
OiBzbG93X29wX2RlbF9ieV9pZF9jYWxsU2xvd09wZXJhdGlvblRoZW5DaGVja0V4Y2VwdGlvbiIp
OworfQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEpTSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOwogICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAg
IEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IGJ5dGVjb2RlLm1fZWNtYU1vZGUuaXNTdHJpY3QoKSA/
IEFjY2Vzc1R5cGU6OkRlbGV0ZUJ5VmFsU3RyaWN0IDogQWNjZXNzVHlwZTo6RGVsZXRlQnlWYWxT
bG9wcHk7CiAKICAgICB1c2luZyBCYXNlbGluZUpJVFJlZ2lzdGVyczo6RGVsQnlWYWw6OmJhc2VK
U1I7CiAgICAgdXNpbmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OkRlbEJ5VmFsOjpwcm9wZXJ0eUpT
UjsKQEAgLTQyNCwxNiArNzAzLDIwIEBAIHZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoY29u
c3QgSlNJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGF1dG8gWyBzdHViSW5m
bywgc3R1YkluZm9JbmRleCBdID0gYWRkVW5saW5rZWRTdHJ1Y3R1cmVTdHViSW5mbygpOwogICAg
IGxvYWRDb25zdGFudChzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CiAKLSAgICBlbWl0TmFr
ZWROZWFySnVtcElmTm90SlNDZWxsKGJhc2VKU1IsIGJhc2UsIElubGluZUNhY2hlQ29tcGlsZXI6
OmdlbmVyYXRlU2xvd1BhdGhDb2RlKHZtKCksIGFjY2Vzc1R5cGUpLmNvZGUoKSk7Ci0gICAgZW1p
dE5ha2VkTmVhckp1bXBJZk5vdEpTQ2VsbChwcm9wZXJ0eUpTUiwgcHJvcGVydHksIElubGluZUNh
Y2hlQ29tcGlsZXI6OmdlbmVyYXRlU2xvd1BhdGhDb2RlKHZtKCksIGFjY2Vzc1R5cGUpLmNvZGUo
KSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VKU1IsIGJhc2UpOworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChwcm9wZXJ0eUpTUiwgcHJvcGVydHkpOwogCiAg
ICAgSklURGVsQnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICBudWxscHRyLCBzdHViSW5mbywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBhY2Nlc3NUeXBlLCBSZWdpc3RlclNldEJ1aWxkZXI6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBudWxscHRyLCBzdHViSW5mbywg
SklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLAorICAgICAgICBieXRlY29kZS5tX2VjbWFNb2RlLmlz
U3RyaWN0KCkgPyBBY2Nlc3NUeXBlOjpEZWxldGVCeVZhbFN0cmljdCA6IEFjY2Vzc1R5cGU6OkRl
bGV0ZUJ5VmFsU2xvcHB5LAorICAgICAgICBSZWdpc3RlclNldEJ1aWxkZXI6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAogICAgICAgICBiYXNlSlNSLCBwcm9wZXJ0eUpTUiwgcmVzdWx0SlNS
LCBzdHViSW5mb0dQUik7CiAKICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRo
KCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZGVsQnlWYWxzLmFwcGVuZChnZW4p
OwogCisgICAgc2V0RmFzdFBhdGhSZXN1bWVQb2ludCgpOwogICAgIGJveEJvb2xlYW4ocmVzdWx0
SlNSLnBheWxvYWRHUFIoKSwgcmVzdWx0SlNSKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCwgcmVzdWx0SlNSKTsKIApAQCAtNDQ0LDY5ICs3MjcsMTQxIEBAIHZvaWQgSklUOjplbWl0
X29wX2RlbF9ieV92YWwoY29uc3QgSlNJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgU2hvdWxkRmlsdGVyQmFzZSk7CiB9CiAKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9kZWxfYnlfdmFsKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIEFTU0VSVChCeXRlY29kZUlu
ZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkgPT0gbV9ieXRlY29kZUluZGV4KTsKKyAgICBK
SVREZWxCeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9kZWxCeVZhbHNbbV9kZWxCeVZhbEluZGV4Kytd
OworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHNsb3dfb3Bf
ZGVsX2J5X3ZhbF9jYWxsU2xvd09wZXJhdGlvblRoZW5DaGVja0V4Y2VwdGlvbkdlbmVyYXRvciku
cmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIENhbGwoKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVu
a1B0clRhZz4gSklUOjpzbG93X29wX2RlbF9ieV92YWxfY2FsbFNsb3dPcGVyYXRpb25UaGVuQ2hl
Y2tFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQoreworICAgIC8vIFRoZSB0aHVuayBnZW5lcmF0
ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8gQmFzZWxp
bmUgSklUIGJlY2F1c2UKKyAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmln
aHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29kZUJsb2Nr
KCkuCisgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gb3Ro
ZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAorICAgIC8vIENhbGxGcmFtZTo6
Y29kZUJsb2NrKCkuCisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworICAgIHVzaW5nIFNsb3dPcGVy
YXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25EZWxldGVCeVZhbFN0cmljdE9wdGltaXplKTsKKwor
ICAgIHVzaW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpEZWxCeVZhbDo6YmFzZUpTUjsKKyAgICB1
c2luZyBCYXNlbGluZUpJVFJlZ2lzdGVyczo6RGVsQnlWYWw6OnByb3BlcnR5SlNSOworICAgIHVz
aW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpEZWxCeVZhbDo6Z2xvYmFsT2JqZWN0R1BSOworICAg
IHVzaW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpEZWxCeVZhbDo6c3R1YkluZm9HUFI7CisKKyAg
ICBqaXQuZW1pdENUSVRodW5rUHJvbG9ndWUoKTsKKworICAgIC8vIENhbGwgc2xvdyBvcGVyYXRp
b24KKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIGxvYWRHbG9iYWxPYmpl
Y3Qoaml0LCBnbG9iYWxPYmplY3RHUFIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50czxTbG93T3Bl
cmF0aW9uPihiYXNlSlNSLCBwcm9wZXJ0eUpTUiwgZ2xvYmFsT2JqZWN0R1BSLCBzdHViSW5mb0dQ
Uik7CisgICAgc3RhdGljX2Fzc2VydChwcmVmZXJyZWRBcmd1bWVudEdQUjxTbG93T3BlcmF0aW9u
LCAzPigpID09IHN0dWJJbmZvR1BSLCAiTmVlZGVkIGZvciBicmFuY2ggdG8gc2xvdyBvcGVyYXRp
b24gdmlhIFN0dWJJbmZvIik7CisgICAgaml0LmNhbGwoQWRkcmVzcyhzdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgT3BlcmF0aW9uUHRyVGFn
KTsKKworICAgIGppdC5lbWl0Q1RJVGh1bmtFcGlsb2d1ZSgpOworCisgICAgLy8gVGFpbCBjYWxs
IHRvIGV4Y2VwdGlvbiBjaGVjayB0aHVuaworICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBqaXQu
anVtcCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19J
RCwgTGlua0J1ZmZlcjo6UHJvZmlsZTo6RXh0cmFDVElUaHVuayk7CisgICAgcGF0Y2hCdWZmZXIu
bGluayhleGNlcHRpb25DaGVjaywgQ29kZUxvY2F0aW9uTGFiZWwodm0uZ2V0Q1RJU3R1YihjaGVj
a0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgcmV0
dXJuIEZJTkFMSVpFX1RIVU5LKHBhdGNoQnVmZmVyLCBKSVRUaHVua1B0clRhZywgIkJhc2VsaW5l
OiBzbG93X29wX2RlbF9ieV92YWxfcHJlcGFyZUNhbGwiKTsKK30KKwogdm9pZCBKSVQ6OmVtaXRf
b3BfdHJ5X2dldF9ieV9pZChjb25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRC
eUlkPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlVlJlZyA9IGJ5dGVjb2RlLm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7
CiAKICAgICB1c2luZyBCYXNlbGluZUpJVFJlZ2lzdGVyczo6R2V0QnlJZDo6YmFzZUpTUjsKICAg
ICB1c2luZyBCYXNlbGluZUpJVFJlZ2lzdGVyczo6R2V0QnlJZDo6cmVzdWx0SlNSOwogICAgIHVz
aW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpHZXRCeUlkOjpzdHViSW5mb0dQUjsKIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUpTUik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlVlJlZywgYmFzZUpTUik7CiAKICAgICBhdXRvIFsgc3R1YkluZm8sIHN0dWJJ
bmZvSW5kZXggXSA9IGFkZFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oKTsKICAgICBsb2FkQ29u
c3RhbnQoc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwogCi0gICAgZW1pdE5ha2VkTmVhckp1
bXBJZk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlLCBJbmxpbmVDYWNoZUNvbXBpbGVyOjpnZW5lcmF0
ZVNsb3dQYXRoQ29kZSh2bSgpLCBBY2Nlc3NUeXBlOjpUcnlHZXRCeUlkKS5jb2RlKCkpOworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlVlJlZyk7CiAKICAgICBK
SVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbnVsbHB0ciwgc3R1YkluZm8sIEpJVFR5
cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZUluZGV4KSwgUmVnaXN0ZXJTZXRCdWlsZGVyOjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKICAgICAgICAgQ2FjaGVhYmxlSWRlbnRpZmllcjo6Y3JlYXRlRnJvbUlkZW50
aWZpZXJPd25lZEJ5Q29kZUJsb2NrKG1fdW5saW5rZWRDb2RlQmxvY2ssICppZGVudCksIGJhc2VK
U1IsIHJlc3VsdEpTUiwgc3R1YkluZm9HUFIsIEFjY2Vzc1R5cGU6OlRyeUdldEJ5SWQpOwogCiAg
ICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcyk7CisgICAgYWRkU2xv
d0Nhc2UoKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCisgICAgc2V0RmFzdFBhdGhS
ZXN1bWVQb2ludCgpOwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3Vs
dEpTUik7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdEpTUik7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXN1bHRKU1IpOworfQorCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBKU0luc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBBU1NFUlQoQnl0
ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpID09IG1fYnl0ZWNvZGVJbmRleCk7
CisgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRl
eCsrXTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9w
ZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSk+Ojp2YWx1ZSk7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHNs
b3dfb3BfZ2V0X2J5X2lkX2NhbGxTbG93T3BlcmF0aW9uVGhlbkNoZWNrRXhjZXB0aW9uR2VuZXJh
dG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxp
bmVKSVRSZWdpc3RlcnM6OkdldEJ5SWQ6OnJlc3VsdEpTUiA9PSByZXR1cm5WYWx1ZUpTUik7Cisg
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEdldEJ5SWREaXJlY3Q+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9
IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOworICAgIFZpcnR1YWxSZWdpc3RlciByZXN1bHRWUmVnID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2VWUmVnID0gYnl0ZWNvZGUubV9iYXNlOwogICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX3VubGlua2VkQ29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5
dGVjb2RlLm1fcHJvcGVydHkpKTsKIAogICAgIHVzaW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpH
ZXRCeUlkOjpiYXNlSlNSOwogICAgIHVzaW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpHZXRCeUlk
OjpyZXN1bHRKU1I7CiAgICAgdXNpbmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OkdldEJ5SWQ6OnN0
dWJJbmZvR1BSOwogCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlSlNSKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCBiYXNlSlNSKTsKIAogICAgIGF1
dG8gWyBzdHViSW5mbywgc3R1YkluZm9JbmRleCBdID0gYWRkVW5saW5rZWRTdHJ1Y3R1cmVTdHVi
SW5mbygpOwogICAgIGxvYWRDb25zdGFudChzdHViSW5mb0luZGV4LCBzdHViSW5mb0dQUik7CiAK
LSAgICBlbWl0TmFrZWROZWFySnVtcElmTm90SlNDZWxsKGJhc2VKU1IsIGJhc2UsIElubGluZUNh
Y2hlQ29tcGlsZXI6OmdlbmVyYXRlU2xvd1BhdGhDb2RlKHZtKCksIEFjY2Vzc1R5cGU6OkdldEJ5
SWREaXJlY3QpLmNvZGUoKSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VK
U1IsIGJhc2VWUmVnKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICBu
dWxscHRyLCBzdHViSW5mbywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRl
Y29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldEJ1
aWxkZXI6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBDYWNoZWFibGVJZGVu
dGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENv
ZGVCbG9jaywgKmlkZW50KSwgYmFzZUpTUiwgcmVzdWx0SlNSLCBzdHViSW5mb0dQUiwgQWNjZXNz
VHlwZTo6R2V0QnlJZERpcmVjdCk7CiAKICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zh
c3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5k
KGdlbik7CiAKKyAgICBzZXRGYXN0UGF0aFJlc3VtZVBvaW50KCk7CiAgICAgZW1pdFZhbHVlUHJv
ZmlsaW5nU2l0ZShieXRlY29kZSwgcmVzdWx0SlNSKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdCwgcmVzdWx0SlNSKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dFZSZWcsIHJlc3VsdEpTUik7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRf
ZGlyZWN0KGNvbnN0IEpTSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQoreworICAgIEFTU0VSVChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5v
ZmZzZXQoKSkgPT0gbV9ieXRlY29kZUluZGV4KTsKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOworICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXpl
KSwgZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKT46OnZhbHVlKTsKKyAgICBlbWl0
TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfaWRfY2FsbFNsb3dP
cGVyYXRpb25UaGVuQ2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRh
Zz4oKSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUpJVFJlZ2lzdGVyczo6R2V0QnlJZDo6
cmVzdWx0SlNSID09IHJldHVyblZhbHVlSlNSKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIENhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9p
ZChjb25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOwotICAgIFZpcnR1
YWxSZWdpc3RlciByZXN1bHQgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
YmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0VlJlZyA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlVlJlZyA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKICAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5tX3Byb3BlcnR5KSk7CiAKICAgICB1c2luZyBCYXNl
bGluZUpJVFJlZ2lzdGVyczo6R2V0QnlJZDo6YmFzZUpTUjsKQEAgLTUxNCwxMiArODY5LDEyIEBA
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChjb25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgdXNpbmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OkdldEJ5SWQ6OnN0
dWJJbmZvR1BSOwogICAgIHVzaW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpHZXRCeUlkOjpzY3Jh
dGNoMUdQUjsKIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgYmFzZUpTUik7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgYmFzZUpTUik7CiAKICAgICBhdXRv
IFsgc3R1YkluZm8sIHN0dWJJbmZvSW5kZXggXSA9IGFkZFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8oKTsKICAgICBsb2FkQ29uc3RhbnQoc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwogCi0g
ICAgZW1pdE5ha2VkTmVhckp1bXBJZk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlLCBJbmxpbmVDYWNo
ZUNvbXBpbGVyOjpnZW5lcmF0ZVNsb3dQYXRoQ29kZSh2bSgpLCBBY2Nlc3NUeXBlOjpHZXRCeUlk
KS5jb2RlKCkpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNl
VlJlZyk7CiAKICAgICBpZiAoKmlkZW50ID09IHZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoICYm
IHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewogICAgICAgICBsb2FkOEZyb21NZXRhZGF0YShieXRl
Y29kZSwgT3BHZXRCeUlkOjpNZXRhZGF0YTo6b2Zmc2V0T2ZNb2RlTWV0YWRhdGEoKSArIEdldEJ5
SWRNb2RlTWV0YWRhdGE6Om9mZnNldE9mTW9kZSgpLCBzY3JhdGNoMUdQUik7CkBAIC01MzcsMTAg
Kzg5Miw1NiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSlNJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgZ2VuLmdlbmVyYXRlQmFzZWxpbmVEYXRhSUNG
YXN0UGF0aCgqdGhpcyk7CiAgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdodCBPU1IgZXhpdCBoZXJl
LCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisgICAgYWRkU2xvd0Nhc2Uo
KTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCisgICAgc2V0RmFzdFBhdGhSZXN1bWVQ
b2ludCgpOwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdEpTUik7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdEpTUik7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXN1bHRKU1IpOworfQorCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIEFTU0VSVChCeXRlY29kZUluZGV4
KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkgPT0gbV9ieXRlY29kZUluZGV4KTsKKyAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOworICAg
IExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CisgICAgZW1pdE5ha2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5
X2lkX2NhbGxTbG93T3BlcmF0aW9uVGhlbkNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOworICAgIHN0YXRpY19hc3NlcnQoQmFzZWxpbmVKSVRSZWdpc3Rl
cnM6OkdldEJ5SWQ6OnJlc3VsdEpTUiA9PSByZXR1cm5WYWx1ZUpTUik7CisgICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworfQorCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfYnlfaWRfY2FsbFNsb3dP
cGVyYXRpb25UaGVuQ2hlY2tFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQoreworICAgIC8vIFRo
ZSB0aHVuayBnZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhl
IExMSW50IC8gQmFzZWxpbmUgSklUIGJlY2F1c2UKKyAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9u
cyBhYm91dCB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCisgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBi
ZWxvbmdpbmcgdG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAorICAg
IC8vIENhbGxGcmFtZTo6Y29kZUJsb2NrKCkuCisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworICAg
IHVzaW5nIFNsb3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUp
OworCisgICAgdXNpbmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OkdldEJ5SWQ6OmJhc2VKU1I7Cisg
ICAgdXNpbmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OkdldEJ5SWQ6Omdsb2JhbE9iamVjdEdQUjsK
KyAgICB1c2luZyBCYXNlbGluZUpJVFJlZ2lzdGVyczo6R2V0QnlJZDo6c3R1YkluZm9HUFI7CisK
KyAgICBqaXQuZW1pdENUSVRodW5rUHJvbG9ndWUoKTsKKworICAgIC8vIENhbGwgc2xvdyBvcGVy
YXRpb24KKyAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIGxvYWRHbG9iYWxP
YmplY3Qoaml0LCBnbG9iYWxPYmplY3RHUFIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50czxTbG93
T3BlcmF0aW9uPihiYXNlSlNSLCBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDI+KCkgPT0g
c3R1YkluZm9HUFIsICJOZWVkZWQgZm9yIGJyYW5jaCB0byBzbG93IG9wZXJhdGlvbiB2aWEgU3R1
YkluZm8iKTsKKyAgICBqaXQuY2FsbChBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHVi
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBPcGVyYXRpb25QdHJUYWcpOworCisgICAg
aml0LmVtaXRDVElUaHVua0VwaWxvZ3VlKCk7CisKKyAgICAvLyBUYWlsIGNhbGwgdG8gZXhjZXB0
aW9uIGNoZWNrIHRodW5rCisgICAgSnVtcCBleGNlcHRpb25DaGVjayA9IGppdC5qdW1wKCk7CisK
KyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVm
ZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGV4Y2Vw
dGlvbkNoZWNrLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9u
R2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICByZXR1cm4gRklOQUxJ
WkVfVEhVTksocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3Bf
Z2V0X2J5X2lkX2NhbGxTbG93T3BlcmF0aW9uVGhlbkNoZWNrRXhjZXB0aW9uIik7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSlNJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpAQCAtNTY0LDggKzk2NSw4IEBAIHZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSlNJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIGF1dG8gWyBzdHViSW5mbywgc3R1YkluZm9JbmRleCBdID0gYWRkVW5saW5rZWRT
dHJ1Y3R1cmVTdHViSW5mbygpOwogICAgIGxvYWRDb25zdGFudChzdHViSW5mb0luZGV4LCBzdHVi
SW5mb0dQUik7CiAKLSAgICBlbWl0TmFrZWROZWFySnVtcElmTm90SlNDZWxsKGJhc2VKU1IsIGJh
c2VWUmVnLCBJbmxpbmVDYWNoZUNvbXBpbGVyOjpnZW5lcmF0ZVNsb3dQYXRoQ29kZSh2bSgpLCBB
Y2Nlc3NUeXBlOjpHZXRCeUlkV2l0aFRoaXMpLmNvZGUoKSk7Ci0gICAgZW1pdE5ha2VkTmVhckp1
bXBJZk5vdEpTQ2VsbCh0aGlzSlNSLCB0aGlzVlJlZywgSW5saW5lQ2FjaGVDb21waWxlcjo6Z2Vu
ZXJhdGVTbG93UGF0aENvZGUodm0oKSwgQWNjZXNzVHlwZTo6R2V0QnlJZFdpdGhUaGlzKS5jb2Rl
KCkpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlVlJlZyk7
CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNKU1IsIHRoaXNWUmVnKTsKIAog
ICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCiAgICAgICAgIG51bGxwdHIsIHN0
dWJJbmZvLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgp
LCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIFJlZ2lzdGVyU2V0QnVpbGRlcjo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCkBAIC01NzMsMTIgKzk3NCw1OSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIAogICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRo
aXMpOwogICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQgT1NSIGV4aXQgaGVyZSwgc28gd2UgbmVl
ZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9n
ZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOwogCisgICAgc2V0RmFzdFBhdGhSZXN1bWVQb2lu
dCgpOwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJlc3VsdEpTUik7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnLCByZXN1bHRKU1IpOwogfQogCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBKU0luc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBBU1NF
UlQoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpID09IG1fYnl0ZWNvZGVJ
bmRleCk7CisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRz
V2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKKyAgICBMYWJlbCBjb2xkUGF0aEJl
Z2luID0gbGFiZWwoKTsKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIGVtaXROYWtl
ZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXNfY2Fs
bFNsb3dPcGVyYXRpb25UaGVuQ2hlY2tFeGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxO
b1B0clRhZz4oKSk7CisgICAgc3RhdGljX2Fzc2VydChCYXNlbGluZUpJVFJlZ2lzdGVyczo6R2V0
QnlJZFdpdGhUaGlzOjpyZXN1bHRKU1IgPT0gcmV0dXJuVmFsdWVKU1IpOworICAgIGdlbi5yZXBv
cnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKK30KKworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
c19jYWxsU2xvd09wZXJhdGlvblRoZW5DaGVja0V4Y2VwdGlvbkdlbmVyYXRvcihWTSYgdm0pCit7
CisgICAgLy8gVGhlIHRodW5rIGdlbmVyYXRlZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IHdv
cmsgd2l0aCB0aGUgTExJbnQgLyBCYXNlbGluZSBKSVQgYmVjYXVzZQorICAgIC8vIGl0IG1ha2Vz
IGFzc3VtcHRpb25zIGFib3V0IHRoZSByaWdodCBnbG9iYWxPYmplY3QgYmVpbmcgYXZhaWxhYmxl
IGZyb20gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKyAgICAvLyBERkcvRlRMIG1heSBpbmxpbmUg
ZnVuY3Rpb25zIGJlbG9uZ2luZyB0byBvdGhlciBnbG9iYWxPYmplY3RzLCB3aGljaCBtYXkgbm90
IG1hdGNoCisgICAgLy8gQ2FsbEZyYW1lOjpjb2RlQmxvY2soKS4KKyAgICBDQ2FsbEhlbHBlcnMg
aml0OworCisgICAgdXNpbmcgU2xvd09wZXJhdGlvbiA9IGRlY2x0eXBlKG9wZXJhdGlvbkdldEJ5
SWRXaXRoVGhpc09wdGltaXplKTsKKworICAgIHVzaW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpH
ZXRCeUlkV2l0aFRoaXM6OmJhc2VKU1I7CisgICAgdXNpbmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6
OkdldEJ5SWRXaXRoVGhpczo6dGhpc0pTUjsKKyAgICB1c2luZyBCYXNlbGluZUpJVFJlZ2lzdGVy
czo6R2V0QnlJZFdpdGhUaGlzOjpnbG9iYWxPYmplY3RHUFI7CisgICAgdXNpbmcgQmFzZWxpbmVK
SVRSZWdpc3RlcnM6OkdldEJ5SWRXaXRoVGhpczo6c3R1YkluZm9HUFI7CisKKyAgICBqaXQuZW1p
dENUSVRodW5rUHJvbG9ndWUoKTsKKworICAgIC8vIENhbGwgc2xvdyBvcGVyYXRpb24KKyAgICBq
aXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOworICAgIGxvYWRHbG9iYWxPYmplY3Qoaml0LCBn
bG9iYWxPYmplY3RHUFIpOworICAgIGppdC5zZXR1cEFyZ3VtZW50czxTbG93T3BlcmF0aW9uPihi
YXNlSlNSLCB0aGlzSlNSLCBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSKTsKKyAgICBzdGF0
aWNfYXNzZXJ0KHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24sIDM+KCkgPT0gc3R1
YkluZm9HUFIsICJOZWVkZWQgZm9yIGJyYW5jaCB0byBzbG93IG9wZXJhdGlvbiB2aWEgU3R1Yklu
Zm8iKTsKKyAgICBqaXQuY2FsbChBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5m
bzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBPcGVyYXRpb25QdHJUYWcpOworCisgICAgaml0
LmVtaXRDVElUaHVua0VwaWxvZ3VlKCk7CisKKyAgICAvLyBUYWlsIGNhbGwgdG8gZXhjZXB0aW9u
IGNoZWNrIHRodW5rCisgICAgSnVtcCBleGNlcHRpb25DaGVjayA9IGppdC5qdW1wKCk7CisKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBMaW5rQnVmZmVy
OjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGV4Y2VwdGlv
bkNoZWNrLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKGNoZWNrRXhjZXB0aW9uR2Vu
ZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICByZXR1cm4gRklOQUxJWkVf
VEhVTksocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6IHNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpc19jYWxsU2xvd09wZXJhdGlvblRoZW5DaGVja0V4Y2VwdGlvbiIpOwor
fQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSlNJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlJZD4oKTsKQEAgLTU4Nyw3ICsxMDM1LDYgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X2lkKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBib29sIGRpcmVjdCA9IGJ5dGVjb2RlLm1fZmxhZ3MuaXNEaXJlY3QoKTsKICAgICBFQ01BTW9k
ZSBlY21hTW9kZSA9IHRoaXMtPmVjbWFNb2RlKGJ5dGVjb2RlKTsKICAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV91bmxpbmtlZENvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5t
X3Byb3BlcnR5KSk7Ci0gICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gZGlyZWN0ID8gKGVjbWFN
b2RlLmlzU3RyaWN0KCkgPyBBY2Nlc3NUeXBlOjpQdXRCeUlkRGlyZWN0U3RyaWN0IDogQWNjZXNz
VHlwZTo6UHV0QnlJZERpcmVjdFNsb3BweSkgOiAoZWNtYU1vZGUuaXNTdHJpY3QoKSA/IEFjY2Vz
c1R5cGU6OlB1dEJ5SWRTdHJpY3QgOiBBY2Nlc3NUeXBlOjpQdXRCeUlkU2xvcHB5KTsKIAogICAg
IC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQg
dGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3Qg
YWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQ
YXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQpAQCAtNjA2LDE1ICsxMDUzLDE2IEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgYXV0byBbIHN0dWJJbmZvLCBzdHViSW5mb0luZGV4IF0gPSBhZGRVbmxp
bmtlZFN0cnVjdHVyZVN0dWJJbmZvKCk7CiAgICAgbG9hZENvbnN0YW50KHN0dWJJbmZvSW5kZXgs
IHN0dWJJbmZvR1BSKTsKIAotICAgIGVtaXROYWtlZE5lYXJKdW1wSWZOb3RKU0NlbGwoYmFzZUpT
UiwgYmFzZVZSZWcsIElubGluZUNhY2hlQ29tcGlsZXI6OmdlbmVyYXRlU2xvd1BhdGhDb2RlKHZt
KCksIGFjY2Vzc1R5cGUpLmNvZGUoKSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2VKU1IsIGJhc2VWUmVnKTsKIAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAg
ICAgICBudWxscHRyLCBzdHViSW5mbywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3Rl
clNldEJ1aWxkZXI6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBDYWNoZWFi
bGVJZGVudGlmaWVyOjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxp
bmtlZENvZGVCbG9jaywgKmlkZW50KSwKLSAgICAgICAgYmFzZUpTUiwgdmFsdWVKU1IsIHN0dWJJ
bmZvR1BSLCBzY3JhdGNoMUdQUiwgZWNtYU1vZGUsIGFjY2Vzc1R5cGUpOworICAgICAgICBiYXNl
SlNSLCB2YWx1ZUpTUiwgc3R1YkluZm9HUFIsIHNjcmF0Y2gxR1BSLCBlY21hTW9kZSwgZGlyZWN0
ID8gKGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBBY2Nlc3NUeXBlOjpQdXRCeUlkRGlyZWN0U3RyaWN0
IDogQWNjZXNzVHlwZTo6UHV0QnlJZERpcmVjdFNsb3BweSkgOiAoZWNtYU1vZGUuaXNTdHJpY3Qo
KSA/IEFjY2Vzc1R5cGU6OlB1dEJ5SWRTdHJpY3QgOiBBY2Nlc3NUeXBlOjpQdXRCeUlkU2xvcHB5
KSk7CiAKICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzKTsKICAg
ICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8gY29u
c2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlJZHMu
YXBwZW5kKGdlbik7CiAKICAgICAvLyBJQyBjYW4gd3JpdGUgbmV3IFN0cnVjdHVyZSB3aXRob3V0
IHdyaXRlLWJhcnJpZXIgaWYgYSBiYXNlIGlzIGNlbGwuCkBAIC02MjMsNiArMTA3MSw1MCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoY29uc3QgSlNJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZSZWcsIFNob3VsZEZpbHRlckJh
c2UpOwogfQogCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IEpTSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIEFT
U0VSVChCeXRlY29kZUluZGV4KG1fYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSkgPT0gbV9ieXRlY29k
ZUluZGV4KTsKKyAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0
QnlJZEluZGV4KytdOworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbih0aGlzKTsKKyAgICBlbWl0TmFrZWROZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIo
c2xvd19vcF9wdXRfYnlfaWRfY2FsbFNsb3dPcGVyYXRpb25UaGVuQ2hlY2tFeGNlcHRpb25HZW5l
cmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBDYWxsKCkpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9wdXRfYnlfaWRfY2FsbFNsb3dPcGVyYXRpb25U
aGVuQ2hlY2tFeGNlcHRpb25HZW5lcmF0b3IoVk0mIHZtKQoreworICAgIC8vIFRoZSB0aHVuayBn
ZW5lcmF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gb25seSB3b3JrIHdpdGggdGhlIExMSW50IC8g
QmFzZWxpbmUgSklUIGJlY2F1c2UKKyAgICAvLyBpdCBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0
aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGJlaW5nIGF2YWlsYWJsZSBmcm9tIENhbGxGcmFtZTo6Y29k
ZUJsb2NrKCkuCisgICAgLy8gREZHL0ZUTCBtYXkgaW5saW5lIGZ1bmN0aW9ucyBiZWxvbmdpbmcg
dG8gb3RoZXIgZ2xvYmFsT2JqZWN0cywgd2hpY2ggbWF5IG5vdCBtYXRjaAorICAgIC8vIENhbGxG
cmFtZTo6Y29kZUJsb2NrKCkuCisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworICAgIHVzaW5nIFNs
b3dPcGVyYXRpb24gPSBkZWNsdHlwZShvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1pemUpOwor
CisgICAgdXNpbmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OlB1dEJ5SWQ6OmJhc2VKU1I7CisgICAg
dXNpbmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OlB1dEJ5SWQ6OnZhbHVlSlNSOworICAgIHVzaW5n
IEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpQdXRCeUlkOjpnbG9iYWxPYmplY3RHUFI7CisgICAgdXNp
bmcgQmFzZWxpbmVKSVRSZWdpc3RlcnM6OlB1dEJ5SWQ6OnN0dWJJbmZvR1BSOworCisgICAgaml0
LmVtaXRDVElUaHVua1Byb2xvZ3VlKCk7CisKKyAgICAvLyBDYWxsIHNsb3cgb3BlcmF0aW9uCisg
ICAgaml0LnByZXBhcmVDYWxsT3BlcmF0aW9uKHZtKTsKKyAgICBsb2FkR2xvYmFsT2JqZWN0KGpp
dCwgZ2xvYmFsT2JqZWN0R1BSKTsKKyAgICBqaXQuc2V0dXBBcmd1bWVudHM8U2xvd09wZXJhdGlv
bj4odmFsdWVKU1IsIGJhc2VKU1IsIGdsb2JhbE9iamVjdEdQUiwgc3R1YkluZm9HUFIpOworICAg
IHN0YXRpY19hc3NlcnQocHJlZmVycmVkQXJndW1lbnRHUFI8U2xvd09wZXJhdGlvbiwgMz4oKSA9
PSBzdHViSW5mb0dQUiwgIk5lZWRlZCBmb3IgYnJhbmNoIHRvIHNsb3cgb3BlcmF0aW9uIHZpYSBT
dHViSW5mbyIpOworICAgIGppdC5jYWxsKEFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0
dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIE9wZXJhdGlvblB0clRhZyk7CisKKyAg
ICBqaXQuZW1pdENUSVRodW5rRXBpbG9ndWUoKTsKKworICAgIC8vIFRhaWwgY2FsbCB0byBleGNl
cHRpb24gY2hlY2sgdGh1bmsKKyAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gaml0Lmp1bXAoKTsK
KworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoaml0LCBHTE9CQUxfVEhVTktfSUQsIExpbmtC
dWZmZXI6OlByb2ZpbGU6OkV4dHJhQ1RJVGh1bmspOworICAgIHBhdGNoQnVmZmVyLmxpbmsoZXhj
ZXB0aW9uQ2hlY2ssIENvZGVMb2NhdGlvbkxhYmVsKHZtLmdldENUSVN0dWIoY2hlY2tFeGNlcHRp
b25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIHJldHVybiBGSU5B
TElaRV9USFVOSyhwYXRjaEJ1ZmZlciwgSklUVGh1bmtQdHJUYWcsICJCYXNlbGluZTogc2xvd19v
cF9wdXRfYnlfaWRfY2FsbFNsb3dPcGVyYXRpb25UaGVuQ2hlY2tFeGNlcHRpb24iKTsKK30KKwog
dm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSlNJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5CeUlkPigpOwpAQCAtNjM5LDE4ICsxMTMxLDM0IEBAIHZvaWQgSklUOjplbWl0X29wX2lu
X2J5X2lkKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhdXRv
IFsgc3R1YkluZm8sIHN0dWJJbmZvSW5kZXggXSA9IGFkZFVubGlua2VkU3RydWN0dXJlU3R1Yklu
Zm8oKTsKICAgICBsb2FkQ29uc3RhbnQoc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwogCi0g
ICAgZW1pdE5ha2VkTmVhckp1bXBJZk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlVlJlZywgSW5saW5l
Q2FjaGVDb21waWxlcjo6Z2VuZXJhdGVTbG93UGF0aENvZGUodm0oKSwgQWNjZXNzVHlwZTo6SW5C
eUlkKS5jb2RlKCkpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlSlNSLCBi
YXNlVlJlZyk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICBudWxscHRy
LCBzdHViSW5mbywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBSZWdpc3RlclNldEJ1aWxkZXI6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBDYWNoZWFibGVJZGVudGlmaWVy
OjpjcmVhdGVGcm9tSWRlbnRpZmllck93bmVkQnlDb2RlQmxvY2sobV91bmxpbmtlZENvZGVCbG9j
aywgKmlkZW50KSwgYmFzZUpTUiwgcmVzdWx0SlNSLCBzdHViSW5mb0dQUik7CiAKICAgICBnZW4u
Z2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZSgp
OwogICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKIAorICAgIHNldEZhc3RQYXRoUmVzdW1lUG9p
bnQoKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcsIHJlc3VsdEpTUik7
CiB9CiAKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChjb25zdCBKU0luc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBBU1NFUlQo
Qnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpID09IG1fYnl0ZWNvZGVJbmRl
eCk7CisgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9pbkJ5SWRJbmRl
eCsrXTsKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOworICAgIC8vIHNsb3dfb3BfZ2V0X2J5X2lkX2NhbGxTbG93T3BlcmF0aW9u
VGhlbkNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0IHdlIG5lZWQu
CisgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBsaWNhdGUgdGh1
bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCisgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUpLCBkZWNsdHlwZShv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUpPjo6dmFsdWUpOworICAgIGVtaXROYWtlZE5lYXJDYWxs
KHZtKCkuZ2V0Q1RJU3R1YihzbG93X29wX2dldF9ieV9pZF9jYWxsU2xvd09wZXJhdGlvblRoZW5D
aGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpJbkJ5SWQ6OnJlc3VsdEpTUiA9PSBy
ZXR1cm5WYWx1ZUpTUik7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBDYWxsKCkpOworfQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV92YWwoY29uc3QgSlNJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeVZhbD4oKTsKQEAgLTY3NCw3ICsxMTgyLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5fYnlfdmFsKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICBsb2FkQ29uc3RhbnQoc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwog
ICAgIG1hdGVyaWFsaXplUG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BJbkJ5VmFsOjpN
ZXRhZGF0YTo6b2Zmc2V0T2ZBcnJheVByb2ZpbGUoKSwgcHJvZmlsZUdQUik7CiAKLSAgICBlbWl0
TmFrZWROZWFySnVtcElmTm90SlNDZWxsKGJhc2VKU1IsIGJhc2UsIElubGluZUNhY2hlQ29tcGls
ZXI6OmdlbmVyYXRlU2xvd1BhdGhDb2RlKHZtKCksIEFjY2Vzc1R5cGU6OkluQnlWYWwpLmNvZGUo
KSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2VKU1IsIGJhc2UpOwogICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbEFuZFByb2ZpbGUoYmFzZUpTUi5wYXlsb2Fk
R1BSKCksIHByb2ZpbGVHUFIsIHNjcmF0Y2gxR1BSKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0
b3IgZ2VuKApAQCAtNjgyLDExICsxMTkwLDI4IEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X3Zh
bChjb25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGJhc2VK
U1IsIHByb3BlcnR5SlNSLCByZXN1bHRKU1IsIHByb2ZpbGVHUFIsIHN0dWJJbmZvR1BSKTsKIAog
ICAgIGdlbi5nZW5lcmF0ZUJhc2VsaW5lRGF0YUlDRmFzdFBhdGgoKnRoaXMpOworICAgIGFkZFNs
b3dDYXNlKCk7CiAgICAgbV9pbkJ5VmFscy5hcHBlbmQoZ2VuKTsKIAorICAgIHNldEZhc3RQYXRo
UmVzdW1lUG9pbnQoKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0SlNS
KTsKIH0KIAordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X3ZhbChjb25zdCBKU0luc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBBU1NF
UlQoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpID09IG1fYnl0ZWNvZGVJ
bmRleCk7CisgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2luQnlW
YWxJbmRleCsrXTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CisgICAgLy8gc2xvd19vcF9nZXRfYnlfdmFsX2NhbGxTbG93
T3BlcmF0aW9uVGhlbkNoZWNrRXhjZXB0aW9uR2VuZXJhdG9yIHdpbGwgZG8gZXhhY3RseSB3aGF0
IHdlIG5lZWQuCisgICAgLy8gU28sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gY3JlYXRpbmcgYSBkdXBs
aWNhdGUgdGh1bmsganVzdCB0byBnaXZlIGl0IGEgZGlmZmVyZW50IG5hbWUuCisgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUob3BlcmF0aW9uSW5CeVZhbE9wdGltaXplKSwg
ZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSk+Ojp2YWx1ZSk7CisgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0oKS5nZXRDVElTdHViKHNsb3dfb3BfZ2V0X2J5X3ZhbF9jYWxsU2xvd09w
ZXJhdGlvblRoZW5DaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFn
PigpKTsKKyAgICBzdGF0aWNfYXNzZXJ0KEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpJbkJ5VmFsOjpy
ZXN1bHRKU1IgPT0gcmV0dXJuVmFsdWVKU1IpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgQ2FsbCgpKTsKK30KKwogdm9pZCBKSVQ6OmVtaXRIYXNQcml2YXRlKFZp
cnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3RlciBiYXNlLCBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHlPckJyYW5kLCBBY2Nlc3NUeXBlIHR5cGUpCiB7CiAgICAgdXNpbmcgQmFzZWxpbmVK
SVRSZWdpc3RlcnM6OkluQnlWYWw6OmJhc2VKU1I7CkBAIC03MDIsMzAgKzEyMjcsNjAgQEAgdm9p
ZCBKSVQ6OmVtaXRIYXNQcml2YXRlKFZpcnR1YWxSZWdpc3RlciBkc3QsIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlLCBWaXJ0dWFsUmVnaXMKICAgICBhdXRvIFsgc3R1YkluZm8sIHN0dWJJbmZvSW5kZXgg
XSA9IGFkZFVubGlua2VkU3RydWN0dXJlU3R1YkluZm8oKTsKICAgICBsb2FkQ29uc3RhbnQoc3R1
YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwogCi0gICAgZW1pdE5ha2VkTmVhckp1bXBJZk5vdEpT
Q2VsbChiYXNlSlNSLCBiYXNlLCBJbmxpbmVDYWNoZUNvbXBpbGVyOjpnZW5lcmF0ZVNsb3dQYXRo
Q29kZSh2bSgpLCB0eXBlKS5jb2RlKCkpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlSlNSLCBiYXNlKTsKIAogICAgIEpJVEluQnlWYWxHZW5lcmF0b3IgZ2VuKAogICAgICAg
ICBudWxscHRyLCBzdHViSW5mbywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9i
eXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCB0eXBlLCBSZWdp
c3RlclNldEJ1aWxkZXI6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBiYXNl
SlNSLCBwcm9wZXJ0eUpTUiwgcmVzdWx0SlNSLCBJbnZhbGlkR1BSUmVnLCBzdHViSW5mb0dQUik7
CiAKICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzKTsKKyAgICBh
ZGRTbG93Q2FzZSgpOwogICAgIG1faW5CeVZhbHMuYXBwZW5kKGdlbik7CiAKKyAgICBzZXRGYXN0
UGF0aFJlc3VtZVBvaW50KCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3Vs
dEpTUik7CiB9CiAKK3ZvaWQgSklUOjplbWl0SGFzUHJpdmF0ZVNsb3coQWNjZXNzVHlwZSB0eXBl
KQoreworICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgdHlwZSA9PSBBY2Nlc3NUeXBlOjpIYXNQcml2
YXRlTmFtZSB8fCB0eXBlID09IEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVCcmFuZCk7CisKKyAgICBB
U1NFUlQoQnl0ZWNvZGVJbmRleChtX2J5dGVjb2RlSW5kZXgub2Zmc2V0KCkpID09IG1fYnl0ZWNv
ZGVJbmRleCk7CisgICAgSklUSW5CeVZhbEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5VmFsc1ttX2lu
QnlWYWxJbmRleCsrXTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPGRlY2x0eXBlKG9wZXJhdGlvbkhhc1ByaXZhdGVO
YW1lT3B0aW1pemUpLCBkZWNsdHlwZShvcGVyYXRpb25HZXRQcml2YXRlTmFtZU9wdGltaXplKT46
OnZhbHVlKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxkZWNsdHlwZShvcGVyYXRp
b25IYXNQcml2YXRlQnJhbmRPcHRpbWl6ZSksIGRlY2x0eXBlKG9wZXJhdGlvbkdldFByaXZhdGVO
YW1lT3B0aW1pemUpPjo6dmFsdWUpOworICAgIGVtaXROYWtlZE5lYXJDYWxsKHZtKCkuZ2V0Q1RJ
U3R1YihzbG93X29wX2dldF9wcml2YXRlX25hbWVfY2FsbFNsb3dPcGVyYXRpb25UaGVuQ2hlY2tF
eGNlcHRpb25HZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBzdGF0
aWNfYXNzZXJ0KEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpJbkJ5VmFsOjpyZXN1bHRKU1IgPT0gcmV0
dXJuVmFsdWVKU1IpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwg
Q2FsbCgpKTsKK30KKwogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfbmFtZShjb25zdCBK
U0luc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNQcml2YXRlTmFtZT4oKTsKICAgICBlbWl0SGFz
UHJpdmF0ZShieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBieXRlY29kZS5tX3Byb3Bl
cnR5LCBBY2Nlc3NUeXBlOjpIYXNQcml2YXRlTmFtZSk7CiB9CiAKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9oYXNfcHJpdmF0ZV9uYW1lKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CisgICAgZW1pdEhhc1ByaXZhdGVTbG93KEFjY2Vzc1R5cGU6Okhhc1ByaXZhdGVOYW1lKTsKK30K
Kwogdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3ByaXZhdGVfYnJhbmQoY29uc3QgSlNJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSGFzUHJpdmF0ZUJyYW5kPigpOwogICAgIGVtaXRIYXNQcml2YXRlKGJ5
dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIGJ5dGVjb2RlLm1fYnJhbmQsIEFjY2Vzc1R5
cGU6Okhhc1ByaXZhdGVCcmFuZCk7CiB9CiAKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfcHJp
dmF0ZV9icmFuZChjb25zdCBKU0luc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3sKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIGVtaXRI
YXNQcml2YXRlU2xvdyhBY2Nlc3NUeXBlOjpIYXNQcml2YXRlQnJhbmQpOworfQorCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFJlc29sdmVTY29wZT4oKTsKQEAgLTE0OTEsMTggKzIwNDYsNjcgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXMoY29uc3QgSlNJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpCiAgICAgICAg
IHN0dWJJbmZvLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwogCi0gICAgZW1pdE5ha2VkTmVhckp1
bXBJZk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlLCBJbmxpbmVDYWNoZUNvbXBpbGVyOjpnZW5lcmF0
ZVNsb3dQYXRoQ29kZSh2bSgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbFdpdGhUaGlzKS5jb2RlKCkp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlSlNSLCBiYXNlKTsKICAgICBl
bWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGxBbmRQcm9maWxlKGJhc2VKU1IucGF5bG9hZEdQ
UigpLCBwcm9maWxlR1BSLCBzY3JhdGNoMUdQUik7CiAKICAgICBnZW4uZ2VuZXJhdGVCYXNlbGlu
ZURhdGFJQ0Zhc3RQYXRoKCp0aGlzKTsKIAorICAgIGFkZFNsb3dDYXNlKCk7CiAgICAgbV9nZXRC
eVZhbHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKIAogICAgIHJlc2V0U1AoKTsgLy8gV2UgbWlnaHQg
T1NSIGV4aXQgaGVyZSwgc28gd2UgbmVlZCB0byBjb25zZXJ2YXRpdmVseSByZXNldCBTUAorICAg
IHNldEZhc3RQYXRoUmVzdW1lUG9pbnQoKTsKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLCByZXN1bHRKU1IpOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1
bHRKU1IpOwogfQogCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXMo
Y29uc3QgSlNJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit7CisgICAgQVNTRVJUKGhhc0FueVNsb3dDYXNlcyhpdGVyKSk7CisgICAgQVNTRVJUKEJ5
dGVjb2RlSW5kZXgobV9ieXRlY29kZUluZGV4Lm9mZnNldCgpKSA9PSBtX2J5dGVjb2RlSW5kZXgp
OworICAgIEpJVEdldEJ5VmFsV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlWYWxzV2l0
aFRoaXNbbV9nZXRCeVZhbFdpdGhUaGlzSW5kZXgrK107CisgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKyAgICBlbWl0TmFrZWRO
ZWFyQ2FsbCh2bSgpLmdldENUSVN0dWIoc2xvd19vcF9nZXRfYnlfdmFsX3dpdGhfdGhpc19jYWxs
U2xvd09wZXJhdGlvblRoZW5DaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIENh
bGwoKSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpz
bG93X29wX2dldF9ieV92YWxfd2l0aF90aGlzX2NhbGxTbG93T3BlcmF0aW9uVGhlbkNoZWNrRXhj
ZXB0aW9uR2VuZXJhdG9yKFZNJiB2bSkKK3sKKyAgICAvLyBUaGUgdGh1bmsgZ2VuZXJhdGVkIGJ5
IHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgd29yayB3aXRoIHRoZSBMTEludCAvIEJhc2VsaW5lIEpJ
VCBiZWNhdXNlCisgICAgLy8gaXQgbWFrZXMgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJpZ2h0IGds
b2JhbE9iamVjdCBiZWluZyBhdmFpbGFibGUgZnJvbSBDYWxsRnJhbWU6OmNvZGVCbG9jaygpLgor
ICAgIC8vIERGRy9GVEwgbWF5IGlubGluZSBmdW5jdGlvbnMgYmVsb25naW5nIHRvIG90aGVyIGds
b2JhbE9iamVjdHMsIHdoaWNoIG1heSBub3QgbWF0Y2gKKyAgICAvLyBDYWxsRnJhbWU6OmNvZGVC
bG9jaygpLgorICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyAgICB1c2luZyBTbG93T3BlcmF0aW9u
ID0gZGVjbHR5cGUob3BlcmF0aW9uR2V0QnlWYWxXaXRoVGhpc09wdGltaXplKTsKKworICAgIHVz
aW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpHZXRCeVZhbFdpdGhUaGlzOjpiYXNlSlNSOworICAg
IHVzaW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpHZXRCeVZhbFdpdGhUaGlzOjpwcm9wZXJ0eUpT
UjsKKyAgICB1c2luZyBCYXNlbGluZUpJVFJlZ2lzdGVyczo6R2V0QnlWYWxXaXRoVGhpczo6dGhp
c0pTUjsKKyAgICB1c2luZyBCYXNlbGluZUpJVFJlZ2lzdGVyczo6R2V0QnlWYWxXaXRoVGhpczo6
Z2xvYmFsT2JqZWN0R1BSOworICAgIHVzaW5nIEJhc2VsaW5lSklUUmVnaXN0ZXJzOjpHZXRCeVZh
bFdpdGhUaGlzOjpzdHViSW5mb0dQUjsKKyAgICB1c2luZyBCYXNlbGluZUpJVFJlZ2lzdGVyczo6
R2V0QnlWYWxXaXRoVGhpczo6cHJvZmlsZUdQUjsKKworICAgIGppdC5lbWl0Q1RJVGh1bmtQcm9s
b2d1ZSgpOworCisgICAgLy8gQ2FsbCBzbG93IG9wZXJhdGlvbgorICAgIGppdC5wcmVwYXJlQ2Fs
bE9wZXJhdGlvbih2bSk7CisgICAgbG9hZEdsb2JhbE9iamVjdChqaXQsIGdsb2JhbE9iamVjdEdQ
Uik7CisgICAgaml0LnNldHVwQXJndW1lbnRzPFNsb3dPcGVyYXRpb24+KGJhc2VKU1IsIHByb3Bl
cnR5SlNSLCB0aGlzSlNSLCBnbG9iYWxPYmplY3RHUFIsIHN0dWJJbmZvR1BSLCBwcm9maWxlR1BS
KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHByZWZlcnJlZEFyZ3VtZW50R1BSPFNsb3dPcGVyYXRpb24s
IDQ+KCkgPT0gc3R1YkluZm9HUFIsICJOZWVkZWQgZm9yIGJyYW5jaCB0byBzbG93IG9wZXJhdGlv
biB2aWEgU3R1YkluZm8iKTsKKyAgICBqaXQuY2FsbChBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBPcGVyYXRpb25QdHJUYWcp
OworCisgICAgaml0LmVtaXRDVElUaHVua0VwaWxvZ3VlKCk7CisKKyAgICAvLyBUYWlsIGNhbGwg
dG8gZXhjZXB0aW9uIGNoZWNrIHRodW5rCisgICAgSnVtcCBleGNlcHRpb25DaGVjayA9IGppdC5q
dW1wKCk7CisKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lE
LCBMaW5rQnVmZmVyOjpQcm9maWxlOjpFeHRyYUNUSVRodW5rKTsKKyAgICBwYXRjaEJ1ZmZlci5s
aW5rKGV4Y2VwdGlvbkNoZWNrLCBDb2RlTG9jYXRpb25MYWJlbCh2bS5nZXRDVElTdHViKGNoZWNr
RXhjZXB0aW9uR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKKyAgICByZXR1
cm4gRklOQUxJWkVfVEhVTksocGF0Y2hCdWZmZXIsIEpJVFRodW5rUHRyVGFnLCAiQmFzZWxpbmU6
IHNsb3dfb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXNfY2FsbFNsb3dPcGVyYXRpb25UaGVuQ2hlY2tF
eGNlcHRpb24iKTsKK30KKwogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0
b3IoY29uc3QgSlNJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9y
PigpOwpAQCAtMTY4OCw4ICsyMjkyLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9n
ZXRfYnlfdmFsKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBs
b2FkQ29uc3RhbnQoc3R1YkluZm9JbmRleCwgc3R1YkluZm9HUFIpOwogICAgIG1hdGVyaWFsaXpl
UG9pbnRlckludG9NZXRhZGF0YShieXRlY29kZSwgT3BFbnVtZXJhdG9yR2V0QnlWYWw6Ok1ldGFk
YXRhOjpvZmZzZXRPZkFycmF5UHJvZmlsZSgpLCBwcm9maWxlR1BSKTsKIAotICAgIGVtaXROYWtl
ZE5lYXJKdW1wSWZOb3RKU0NlbGwoSlNWYWx1ZVJlZ3MgeyBiYXNlR1BSIH0sIGJhc2UsIElubGlu
ZUNhY2hlQ29tcGlsZXI6OmdlbmVyYXRlU2xvd1BhdGhDb2RlKHZtKCksIEFjY2Vzc1R5cGU6Okdl
dEJ5VmFsKS5jb2RlKCkpOwotCisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKGJhc2VH
UFIpKTsKICAgICAvLyBUaGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBlbmNvZGVkIHZhbHVlLgogICAg
IEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHNjcmF0
Y2gzR1BSLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9k
ZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKIApAQCAtMTczNCwx
NCArMjMzNywyMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29u
c3QgSlNJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgZ2VuLmdlbmVyYXRl
QmFzZWxpbmVEYXRhSUNGYXN0UGF0aCgqdGhpcyk7CiAgICAgcmVzZXRTUCgpOyAvLyBXZSBtaWdo
dCBPU1IgZXhpdCBoZXJlLCBzbyB3ZSBuZWVkIHRvIGNvbnNlcnZhdGl2ZWx5IHJlc2V0IFNQCisg
ICAgYWRkU2xvd0Nhc2UoKTsKICAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKIAogICAgIGRv
bmVDYXNlcy5saW5rKHRoaXMpOwogCisgICAgc2V0RmFzdFBhdGhSZXN1bWVQb2ludCgpOwogICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUsIHJldHVyblZhbHVlSlNSKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVKU1IpOwogfQogCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEpTSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3sKKyAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7Cit9CisKIHZvaWQgSklUOjplbWl0X29w
X2VudW1lcmF0b3JfcHV0X2J5X3ZhbChjb25zdCBKU0luc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BF
bnVtZXJhdG9yUHV0QnlWYWw+KCk7CkBAIC0xNzUxLDggKzIzNjEsNiBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX3B1dF9ieV92YWwoY29uc3QgSlNJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU5hbWUgPSBieXRlY29kZS5t
X3Byb3BlcnR5TmFtZTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUgPSBieXRlY29kZS5tX3Zh
bHVlOwogICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJh
dG9yOwotICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKLSAgICBB
Y2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBlY21hTW9kZS5pc1N0cmljdCgpID8gQWNjZXNzVHlwZTo6
UHV0QnlWYWxTdHJpY3QgOiBBY2Nlc3NUeXBlOjpQdXRCeVZhbFNsb3BweTsKIAogICAgIEp1bXBM
aXN0IGRvbmVDYXNlczsKIApAQCAtMTc4MCw4ICsyMzg4LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW51bWVyYXRvcl9wdXRfYnlfdmFsKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBhdXRvIFsgc3R1YkluZm8sIHN0dWJJbmZvSW5kZXggXSA9IGFkZFVubGlua2Vk
U3RydWN0dXJlU3R1YkluZm8oKTsKICAgICBsb2FkQ29uc3RhbnQoc3R1YkluZm9JbmRleCwgc3R1
YkluZm9HUFIpOwogCi0gICAgZW1pdE5ha2VkTmVhckp1bXBJZk5vdEpTQ2VsbChKU1ZhbHVlUmVn
cyB7IGJhc2VHUFIgfSwgYmFzZSwgSW5saW5lQ2FjaGVDb21waWxlcjo6Z2VuZXJhdGVTbG93UGF0
aENvZGUodm0oKSwgYWNjZXNzVHlwZSkuY29kZSgpKTsKLQorICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90Q2VsbChiYXNlR1BSKSk7CiAgICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5j
b2RlZCB2YWx1ZS4KICAgICBKdW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3Qz
MihOb25aZXJvLCBzY3JhdGNoMkdQUiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2Rl
KSk7CiAKQEAgLTE4MjIsMTMgKzI0MjksMTUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRv
cl9wdXRfYnlfdmFsKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBpc05vdEluZGV4ZWQubGluayh0aGlzKTsKICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGxBbmRQcm9maWxlKGJhc2VHUFIsIHByb2ZpbGVHUFIsIHNjcmF0Y2gxR1BSKTsKIAorICAg
IEVDTUFNb2RlIGVjbWFNb2RlID0gYnl0ZWNvZGUubV9lY21hTW9kZTsKICAgICBKSVRQdXRCeVZh
bEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG51bGxwdHIsIHN0dWJJbmZvLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIGFjY2Vzc1R5cGUsIFJlZ2lzdGVyU2V0QnVpbGRlcjo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCisgICAgICAgIG51bGxwdHIsIHN0dWJJbmZvLCBKSVRUeXBlOjpCYXNl
bGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0
ZWNvZGVJbmRleCksIGVjbWFNb2RlLmlzU3RyaWN0KCkgPyBBY2Nlc3NUeXBlOjpQdXRCeVZhbFN0
cmljdCA6IEFjY2Vzc1R5cGU6OlB1dEJ5VmFsU2xvcHB5LCBSZWdpc3RlclNldEJ1aWxkZXI6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
SlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIHByb2ZpbGVH
UFIsIHN0dWJJbmZvR1BSLCBlY21hTW9kZSk7CiAgICAgc3R1YkluZm8tPmlzRW51bWVyYXRvciA9
IHRydWU7CiAKICAgICBnZW4uZ2VuZXJhdGVCYXNlbGluZURhdGFJQ0Zhc3RQYXRoKCp0aGlzKTsK
ICAgICByZXNldFNQKCk7IC8vIFdlIG1pZ2h0IE9TUiBleGl0IGhlcmUsIHNvIHdlIG5lZWQgdG8g
Y29uc2VydmF0aXZlbHkgcmVzZXQgU1AKKyAgICBhZGRTbG93Q2FzZSgpOwogICAgIG1fcHV0QnlW
YWxzLmFwcGVuZChnZW4pOwogCiAgICAgZG9uZUNhc2VzLmxpbmsodGhpcyk7CkBAIC0xODM2LDYg
KzI0NDUsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9wdXRfYnlfdmFsKGNvbnN0
IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0V3JpdGVCYXJyaWVy
KGJhc2UsIFNob3VsZEZpbHRlckJhc2UpOwogfQogCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51
bWVyYXRvcl9wdXRfYnlfdmFsKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBnZW5lcmF0
ZVB1dEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JQdXRC
eVZhbD4oKSwgaXRlcik7Cit9CisKICNlbHNlCiAKIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0
b3JfZ2V0X2J5X3ZhbChjb25zdCBKU0luc3RydWN0aW9uKikKQEAgLTE4NDQsMTIgKzI0NTgsMjIg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEpTSW5zdHJ1
Y3Rpb24qKQogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSlNJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9S
TSgpOworfQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3B1dF9ieV92YWwoY29uc3Qg
SlNJbnN0cnVjdGlvbiopCiB7CiAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlz
LCBzbG93X3BhdGhfZW51bWVyYXRvcl9wdXRfYnlfdmFsKTsKICAgICBzbG93UGF0aENhbGwuY2Fs
bCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9wdXRfYnlfdmFsKGNv
bnN0IEpTSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikKK3sK
KyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKK30KKwogI2VuZGlmCiAKICNlbGlmIFVT
RShKU1ZBTFVFMzJfNjQpCkBAIC0xODYwLDYgKzI0ODQsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X3ZhbF93aXRoX3RoaXMoY29uc3QgSlNJbnN0cnVjdGlvbiopCiAgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWxfd2l0aF90
aGlzKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JikKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKK30KKwogdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IoY29uc3QgSlNJbnN0cnVjdGlvbiopCiB7CiAg
ICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBzbG93X3BhdGhfZ2V0X3Byb3Bl
cnR5X2VudW1lcmF0b3IpOwpAQCAtMTg3OCw2ICsyNTA3LDExIEBAIHZvaWQgSklUOjplbWl0X29w
X2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBKU0luc3RydWN0aW9uKikKICAgICBzbG93UGF0
aENhbGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRf
YnlfdmFsKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJikKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKK30KKwogdm9pZCBKSVQ6
OmVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwoY29uc3QgSlNJbnN0cnVjdGlvbiopCiB7CiAg
ICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBzbG93X3BhdGhfZW51bWVyYXRv
cl9pbl9ieV92YWwpOwpAQCAtMTg5MCw2ICsyNTI0LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2Vu
dW1lcmF0b3JfcHV0X2J5X3ZhbChjb25zdCBKU0luc3RydWN0aW9uKikKICAgICBzbG93UGF0aENh
bGwuY2FsbCgpOwogfQogCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9wdXRfYnlf
dmFsKGNvbnN0IEpTSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JikKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKK30KKwogdm9pZCBKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KGNvbnN0IEpTSW5zdHJ1Y3Rpb24qKQog
ewogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgc2xvd19wYXRoX2VudW1l
cmF0b3JfaGFzX293bl9wcm9wZXJ0eSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlZ2lzdGVyU2V0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVy
U2V0LmgKaW5kZXggMDM1YTg2YWQzNDVlLi41N2IwODBhZTUzZmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogCiAgICAg
aW5saW5lIGNvbnN0ZXhwciBSZWdpc3RlclNldEJ1aWxkZXImIGFkZChSZWcgcmVnLCBXaWR0aCB3
aWR0aCkKICAgICB7Ci0gICAgICAgIEFTU0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVCghIXJl
Zyk7CisgICAgICAgIEFTU0VSVCghIXJlZyk7CiAgICAgICAgIG1fYml0cy5zZXQocmVnLmluZGV4
KCkpOwogCiAgICAgICAgIGlmIChVTkxJS0VMWSh3aWR0aCA+IGNvbnNlcnZhdGl2ZVdpZHRoV2l0
aG91dFZlY3RvcnMocmVnKSAmJiBjb25zZXJ2YXRpdmVXaWR0aChyZWcpID4gY29uc2VydmF0aXZl
V2lkdGhXaXRob3V0VmVjdG9ycyhyZWcpKSkKQEAgLTg2LDcgKzg2LDkgQEAgcHVibGljOgogCiAg
ICAgaW5saW5lIGNvbnN0ZXhwciBSZWdpc3RlclNldEJ1aWxkZXImIHJlbW92ZShSZWcgcmVnKQog
ICAgIHsKLSAgICAgICAgQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhUKCEhcmVnKTsKKwor
CisgICAgICAgIEFTU0VSVCghIXJlZyk7CiAgICAgICAgIG1fYml0cy5jbGVhcihyZWcuaW5kZXgo
KSk7CiAgICAgICAgIG1fdXBwZXJCaXRzLmNsZWFyKHJlZy5pbmRleCgpKTsKICAgICAgICAgcmV0
dXJuICp0aGlzOwpAQCAtMTY5LDcgKzE3MSw3IEBAIHB1YmxpYzoKICAgICBmcmllbmQgY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlclNldEJ1aWxkZXImLCBjb25zdCBSZWdp
c3RlclNldEJ1aWxkZXImKSA9IGRlZmF1bHQ7CiAKIHByb3RlY3RlZDoKLSAgICBpbmxpbmUgY29u
c3RleHByIHZvaWQgc2V0QW55KFJlZyByZWcpIHsgQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05U
RVhUKCFyZWcuaXNGUFIoKSk7IGFkZChyZWcsIElnbm9yZVZlY3RvcnMpOyB9CisgICAgaW5saW5l
IGNvbnN0ZXhwciB2b2lkIHNldEFueShSZWcgcmVnKSB7IEFTU0VSVCghcmVnLmlzRlBSKCkpOyBh
ZGQocmVnLCBJZ25vcmVWZWN0b3JzKTsgfQogICAgIGlubGluZSBjb25zdGV4cHIgdm9pZCBzZXRB
bnkoSlNWYWx1ZVJlZ3MgcmVncykgeyBhZGQocmVncywgSWdub3JlVmVjdG9ycyk7IH0KICAgICBp
bmxpbmUgY29uc3RleHByIHZvaWQgc2V0QW55KGNvbnN0IFJlZ2lzdGVyU2V0QnVpbGRlciYgc2V0
KSB7IG1lcmdlKHNldCk7IH0KICAgICBpbmxpbmUgY29uc3RleHByIHZvaWQgc2V0TWFueSgpIHsg
fQpAQCAtMjI3LDE2ICsyMjksOSBAQCBjbGFzcyBSZWdpc3RlclNldCBmaW5hbCB7CiBwdWJsaWM6
CiAgICAgY29uc3RleHByIFJlZ2lzdGVyU2V0KCkgPSBkZWZhdWx0OwogCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgUmVnVHlwZSwgdHlwZW5hbWUuLi4gUmVncz4KLSAgICBjb25zdGV4cHIgZXhwbGlj
aXQgaW5saW5lIFJlZ2lzdGVyU2V0KFJlZ1R5cGUgcmVnLCBSZWdzLi4uIHJlZ3MpCi0gICAgICAg
IDogUmVnaXN0ZXJTZXQocmVncy4uLikKLSAgICB7Ci0gICAgICAgIGFkZChyZWcsIElnbm9yZVZl
Y3RvcnMpOwotICAgIH0KLQogICAgIGlubGluZSBjb25zdGV4cHIgYm9vbCBjb250YWlucyhSZWcg
cmVnLCBXaWR0aCB3aWR0aCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVF9VTkRFUl9DT05T
VEVYUFJfQ09OVEVYVChtX2JpdHMuY291bnQoKSA+PSBtX3VwcGVyQml0cy5jb3VudCgpKTsKKyAg
ICAgICAgQVNTRVJUKG1fYml0cy5jb3VudCgpID49IG1fdXBwZXJCaXRzLmNvdW50KCkpOwogICAg
ICAgICBpZiAoTElLRUxZKHdpZHRoIDwgY29uc2VydmF0aXZlV2lkdGgocmVnKSkgfHwgY29uc2Vy
dmF0aXZlV2lkdGgocmVnKSA8PSBjb25zZXJ2YXRpdmVXaWR0aFdpdGhvdXRWZWN0b3JzKHJlZykp
CiAgICAgICAgICAgICByZXR1cm4gbV9iaXRzLmdldChyZWcuaW5kZXgoKSk7CiAgICAgICAgIHJl
dHVybiBtX2JpdHMuZ2V0KHJlZy5pbmRleCgpKSAmJiBtX3VwcGVyQml0cy5nZXQocmVnLmluZGV4
KCkpOwpAQCAtMjYzLDcgKzI1OCw3IEBAIHB1YmxpYzoKIAogICAgIGlubGluZSBjb25zdGV4cHIg
c2l6ZV90IG51bWJlck9mU2V0UmVnaXN0ZXJzKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VS
VF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVChtX2JpdHMuY291bnQoKSA+PSBtX3VwcGVyQml0cy5j
b3VudCgpKTsKKyAgICAgICAgQVNTRVJUKG1fYml0cy5jb3VudCgpID49IG1fdXBwZXJCaXRzLmNv
dW50KCkpOwogICAgICAgICByZXR1cm4gbV9iaXRzLmNvdW50KCk7CiAgICAgfQogCkBAIC0yODYs
MTMgKzI4MSwxMyBAQCBwdWJsaWM6CiAKICAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgaXNFbXB0
eSgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlRfVU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQo
bV9iaXRzLmNvdW50KCkgPj0gbV91cHBlckJpdHMuY291bnQoKSk7CisgICAgICAgIEFTU0VSVCht
X2JpdHMuY291bnQoKSA+PSBtX3VwcGVyQml0cy5jb3VudCgpKTsKICAgICAgICAgcmV0dXJuIG1f
Yml0cy5pc0VtcHR5KCk7CiAgICAgfQogCiAgICAgaW5saW5lIGNvbnN0ZXhwciBSZWdpc3RlclNl
dCYgaW5jbHVkZVdob2xlUmVnaXN0ZXJXaWR0aCgpCiAgICAgewotICAgICAgICBBU1NFUlRfVU5E
RVJfQ09OU1RFWFBSX0NPTlRFWFQobV9iaXRzLmNvdW50KCkgPj0gbV91cHBlckJpdHMuY291bnQo
KSk7CisgICAgICAgIEFTU0VSVChtX2JpdHMuY291bnQoKSA+PSBtX3VwcGVyQml0cy5jb3VudCgp
KTsKICAgICAgICAgbV91cHBlckJpdHMubWVyZ2UobV9iaXRzKTsKICAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgIH0KQEAgLTMwMiwxMCArMjk3LDEwIEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jPgogICAgIGlubGluZSBjb25zdGV4cHIgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1
bmMmIGZ1bmMpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlRfVU5ERVJfQ09OU1RFWFBSX0NP
TlRFWFQobV9iaXRzLmNvdW50KCkgPj0gbV91cHBlckJpdHMuY291bnQoKSk7CisgICAgICAgIEFT
U0VSVChtX2JpdHMuY291bnQoKSA+PSBtX3VwcGVyQml0cy5jb3VudCgpKTsKICAgICAgICAgbV9i
aXRzLmZvckVhY2hTZXRCaXQoCiAgICAgICAgICAgICBbJl0gKHNpemVfdCBpbmRleCkgewotICAg
ICAgICAgICAgICAgIEFTU0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVChtX2JpdHMuZ2V0KGlu
ZGV4KSA+PSBtX3VwcGVyQml0cy5nZXQoaW5kZXgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
bV9iaXRzLmdldChpbmRleCkgPj0gbV91cHBlckJpdHMuZ2V0KGluZGV4KSk7CiAgICAgICAgICAg
ICAgICAgZnVuYyhSZWc6OmZyb21JbmRleChpbmRleCkpOwogICAgICAgICAgICAgfSk7CiAgICAg
fQpAQCAtMzEzLDEwICszMDgsMTAgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+CiAgICAgaW5saW5lIGNvbnN0ZXhwciB2b2lkIGZvckVhY2hXaXRoV2lkdGgoY29uc3QgRnVu
YyYgZnVuYykgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVF9VTkRFUl9DT05TVEVYUFJfQ09O
VEVYVChtX2JpdHMuY291bnQoKSA+PSBtX3VwcGVyQml0cy5jb3VudCgpKTsKKyAgICAgICAgQVNT
RVJUKG1fYml0cy5jb3VudCgpID49IG1fdXBwZXJCaXRzLmNvdW50KCkpOwogICAgICAgICBtX2Jp
dHMuZm9yRWFjaFNldEJpdCgKICAgICAgICAgICAgIFsmXSAoc2l6ZV90IGluZGV4KSB7Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhUKG1fYml0cy5nZXQoaW5k
ZXgpID49IG1fdXBwZXJCaXRzLmdldChpbmRleCkpOworICAgICAgICAgICAgICAgIEFTU0VSVCht
X2JpdHMuZ2V0KGluZGV4KSA+PSBtX3VwcGVyQml0cy5nZXQoaW5kZXgpKTsKICAgICAgICAgICAg
ICAgICBSZWcgcmVnID0gUmVnOjpmcm9tSW5kZXgoaW5kZXgpOwogICAgICAgICAgICAgICAgIFdp
ZHRoIGluY2x1ZGVkV2lkdGggPSBtX3VwcGVyQml0cy5nZXQoaW5kZXgpID8gY29uc2VydmF0aXZl
V2lkdGgocmVnKSA6IGNvbnNlcnZhdGl2ZVdpZHRoV2l0aG91dFZlY3RvcnMocmVnKTsKICAgICAg
ICAgICAgICAgICBmdW5jKHJlZywgaW5jbHVkZWRXaWR0aCk7CkBAIC0zNTEsNyArMzQ2LDcgQEAg
cHVibGljOgogCiAgICAgaW5saW5lIGNvbnN0ZXhwciBSZWdpc3RlclNldCYgYWRkKFJlZyByZWcs
IFdpZHRoIHdpZHRoKQogICAgIHsKLSAgICAgICAgQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05U
RVhUKCEhcmVnKTsKKyAgICAgICAgQVNTRVJUKCEhcmVnKTsKICAgICAgICAgbV9iaXRzLnNldChy
ZWcuaW5kZXgoKSk7CiAKICAgICAgICAgaWYgKFVOTElLRUxZKHdpZHRoID4gY29uc2VydmF0aXZl
V2lkdGhXaXRob3V0VmVjdG9ycyhyZWcpICYmIGNvbnNlcnZhdGl2ZVdpZHRoKHJlZykgPiBjb25z
ZXJ2YXRpdmVXaWR0aFdpdGhvdXRWZWN0b3JzKHJlZykpKQpAQCAtMzc0LDcgKzM2OSw3IEBAIHB1
YmxpYzoKIAogICAgIGlubGluZSBjb25zdGV4cHIgUmVnaXN0ZXJTZXQmIHJlbW92ZShSZWcgcmVn
KQogICAgIHsKLSAgICAgICAgQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhUKCEhcmVnKTsK
KyAgICAgICAgQVNTRVJUKCEhcmVnKTsKICAgICAgICAgbV9iaXRzLmNsZWFyKHJlZy5pbmRleCgp
KTsKICAgICAgICAgbV91cHBlckJpdHMuY2xlYXIocmVnLmluZGV4KCkpOwogICAgICAgICByZXR1
cm4gKnRoaXM7CkBAIC0zOTQsNyArMzg5LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV9i
aXRzLm1lcmdlKG90aGVyLm1fYml0cyk7CiAgICAgICAgIG1fdXBwZXJCaXRzLm1lcmdlKG90aGVy
Lm1fdXBwZXJCaXRzKTsKLSAgICAgICAgQVNTRVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhUKG1f
Yml0cy5jb3VudCgpID49IG1fdXBwZXJCaXRzLmNvdW50KCkpOworICAgICAgICBBU1NFUlQobV9i
aXRzLmNvdW50KCkgPj0gbV91cHBlckJpdHMuY291bnQoKSk7CiAgICAgICAgIHJldHVybiAqdGhp
czsKICAgICB9CiAKQEAgLTQzNiw3ICs0MzEsNyBAQCBjb25zdGV4cHIgUmVnaXN0ZXJTZXQgUmVn
aXN0ZXJTZXRCdWlsZGVyOjpidWlsZEFuZFZhbGlkYXRlKCkgY29uc3QKICAgICAgICAgaWYgKCFt
X2JpdHMuZ2V0KHJlZy5pbmRleCgpKSAmJiAhbV91cHBlckJpdHMuZ2V0KHJlZy5pbmRleCgpKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEFTU0VSVF9VTkRFUl9DT05TVEVYUFJf
Q09OVEVYVCghbV91cHBlckJpdHMuZ2V0KHJlZy5pbmRleCgpKSB8fCBtX2JpdHMuZ2V0KHJlZy5p
bmRleCgpKSk7CisgICAgICAgIEFTU0VSVCghbV91cHBlckJpdHMuZ2V0KHJlZy5pbmRleCgpKSB8
fCBtX2JpdHMuZ2V0KHJlZy5pbmRleCgpKSk7CiAgICAgfQogI2VuZGlmCiAgICAgcmV0dXJuIFJl
Z2lzdGVyU2V0KCp0aGlzKTsKQEAgLTQ3OSw3ICs0NzQsNyBAQCBwdWJsaWM6CiAKICAgICBpbmxp
bmUgY29uc3RleHByIHZvaWQgYWRkKFJlZyByZWcsIElnbm9yZVZlY3RvcnNUYWcpCiAgICAgewot
ICAgICAgICBBU1NFUlRfVU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQoISFyZWcpOworICAgICAgICBB
U1NFUlQoISFyZWcpOwogICAgICAgICBtX2JpdHMuc2V0KHJlZy5pbmRleCgpKTsKICAgICB9CiAK
QEAgLTQ5MiwxMyArNDg3LDEzIEBAIHB1YmxpYzoKIAogICAgIGlubGluZSBjb25zdGV4cHIgdm9p
ZCByZW1vdmUoUmVnIHJlZykKICAgICB7Ci0gICAgICAgIEFTU0VSVF9VTkRFUl9DT05TVEVYUFJf
Q09OVEVYVCghIXJlZyk7CisgICAgICAgIEFTU0VSVCghIXJlZyk7CiAgICAgICAgIG1fYml0cy5j
bGVhcihyZWcuaW5kZXgoKSk7CiAgICAgfQogCiAgICAgaW5saW5lIGNvbnN0ZXhwciBib29sIGNv
bnRhaW5zKFJlZyByZWcsIElnbm9yZVZlY3RvcnNUYWcpIGNvbnN0CiAgICAgewotICAgICAgICBB
U1NFUlRfVU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQoISFyZWcpOworICAgICAgICBBU1NFUlQoISFy
ZWcpOwogICAgICAgICByZXR1cm4gbV9iaXRzLmdldChyZWcuaW5kZXgoKSk7CiAgICAgfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>